Re[2]: Прыжки по коду
От: licedey  
Дата: 13.12.16 19:28
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, licedey, Вы писали:


l>> Так вот суть в чем. Я понимаю, что уже сто лет как напридумывали всяких редмайнов, джир и фабрикаторов, со скрам бордами через плечо.

l>> НО! Заказчик пишет — я хочу такую то фичу, она должна свистеть, а сзади у нее должен быть красненький мотор. Он уложился в три строки. И вроде с виду
·>Я как фанат ещё упомяну тесты (разных уровней Unit, Integration, Func, Perf, etc). Тесты тоже неплохой инструмент управления сложностью. Каждый тест по сути небольшая исполняемая программка, и вместо написания огромного сложного приложения ты пишешь сотни маленьких и простых. А собирать сложную конструкцию из простых и ожидаемо работающих

Кстати про тесты. Я в целом то с вами соглашусь, но сколько времени уходит на их написание? Когда ты один на один с заказчиком — плевать он хотел на тесты и все что под капотом, ну вы сами знаете. Важен бюджет и чтобы работало. Все. Вот хоть в нерабочее время эти тесты пиши.
И вот хотелось бы спросить еще, вы как фанат тестов, случаем не посоветуете тулзу которая под C#/Visual Studio бы генерила тесты. Не только стабы пустышки, а именно чтото сама додумывала и пыталась хоть немного покрыть функционал? Пойду конечно погуглю, но лучше спросить
Re: Прыжки по коду
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.16 19:46
Оценка:
Здравствуйте, licedey, Вы писали:

L>Прыг в UI, прыг в конфиги, прыг в класс модели, прыг в класс view-модели, назад в UI. И этот процесс цикличен. Между этими прыжками, можно потерять какую-либо деталь и вообще улететь в космос, размышляя о бытие.


На чем пишешь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Прыжки по коду
От: · Великобритания  
Дата: 13.12.16 20:40
Оценка:
Здравствуйте, licedey, Вы писали:

l> ·>Я как фанат ещё упомяну тесты (разных уровней Unit, Integration, Func, Perf, etc). Тесты тоже неплохой инструмент управления сложностью. Каждый тест по сути небольшая исполняемая программка, и вместо написания огромного сложного приложения ты пишешь сотни маленьких и простых. А собирать сложную конструкцию из простых и ожидаемо работающих


l> Кстати про тесты. Я в целом то с вами соглашусь, но сколько времени уходит на их написание?

От опыта зависит. Если есть опыт, то код с тестами как правило пишется быстрее. Т.к. значительно уменьшается время от внесения изменения до проверки как это изменение функционирует. Таких ситуаций "ой, опечатка! тут надо было +1, а не -1 написать! Ох... опять компилить, деплоить, запускать..." практически не остаётся — а таких опечаток очень много, съедают кучу времени.

l> Когда ты один на один с заказчиком — плевать он хотел на тесты и все что под капотом, ну вы сами знаете. Важен бюджет и чтобы работало. Все. Вот хоть в нерабочее время эти тесты пиши.

Тесты не должны идти отдельной строчкой бюджета, это неотъемлемая часть качественной разработки. Ты ж заказчику не просишь отдельно оплатить "использование VCS" или "написание осмысленных идентификаторов в коде". С другой стороны не каждому заказчику нужна качественная разработка... но надеюсь мы не о таких проектах говорим.

l> И вот хотелось бы спросить еще, вы как фанат тестов, случаем не посоветуете тулзу которая под C#/Visual Studio бы генерила тесты. Не только стабы пустышки, а именно чтото сама додумывала и пыталась хоть немного покрыть функционал? Пойду конечно погуглю, но лучше спросить

В идеале тесты до основного кода пишутся... На основе чего эта тулза должна генерить тесты? Если ты можешь генерить тесты, то чего уж — генери сам основной код... и покрой тестами генератор.
avalon/2.0.1
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Прыжки по коду
От: licedey  
Дата: 13.12.16 21:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, licedey, Вы писали:


L>>Прыг в UI, прыг в конфиги, прыг в класс модели, прыг в класс view-модели, назад в UI. И этот процесс цикличен. Между этими прыжками, можно потерять какую-либо деталь и вообще улететь в космос, размышляя о бытие.


VD>На чем пишешь?


Nemerle

Ну в основном на C#/C++
Re[3]: Прыжки по коду
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.16 21:04
Оценка:
Здравствуйте, licedey, Вы писали:

L>Nemerle


Зря шутишь. На немерле то как раз сложность обуздать по проще.

L>Ну в основном на C#/C++


С Плюсами все фигово по определению, а на Шарпе можно фичами РеШарпера пользоваться. Там для навигации много чего есть. В том числе и из гуя в код и обратно.

Еще есть способ работающий везде, но требующий пунктуальности. Используешь теги в коментариях типа
// #фича_ххх

Ну, и в остальных местах (треккер, гит, доки) используешь эти теги. При этом они должны быть уникальны, конечно. Далее тупой поиск позволяет найти все связанное.
Это и для плюсов катит.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Прыжки по коду
От: licedey  
Дата: 13.12.16 21:17
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, licedey, Вы писали:


l>> И вот хотелось бы спросить еще, вы как фанат тестов, случаем не посоветуете тулзу которая под C#/Visual Studio бы генерила тесты. Не только стабы пустышки, а именно чтото сама додумывала и пыталась хоть немного покрыть функционал? Пойду конечно погуглю, но лучше спросить

·>В идеале тесты до основного кода пишутся... На основе чего эта тулза должна генерить тесты? Если ты можешь генерить тесты, то чего уж — генери сам основной код... и покрой тестами генератор.

Ну я не фанат TDD, не понимаю как это делать. Читал, пытался писать сначала тесты, но привычка знаете, сначала формы шлепать, потом функционал потихоньку добавлять, а потом по требованию правой кнопочкой мыши и Generate Unit Test...
Re[4]: Прыжки по коду
От: licedey  
Дата: 13.12.16 21:26
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, licedey, Вы писали:


L>>Nemerle


VD>Зря шутишь. На немерле то как раз сложность обуздать по проще.


Я не шучу, еще 4 года назад ваш парсер c# кода использовал в своем проекте. За что вам спасибо. Но помоему больше не доводилось нигде.
Как можно обуздать сложность, не спрашиваю, но можете рассказать.

L>>Ну в основном на C#/C++


VD>С Плюсами все фигово по определению, а на Шарпе можно фичами РеШарпера пользоваться. Там для навигации много чего есть. В том числе и из гуя в код и обратно.


Решарпер почему то у меня ассоциируется с громадной универсальной махиной, которая только тормозит студию. Я понимаю конечно, что продукт хороший и повсеместный,
но мне тот же visual assist ближе.

VD>Еще есть способ работающий везде, но требующий пунктуальности. Используешь теги в коментариях типа

VD>
VD>// #фича_ххх
VD>

VD>Ну, и в остальных местах (треккер, гит, доки) используешь эти теги. При этом они должны быть уникальны, конечно. Далее тупой поиск позволяет найти все связанное.
VD>Это и для плюсов катит.

Учту.
Re[5]: Прыжки по коду
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.16 22:04
Оценка:
Здравствуйте, licedey, Вы писали:

L>Как можно обуздать сложность, не спрашиваю, но можете рассказать.


Ключевое слова — макросы. Многое можно автоматизировать или сделать оптимально без сильных затрат.

Например, для Nitra
Автор: VladD2
Дата: 18.12.15
делали клиент-серверный IDE-движок. В нем обработка кода ведется на сервере, а общение проводится через сериализуемые сообщения. В результате написали макро-атрибут NitraMessage, который будучи применен к типу генерирует для него эффективый код сериализации. В результате описание типов для сообщений стало выглядеть так:
  [NitraMessage]
  public struct FileEntries
  {
    public File   : FileIdentity;
    public Ranges : ImmutableArray[Range];
  }

Конструктор так же генерируется автоматически.
Полный список всех типов умещается в одном файлике и отлично легко поддерживается.

Сам код макроса находится тут.

Естественно, что сериализация это только пример. Ты можешь сгенерит все что угодно и иметь одни короткий исходник порождающий много кода.

Ну, и сам язык мощнее. Даже C# 7 не включает всех его фич. Да и 8 не будет.

L>Решарпер почему то у меня ассоциируется с громадной универсальной махиной, которая только тормозит студию. Я понимаю конечно, что продукт хороший и повсеместный,

L>но мне тот же visual assist ближе.

Я использовал Visual Assist лет 15 назад. Тогда там функциональность была очень скудная и работал он со скрипом.

Решарпер сейчас работает довольно не плохо. Особенно на фоне новой менеджед-реализации самого Шарпа. И функциональность там просто запредельная.

Навигация очень удобная. Жмешь Ctrl+T и пишешь большие буквы ( hs для поиска HashSet) нужного тебе символа (без оглядки на его тип). Далее из списка выбираешь и ты уже там. Далее очень удобный переход по реализациям интерфейсов и виртуальных методов. Ну, и много всего.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Прыжки по коду
От: Evgeny.Panasyuk Россия  
Дата: 13.12.16 22:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Сам код макроса находится тут.

VD>Естественно, что сериализация это только пример.

Примитивнейший пример — подобная рекурсивная сериализация структур и на C++ реализуется
Автор: Evgeny.Panasyuk
Дата: 06.10.14
— десяток/два строк на непосредственно рекурсивный "движок", плюс само собой код сериализации базисных типов.

VD>Навигация очень удобная. Жмешь Ctrl+T и пишешь большие буквы ( hs для поиска HashSet) нужного тебе символа (без оглядки на его тип). Далее из списка выбираешь и ты уже там. Далее очень удобный переход по реализациям интерфейсов и виртуальных методов. Ну, и много всего.


Такое и для C++ есть, даже не в рамках IDE:
https://www.youtube.com/watch?v=5FQwQ0QWBTU
Re[6]: Прыжки по коду
От: licedey  
Дата: 13.12.16 22:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, licedey, Вы писали:


L>>Как можно обуздать сложность, не спрашиваю, но можете рассказать.

VD>Сам код макроса находится тут.
VD>Естественно, что сериализация это только пример. Ты можешь сгенерит все что угодно и иметь одни короткий исходник порождающий много кода.

Из бенефитов я извлек только, что конструктор структуры генерится сам. Ну вникнуть конечно время надо и увидеть в действии. Почитаю на выходных getting started.
Работаю тут с человеком

VD>Ну, и сам язык мощнее. Даже C# 7 не включает всех его фич. Да и 8 не будет.


Спорить не буду, массовости не хватает, комьюнити. Чтобы зашел на SO, а там уже 25 ответов на твой вопрос. К слову, пришел несколько лет назад в Microsoft ua, и начал показывать им свой проект, который как я говорил в основе содержал ваш парсер. И они пожимали плечами при слове Немерле. Странно, не правда ли?


VD>Решарпер сейчас работает довольно не плохо. Особенно на фоне новой менеджед-реализации самого Шарпа. И функциональность там просто запредельная.

VD>Навигация очень удобная. Жмешь Ctrl+T и пишешь большие буквы ( hs для поиска HashSet) нужного тебе символа (без оглядки на его тип). Далее из списка выбираешь и ты уже там. Далее очень удобный переход по реализациям интерфейсов и виртуальных методов. Ну, и много всего.

Пока работаю дома, я конечно могу себе позволить им пользоваться. Но у меня сомнения закрадываются что любая контора может позволить себе их прайс. Минимум 300 у.е. в год..кхм. Скоро MS в своем духе сопрет все их фичи и он перестанет быть нужен. Впрочем и visual assist уже не нужен, в последней студии не ставил его, ибо все из коробки.
Re[5]: Прыжки по коду
От: · Великобритания  
Дата: 13.12.16 23:08
Оценка:
Здравствуйте, licedey, Вы писали:

l> ·>В идеале тесты до основного кода пишутся... На основе чего эта тулза должна генерить тесты? Если ты можешь генерить тесты, то чего уж — генери сам основной код... и покрой тестами генератор.

l> Ну я не фанат TDD, не понимаю как это делать. Читал, пытался писать сначала тесты, но привычка знаете, сначала формы шлепать, потом функционал потихоньку добавлять, а потом по требованию правой кнопочкой мыши и Generate Unit Test...
Надо начинать с разделения UI и функционала.
Попробуй писать логику до UI. Когда логика готова — прикручиваешь готовые оттестированные классы к форме.
Ну и ещё надо найти способ тестирования UI... с этом обычно самые проблемы. Не в курсе как это делается в C#, в веб-приложениях хорошо идёт Selenium.
avalon/2.0.1
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: Прыжки по коду
От: licedey  
Дата: 14.12.16 10:21
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, licedey, Вы писали:


·>Надо начинать с разделения UI и функционала.

·>Попробуй писать логику до UI. Когда логика готова — прикручиваешь готовые оттестированные классы к форме.
·>Ну и ещё надо найти способ тестирования UI... с этом обычно самые проблемы. Не в курсе как это делается в C#, в веб-приложениях хорошо идёт Selenium.
У меня затык в том, что я не особо визуализирую классы-логики, до появления UI. То есть функционал полностью проясняется, когда перед тобой UI висит.

А второй значимый момент, это то, что клиент (а я фрилансер) всегда ведеться на красивый UI и дает дальше бюджет, и пусть внутри пустота.

Недавно история была, как 4ро парней из команды пыхтели над логикой (под Mac), а я в это время в одиночку красивенько отрисовывал UI (Win). Итог немного предсказуем.
Под Mac Проект заморозили, ибо прошло пол года а ничего не видно ((, а весь груз отвественности и бюджет отдали мне. 4-ых уделал одной красотой.
И в догонку может вы слышали золотое правило шаровары, Market first, Marketing second, Aestetic third and Functionality last. Это про приотеты в разработке своего продукта. Внешний вид получается уделывает фунционал.
Re[7]: Прыжки по коду
От: · Великобритания  
Дата: 14.12.16 10:56
Оценка:
Здравствуйте, licedey, Вы писали:

L>·>Надо начинать с разделения UI и функционала.

L>·>Попробуй писать логику до UI. Когда логика готова — прикручиваешь готовые оттестированные классы к форме.
L>·>Ну и ещё надо найти способ тестирования UI... с этом обычно самые проблемы. Не в курсе как это делается в C#, в веб-приложениях хорошо идёт Selenium.
L>У меня затык в том, что я не особо визуализирую классы-логики, до появления UI. То есть функционал полностью проясняется, когда перед тобой UI висит.
L>А второй значимый момент, это то, что клиент (а я фрилансер) всегда ведеться на красивый UI и дает дальше бюджет, и пусть внутри пустота.
Неужели весь этот код, по которому приходтися прыгать это "красивый UI"? Если так, то вряд ли тут тесты сильно помогут... Ведь свойство "быть красивым" в авто-тесте не проверишь...
А если таки что-то есть функиональное внутри, то его и можно покрывать тестами, независимо от UI.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[8]: Прыжки по коду
От: licedey  
Дата: 14.12.16 11:44
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, licedey, Вы писали:


L>>У меня затык в том, что я не особо визуализирую классы-логики, до появления UI. То есть функционал полностью проясняется, когда перед тобой UI висит.

L>>А второй значимый момент, это то, что клиент (а я фрилансер) всегда ведеться на красивый UI и дает дальше бюджет, и пусть внутри пустота.
·>Неужели весь этот код, по которому приходтися прыгать это "красивый UI"? Если так, то вряд ли тут тесты сильно помогут... Ведь свойство "быть красивым" в авто-тесте не проверишь...
·>А если таки что-то есть функиональное внутри, то его и можно покрывать тестами, независимо от UI.

Ну я же не про один проект говорю, на фрилансе такое индусское хауноу попадается, что мучаешься в догадках где достать такую же траву, чтобы постичь глубину их мысли.
Вот там прыгаешь як скаженный.
Re: Прыжки по коду
От: Sharov Россия  
Дата: 14.12.16 13:48
Оценка:
Здравствуйте, licedey, Вы писали:

L>В общем, чтобы не растекаться мыслью по древу, перейду к вопросу. У вас есть монстр, у вас есть задача. Между ними — пропасть реализации. Как удержать в голове и реализовать все микрозадачи?

L>Обычный процесс кодинга идет примерно так (по себе сужу). Вам надо создать класс (в нужной папке), создать в нем свойства, затем связать это с UI, потом поправить класс Settings, чтобы он учитывал внесенные изменения, в другом классе создать объект, перейти в нужный метод итд. В общем случае, мы постоянно прыгаем по коду. Огромному неуправляемому. И как проще сделать, чтобы эти прыжки были более продуктивными и не напрягали весь мозг.

L>Вот мой пример, что для этого делаю я. У меня есть мультизадача, или сверхзадача, которую обозначил заказчик (хотите менеджер). Разумеется я разбиваю ее на более мелкие подзадачи. И далее, исходя из них я начинаю кодить. Но тут и приходиться запинаться все время. Прыг в UI, прыг в конфиги, прыг в класс модели, прыг в класс view-модели,

L>назад в UI. И этот процесс цикличен. Между этими прыжками, можно потерять какую-либо деталь и вообще улететь в космос, размышляя о бытие.
L>Вобщем я пишу все в блокнот, все эти микрозадачи, и при каждом прыжке лезу в заметки, чтобы не забыть. У вас как?

Делайте задачу транзакционно -- не начинайте следующую пока не закончите текущую. Основные идеи, классы, абстракции не гнушайтесь записывать на бумагу. Это реально лучше чем записать в какой-нибудь блокнот на компьютере, больше осмысленности задействуется.

У меня ситуация схожа, хоть я и не фрилансер. Я активно использую R#, настроил его под себя -- свои hot-key'и и т.д. В случае с заказчиком и постоянными требованиями заведите какую-нибудь agile доску типа kanban, jira и т.д. Так легче ему и Вам отслеживать задачи и статус. Что не отменяет ручки и бумаги.
Кодом людям нужно помогать!
Re[7]: Прыжки по коду
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.16 17:07
Оценка:
Здравствуйте, licedey, Вы писали:

L>Из бенефитов я извлек только, что конструктор структуры генерится сам.


Для этого вообще одна строчка кода потребовалась, так как макрос генерации конструкторов уже есть из коробки.

Но ты не правильном мыслишь. Главный бенефит — это то что есть в конкретном макросе, а то, что ты волен создать любой макрос сам. Он, во время компиляции, сгенирирует тебе нужный тебе код по нужным тебе правилам. И когда надо ты подправишь макру и получишь нужные изменения в измененном коде.

Причем делается это все удобно и незаметно для пользователя. Пользователь просто получает готовые решения, которые сложно или невозможно сделать в виде библиотеки. Всяческие генераторы на Т4, посткомпиляторы (вроде Постшарпа) становятся ненужны.

Собственно, чтобы было понятно приведу вариант одного из простейших типов и то в какой код он раскрывается при компиляции:

  Код структуры NSpan
  [NitraMessage, StructuralEquality]
  public struct NSpan : IComparable[NSpan]
  {
    public StartPos : int;
    public EndPos   : int;
    public Length   : int { get { EndPos - StartPos }}
    
    public IsEmpty : bool
    {
      get { StartPos == EndPos }
    }
    
    public IntersectsWith(pos : int)              : bool { pos <= EndPos && pos >= StartPos }
    public IntersectsWith(start : int, end : int) : bool { start <= EndPos && end >= StartPos }
    public IntersectsWith(other : NSpan)          : bool { IntersectsWith(other.StartPos, other.EndPos) }
    public IntersectsWith(other : Range)          : bool { IntersectsWith(other.Span) }
    public IntersectsWith(other : Location)       : bool { IntersectsWith(other.Range) }
    
    public override ToString() : string { StartPos + ", " + EndPos }
    
    public CompareTo(other : NSpan) : int
    {
      def result = StartPos.CompareTo(other.StartPos);
      if (result == 0)
        EndPos.CompareTo(other.EndPos)
      else
        result
    }
  }


NitraMessage — как уже говорилось выше, генерирует код сериализации, дополнительное поле MsgId уникальное внутри модуля и коструктор (добавляет макру Record). StructuralEquality — это макра из стандартной библиотеки реализующая методы эквивалентности путем сравнения всех полей. В результате получаем вот такой код (получено декомпиляцией в C#):

  Декомпилят структуры NSpan
public struct NSpan : IComparable<NSpan>, IEquatable<NSpan>, IStructuralEquatable
{
  public readonly int StartPos;

  public readonly int EndPos;

  public int Length
  {
    get
    {
      return checked(this.EndPos - this.StartPos);
    }
  }

  public bool IsEmpty
  {
    get
    {
      return this.StartPos == this.EndPos;
    }
  }

  public short MsgId
  {
    get
    {
      return 109;
    }
  }

  public int GetHashCode(IEqualityComparer _comparer)
  {
    return this.GetHashCode();
  }

  public bool Equals(object other, IEqualityComparer _comparer)
  {
    return this.Equals(other);
  }

  public static bool operator !=(NSpan first, NSpan second)
  {
    return !(first == second);
  }

  public static bool operator ==(NSpan first, NSpan second)
  {
    return first.Equals(second);
  }

  public override int GetHashCode()
  {
    int hash = 0;
    hash += this.StartPos;
    hash += hash << 10;
    hash ^= hash >> 6;
    hash += this.EndPos;
    hash += hash << 10;
    return hash ^ hash >> 6;
  }

  public override bool Equals(object other)
  {
    bool arg_2E_0;
    if (!(other is NSpan))
    {
      arg_2E_0 = false;
    }
    else
    {
      NSpan x = (NSpan)other;
      arg_2E_0 = this.EqualsImpl(x);
    }
    return arg_2E_0;
  }

  public bool Equals(NSpan other)
  {
    return this.EqualsImpl(other);
  }

  public bool IntersectsWith(int pos)
  {
    return pos <= this.EndPos && pos >= this.StartPos;
  }

  public bool IntersectsWith(int start, int end)
  {
    return start <= this.EndPos && end >= this.StartPos;
  }

  public bool IntersectsWith(NSpan other)
  {
    return this.IntersectsWith(other.StartPos, other.EndPos);
  }

  public bool IntersectsWith(Range other)
  {
    return this.IntersectsWith(other.Span);
  }

  public bool IntersectsWith(Location other)
  {
    return this.IntersectsWith(other.Range);
  }

  public override string ToString()
  {
    return this.StartPos.ToString() + ", " + this.EndPos.ToString();
  }

  public int CompareTo(NSpan other)
  {
    int result = this.StartPos.CompareTo(other.StartPos);
    return (result != 0) ? result : this.EndPos.CompareTo(other.EndPos);
  }

  private bool EqualsImpl(NSpan other)
  {
    return this.EndPos == other.EndPos && this.StartPos == other.StartPos;
  }

  public void Serialize(BinaryWriter writer)
  {
    writer.Write(this.StartPos);
    writer.Write(this.EndPos);
  }

  public static NSpan Deserialize(BinaryReader reader)
  {
    int num = reader.ReadInt32();
    int arg_10_0 = num;
    int endPos = reader.ReadInt32();
    return new NSpan(arg_10_0, endPos);
  }

  [RecordCtor]
  public NSpan([MappedMember("StartPos")] int startPos, [MappedMember("EndPos")] int endPos)
  {
    this.StartPos = startPos;
    this.EndPos = endPos;
  }
}


L>Спорить не буду, массовости не хватает, комьюнити.


А это заколдованный круг. Я много лет назад запарился с ним бороться и плюнул. Люди с удовольствием жрут рекламу, но думать своим мозгом, в большинстве своем, неспособны.

Когда лет 10 назад я пытался продвигать Немерл часть людей не понимала возможностей, часть спрашивал "а почему миллионы мух не пользуются им?", а часть откровенно противодействовала и испытывала батхерт. Я запарился убеждать и плюнул. С довольствием пользуюсь этим языком сам и помогаю другим.

Тем временем C# заимствовал часть фич которые у нас есть уже около 10 лет, но те кто усирался и орал "не нужно" теперь начинаю орать, что "это не из Немерле заимствовано!". А мне на них уже по хрен. Им нужны шашачки, а не ехать.

L>Чтобы зашел на SO, а там уже 25 ответов на твой вопрос.


О чем речь?

L>К слову, пришел несколько лет назад в Microsoft ua, и начал показывать им свой проект, который как я говорил в основе содержал ваш парсер. И они пожимали плечами при слове Немерле. Странно, не правда ли?


Ну, если бы ты пришел к Хельсбергу или тем кто компилятором занимался, то они бы тебе что-то сказали. А ты ведь пришел к каким-то менеджерам.

Потом в МС тщательно подтирали ссылки на Немерле даже в обсуждениях на гитхабе. В начале были ссылки, а потом их тщательно вымарали. У них там большой страх за то, что кто-то на них в суд подаст по патентам и авторским правам. А может просто не хотят рекламировать. Но факт есть факт.

L>Пока работаю дома, я конечно могу себе позволить им пользоваться. Но у меня сомнения закрадываются что любая контора может позволить себе их прайс. Минимум 300 у.е. в год..кхм. Скоро MS в своем духе сопрет все их фичи и он перестанет быть нужен. Впрочем и visual assist уже не нужен, в последней студии не ставил его, ибо все из коробки.


MS вряд ли в скором времени даже к необходимому минимуму приблизится. Я тут начал писать код без Решарпера. Обвесился всевозможными плагинами, но все равно получается не то. Даже если есть фича, все равно качество не то. Тут разве что какой-нибудь Код-Раш будет конкурентом.

А Ассис... раньше там функциональности было мало. Не знаю как сейчас. Если все осталось на том же уровне, то действительно в студии теперь тоже не так плохо.

Что до денег — да, дорого. Но тот же MS закупает лицензии Решарпера тоннами, не скупится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 14.12.2016 17:39 VladD2 . Предыдущая версия .
Re[7]: Прыжки по коду
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.16 17:16
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Примитивнейший пример — подобная рекурсивная сериализация структур и на C++ реализуется
Автор: Evgeny.Panasyuk
Дата: 06.10.14
— десяток/два строк на непосредственно рекурсивный "движок", плюс само собой код сериализации базисных типов.


Языком все делается, а на практике одни проблемы. Ну, и это всего лишь один из простых примеров, который можно легко понять. Макрос штука универсальная. И намного более мощная и удобная эти ваши ужимки на шаблонах.

Потом в наше время мало кто будет писать прикладные вещи на плюсах. У Яве, Шарпе и т.п. никаких выкрутасов на шаблонах нет, так как нет шаблонов.

VD>>Навигация очень удобная. Жмешь Ctrl+T и пишешь большие буквы ( hs для поиска HashSet) нужного тебе символа (без оглядки на его тип). Далее из списка выбираешь и ты уже там. Далее очень удобный переход по реализациям интерфейсов и виртуальных методов. Ну, и много всего.


EP>Такое и для C++ есть, даже не в рамках IDE:

EP>https://www.youtube.com/watch?v=5FQwQ0QWBTU

Это из той же серии как сравнивать макры с шаблонным МП. Вроде как похожие вещи, а возможности несравнимы.

То что в этом видео показано для Шарпа есть из горобки в студии. Это примитивный набор. Он даже не обсуждается. Он только для плюсовиков диковиной является.

Фичи Решарпера по навигации намного круче. А уж рефакторинге и говорить не приходится.

Если бы ваших Емаксов людям хвтало, то такие вещи как CLion никто не затевал бы.

ЗЫ

Уж извини, но пенесометрия с плюсовиками мне совсем не интересно. Живите в своем древнем мирке спокойно. Вас никто не хотел беспокоить. Считайте, что у вас все круче чем у всех. Успехов вам! Денег нет!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Прыжки по коду
От: Evgeny.Panasyuk Россия  
Дата: 14.12.16 19:12
Оценка:
Здравствуйте, VladD2, Вы писали:

EP>>Примитивнейший пример — подобная рекурсивная сериализация структур и на C++ реализуется
Автор: Evgeny.Panasyuk
Дата: 06.10.14
— десяток/два строк на непосредственно рекурсивный "движок", плюс само собой код сериализации базисных типов.

VD>Языком все делается, а на практике одни проблемы.

Приведённый кусок кода из реального проекта паука который облазил P2P сеть в сотни тысяч узлов, протокол общения между узлами как раз на базе структур-сообщений, которые сериализуются этим самым кодом — пример аналогичный твоему. Но ты конечно можешь и дальше болтать про "одни проблемы".

VD>Ну, и это всего лишь один из простых примеров, который можно легко понять. Макрос штука универсальная. И намного более мощная и удобная эти ваши ужимки на шаблонах.


Штука крутая, несомненно. Мой поинт в том что твой пример вообще не раскрывает силы макросов в Nemerle, ибо подобная автоматическая сериализация много где реализуема, и поэтому никакого вау-эффекта не производит.
Пример с пользовательским условным оператором а-ля if, или например реализация интерполированных строк, были бы куда более показательны и эффектны.

VD>Потом в наше время мало кто будет писать прикладные вещи на плюсах. У Яве, Шарпе и т.п. никаких выкрутасов на шаблонах нет, так как нет шаблонов.


А получается так что именно прикладные вещи на C++ и пишутся, а всякие клей-прокладки между БД и UI на C#/Java — собственно скафолдинг и прочий LightSwitch тут не зря был упомянут, ибо подобные прокладки часто типовые.

VD>Это из той же серии как сравнивать макры с шаблонным МП. Вроде как похожие вещи, а возможности несравнимы.

VD>То что в этом видео показано для Шарпа есть из горобки в студии. Это примитивный набор. Он даже не обсуждается. Он только для плюсовиков диковиной является.
VD>Фичи Решарпера по навигации намного круче. А уж рефакторинге и говорить не приходится.
VD>Если бы ваших Емаксов людям хвтало, то такие вещи как CLion никто не затевал бы.
VD>ЗЫ
VD>Уж извини, но пенесометрия с плюсовиками мне совсем не интересно. Живите в своем древнем мирке спокойно. Вас никто не хотел беспокоить. Считайте, что у вас все круче чем у всех. Успехов вам! Денег нет!

Так ты не понял о чём речь, и как обычно продемонстрировал чудеса адекватности. Речь о том что фичи о которых ты сказал есть ДАЖЕ в НЕ-IDE для обхаиваемого тобой C++. Скорей всего у Решарпера действительно есть какие-то крутые фичи для навигации, но ты почему-то вместо них упомянул какой-то примитив.
Re[8]: Прыжки по коду
От: _NN_ www.nemerleweb.com
Дата: 14.12.16 20:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Потом в МС тщательно подтирали ссылки на Немерле даже в обсуждениях на гитхабе. В начале были ссылки, а потом их тщательно вымарали. У них там большой страх за то, что кто-то на них в суд подаст по патентам и авторским правам. А может просто не хотят рекламировать. Но факт есть факт.


Есть примеры где подтирали ? Или в некоторых местах забыли ?
https://github.com/dotnet/roslyn/issues?utf8=%E2%9C%93&amp;q=nemerle
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[9]: Прыжки по коду
От: Sinix  
Дата: 14.12.16 20:23
Оценка: :)
Здравствуйте, _NN_, Вы писали:


VD>>Потом в МС тщательно подтирали ссылки на Немерле даже в обсуждениях на гитхабе.

_NN>Есть примеры где подтирали ? Или в некоторых местах забыли ?

Ну вот зачем вы так? Их же теперь расстреляют, как минимум. В самое сердце пробрались.

Если серьёзно — не подтирали, я за issues рослина периодически поглядываю. В моём тикете всё как и было.

Кстати, а в issues гитхаба разве есть возможность удалять чужие сообшения?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.