Re[4]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.05.11 13:01
Оценка:
Здравствуйте, hi_octane, Вы писали:

I>>RX не годится ?

_>Ну когда мы заканчивали проект — Rx ещё не было Но даже если б и был — непредсказуемо тормозявый он. Причём его тормозявость — практически утверждена официально. А у нас жажда скорости прописана в ТЗ.

Годная отмазка

_>>>4) Задачи требующие своего DSL.

I>>Покажи пример, пожалуйста.
_>У клиента скрипт, скрипт он корректирует сам как ему захочется. Там по большей части Nemerle код, но формулы описаны чистой математикой, вроде SUM x * p1 * q1 DIV MAX x >= SUM y + a DISTINCT y = SUM b. И это не вызовы функций, эту запись мы вытягиваем как есть из исходника, немного правим, подставляем вместо параметров матрицы и скармливаем решателю вроде матлаба.

Годится

_>>>5) Логгирование, замеры времени, особенно если проект в релизе, его как в C# не делай, всегда фигня будет получаться

I>>Это инструментирование в рантайме или что ты имел ввиду ?
_>Да. Есть требование для некоторых функций уложиться в сколько сказали миллисекунд или здохнуть. Эдакий soft realtime. На этих функциях стоят аттрибутики, которые на самом деле макросы, которые перефигачивают код так, что если в релизе функция не вложилась в заданное число миллисекунд — сразу всю ситуацию в лог а прогу остановить. А если уложилась но подобралась к 90%, то просто в лог все операции с временами, для анализа. И чудо, у нас без профайлера (потому что его к реальной работающей проге просто не подключишь) с первых релизов есть гистограммы средней и пиковой нагрузки, и всё без замусоривания кода ручками, впихивания Stopwatch в try и Log в finally.

Сильно !

_>>>6) Задачи, которые на C# принято считать требующими кодогенераторов или отдельных программ. У нас например в процессе компиляции макрос лезет по сети и вытягивает оттуда JavaScript, а потом лезет по всему проекту, и в нужных местах корректирует код (не какие-то генерённые файлы обновляет, а разбирает и корректирует писанный людьми код), в соответствии с тем JavaScript. Чтобы такое повторить на C# — убиться надо.

I>>А что за задачу вы решали таким образом ?
_>Связь с монструозной прогой на стороне клиента.

Шота мне кажется вы изобрели уже давно известную технологию Какого характера изменения что вносятся скриптом ? Почему нельзя это заменить на инжекцию депенденсов ?

_>Вот наглядный пример — реальный вопрос
Автор: Sinix
Дата: 15.02.11
, от одного из наиболее продвинуты тут людей. Сравни полученное решение на C# / T4
Автор: Sinix
Дата: 16.02.11
и решение на Nemerle
Автор: hardcase
Дата: 09.03.11
. Закономерное впечатление топикстартера:

_>

Мдя, я предполагал, что будет короче и понятней, но не настолько же! Шикарно и спасибо


Да, сильно.

_>И это одна обычная задача. Два экрана на C# и один на Nemerle. Нужно ли говорить что на большом проекте разница уже не просто заметна, но начинает реально влиять не только на сроки, но и на реализуемость фич вообще?


Сильно спорно. По моему разумению основное время уходит на всякие косяки и нестыковки технологий. Скажем ORM сильно чаще является узким местом, нежели язык C#. Или тот же WCF.
Re[6]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.05.11 13:03
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Тут бесполезно к чему-то цепляться. Есть проекты где цена ошибки стремится к стоимости времени её фикса. Например сайты-визитки. Там хоть пол-проекта разломай а клиенту зарелись билд который вообще от другого проекта — ну будет разговор вида "Чё там такое, вообще какая хрень! Посмотрите!" и всё. Там разработчики сами релизят то что у них на винчестере лежало, и это правильное решение.


Вы что, CVS используете или VSS какой
Re[6]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.11 14:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А> А не разумнее ли будет сам штатный парсер на PEG переписать? Тогда и макросы проще станут, учитывая врожденную расширяемость PEG-ов.


В Н2 так и задумывается. Только вот это приведет к большому количеству изменений, так что сделать это эволюционным путем не удастся.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.11 15:20
Оценка:
Здравствуйте, Darooma, Вы писали:

D>В чем C# уступает (если, конечно, уступает) Nemerle? Что можно сделать Nemerle легче, чем на C#?

D>Есть ли такие задачи, для которых алгоритм на Nemerle будет работать быстрее, чем на C#?

Отвечу в обратном порядке. Технически на C# всегда можно написать код который будет соответствовать по скорости скорости аналогичного кода на Nemerle. Это проистекает из того факта, что оба языка генерируют приблизительно похожий IL и оба примерно равны по уровню. Иногда на C# можно даже добиться более высокой скорости, так как в нем есть unsafe и goto. Но это скорее чисто гипотетическое преимущество.

С другой стороны Nemerle позволяет брать интеллектом. Часто код получается медленее не из-за того, что используемый язык не позволяет написать его быстрее, а потому, что код работающий быстрее сложнее писать и поддерживать, так как за абстракции приходится платить.

Так вот Nemerle позволяет решать задачи методом DSL-изации. Мы можем описать весьма декларативное описание задачи и сгенерировать реализацию на макросах. Так вот код генерируемый макросами может плевать на абстракции и делать весьма сомнительные (в случае если этот код пишется вручную) оптимизации и использовать весьма низкоуровневую технику. Это позволяет получать очень высокую скорость исполнения конечного кода и при этом не только не только не жертвовать абстракциями, но наоборот повышать уровень абстракции и декларативность решения. Отличный примером является макрос PegGrammar, который описывает грамматику в полностью декларативной манере, более удобен чем большинство генераторов парсеров, но при этом способен генерировать весьма производительный код обгоняющий многие рукописные парсеры.

D>В чем C# уступает (если, конечно, уступает) Nemerle? Что можно сделать Nemerle легче, чем на C#?


В уровне предоставляемых абстракций. На Nemerle можно писать более высокоуровневый код. Этому способствуют две вещи.
1. В язык встроены возможности отсутствующие в C#. Самой заметной возможностью несомненно является наличие в Nemerle вариантных типов (алгебраических типов данных) и сопоставления с образцом. Но кроме этого есть куча более мелких полезняшек, многие из которых сделаны с помощью макросов.
2. Nemerle поддерживает макросы. Макросы позволяют решать проблемы с применением DSL-ей и собственного расширения зыка новыми конструкциями.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.11 15:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

_>>Тут бесполезно к чему-то цепляться. Есть проекты где цена ошибки стремится к стоимости времени её фикса. Например сайты-визитки. Там хоть пол-проекта разломай а клиенту зарелись билд который вообще от другого проекта — ну будет разговор вида "Чё там такое, вообще какая хрень! Посмотрите!" и всё. Там разработчики сами релизят то что у них на винчестере лежало, и это правильное решение.


I>Вы что, CVS используете или VSS какой


Можно узнать, с чего сделан такой вывод?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.11 15:36
Оценка:
Здравствуйте, Ikemefula, Вы писали:

_>>2) Многопоточность. После того как привыкнешь писать в immutable стиле и накидаешь основные примитивы макросами — C# вообще отдыхает. У нас к концу проекта основных примитивов многопоточности набралось штук наверное 20. В C# — lock в зубы, и остальное выписывай ручками в кренделя try/finally.


I>RX не годится ?


Если бы он годился бы для всех случаев, то в MS не стали бы в срочном порядке "изобретать" async/await и прикручивать его к C#.

_>>11) Генерировать что-то по коду проекта в процессе компиляции. Например javascript или базу данных. В C# БД генерировать умеет только наверное DevExpress XPO, и то через рефлексию и по рабочей программе а не во время компиляции. И со всякими ограничениями. В Nemerle можно в генерированную БД из бакапа например тестовые данные сразу вытягивать, если билд тестовый.


I>tt чем не подходит ?


Под "tt" ты T4 — генератор текста, имеешь в виду?
Тем же чем RX. Не является удовлетворительным решением для многих случаев.

Сравнивать макросы с текстовым генератором — это все равно что сравнивать какой-нить BMW X5 с Ford T. Тоже конечно машина, но вот ездить на ней как-то не очень удобно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.05.11 15:43
Оценка:
Здравствуйте, VladD2, Вы писали:

_>>>Тут бесполезно к чему-то цепляться. Есть проекты где цена ошибки стремится к стоимости времени её фикса. Например сайты-визитки. Там хоть пол-проекта разломай а клиенту зарелись билд который вообще от другого проекта — ну будет разговор вида "Чё там такое, вообще какая хрень! Посмотрите!" и всё. Там разработчики сами релизят то что у них на винчестере лежало, и это правильное решение.


I>>Вы что, CVS используете или VSS какой


VD>Можно узнать, с чего сделан такой вывод?


"сутки простоя какой-нить большой команды из-за того что кто-то сломал всё совсем уже могут выйти очень дорого"

"Там разработчики сами релизят то что у них на винчестере лежало"

Не ясно, на что уходит неделя, если обычно релиз выкатывается за пару часов с документацией и прочей дрянью
Re[4]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.05.11 15:49
Оценка:
Здравствуйте, VladD2, Вы писали:

I>>RX не годится ?


VD>Если бы он годился бы для всех случаев, то в MS не стали бы в срочном порядке "изобретать" async/await и прикручивать его к C#.




Хорошо, что не все немерлесты растеряли способности к адекватным объяснениям.

I>>tt чем не подходит ?


VD>Под "tt" ты T4 — генератор текста, имеешь в виду?

VD>Тем же чем RX. Не является удовлетворительным решением для многих случаев.

Такой ответ я и сам могу придумать. Меня интересуют конкретные подробности, а не очередной лозунг.

>сравнивать какой-нить BMW X5 с Ford T. Тоже конечно машина, но вот ездить на ней как-то не очень удобно


Неужели на Немерле нельзя написать более толковый генератор тавтологий ?

Re[9]: Что лучше делать на Nemerle вместо C#
От: IT Россия linq2db.com
Дата: 23.05.11 15:51
Оценка: :)
Здравствуйте, Ikemefula, Вы писали:

I>Не ясно, на что уходит неделя, если обычно релиз выкатывается за пару часов с документацией и прочей дрянью


Не ясно, на что уходит пару часов, если обычно релиз выкатывается за пару минут нажатием одной кнопки
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Что лучше делать на Nemerle вместо C#
От: IT Россия linq2db.com
Дата: 23.05.11 15:53
Оценка:
Здравствуйте, Ikemefula, Вы писали:

VD>>Под "tt" ты T4 — генератор текста, имеешь в виду?

VD>>Тем же чем RX. Не является удовлетворительным решением для многих случаев.
I>Такой ответ я и сам могу придумать. Меня интересуют конкретные подробности, а не очередной лозунг.

Конкретные подробности проистекают из того факта, что T4 — это precompile time генерация кода, а макросы compile time. Разницу нужно объяснять?
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.05.11 16:04
Оценка: :)
Здравствуйте, IT, Вы писали:

I>>Не ясно, на что уходит неделя, если обычно релиз выкатывается за пару часов с документацией и прочей дрянью


IT>Не ясно, на что уходит пару часов, если обычно релиз выкатывается за пару минут нажатием одной кнопки


Основное время уходит на всякие активности которые не автоматизируются. Например тфс не умеет перезапускать сам себя и продолжать билд. Баги в трекере нужно просматривать. Тесты могут выявить минорные баги, которые нужно просто добавить в релизноты и тд и тд. Тесты могут дать сбой и тогда нужно подфиксить, смерджить и тд. Впн может отвалиться во время теста. Как правило, на все это уходит в среднем два часа. Если всё идеально — то минуты. Потому мне сильно интересно, на что уходит неделя.
Re[5]: Что лучше делать на Nemerle вместо C#
От: alvas  
Дата: 23.05.11 16:04
Оценка:
Здравствуйте, Ikemefula, Вы писали:

_>>И это одна обычная задача. Два экрана на C# и один на Nemerle. Нужно ли говорить что на большом проекте разница уже не просто заметна, но начинает реально влиять не только на сроки, но и на реализуемость фич вообще?


I>Сильно спорно. По моему разумению основное время уходит на всякие косяки и нестыковки технологий. Скажем ORM сильно чаще является узким местом, нежели язык C#. Или тот же WCF.


Если рассматривать голый N, так в нем кроме match вообще ничего нет. Архитектура у него такая. Просто на добавление наворотов, которые появляются в других языках тратится значительно меньше времени. Тот же async/await, code contrats, computation expression. В общем предложи-найди фичу, которая есть в других языках — тебе бойцы ее быстро прикрутят.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[6]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.05.11 16:06
Оценка:
Здравствуйте, IT, Вы писали:

VD>>>Под "tt" ты T4 — генератор текста, имеешь в виду?

VD>>>Тем же чем RX. Не является удовлетворительным решением для многих случаев.
I>>Такой ответ я и сам могу придумать. Меня интересуют конкретные подробности, а не очередной лозунг.

IT>Конкретные подробности проистекают из того факта, что T4 — это precompile time генерация кода, а макросы compile time. Разницу нужно объяснять?


Конечно. Желательно на конкретной задаче. Калькулятор оставь Владу
Re[6]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.05.11 16:20
Оценка:
Здравствуйте, alvas, Вы писали:

I>>Сильно спорно. По моему разумению основное время уходит на всякие косяки и нестыковки технологий. Скажем ORM сильно чаще является узким местом, нежели язык C#. Или тот же WCF.


A>Если рассматривать голый N, так в нем кроме match вообще ничего нет. Архитектура у него такая. Просто на добавление наворотов, которые появляются в других языках тратится значительно меньше времени. Тот же async/await, code contrats, computation expression. В общем предложи-найди фичу, которая есть в других языках — тебе бойцы ее быстро прикрутят.


Немерле не избавит тебя от необходимости вникать в EF, WCF, WPF и тд.
Re[7]: Что лучше делать на Nemerle вместо C#
От: alvas  
Дата: 23.05.11 16:28
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


I>>>Сильно спорно. По моему разумению основное время уходит на всякие косяки и нестыковки технологий. Скажем ORM сильно чаще является узким местом, нежели язык C#. Или тот же WCF.


A>>Если рассматривать голый N, так в нем кроме match вообще ничего нет. Архитектура у него такая. Просто на добавление наворотов, которые появляются в других языках тратится значительно меньше времени. Тот же async/await, code contrats, computation expression. В общем предложи-найди фичу, которая есть в других языках — тебе бойцы ее быстро прикрутят.


I>Немерле не избавит тебя от необходимости вникать в EF, WCF, WPF и тд.


А разве это кто-то утверждал?

ЗЫ. Смотри тему топика.
Хорошо процитирую "Что лучше делать на Nemerle вместо C#"
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[6]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.11 16:34
Оценка:
Здравствуйте, Ziaw, Вы писали:

VD>>С подсветкой все будет по прежнему фигово. Но ломать ничего не придется. Идея в общем-то очень проста. Мы описываем макрос linq как лексерный (принимающий лексему — Token, а не PExpr). Далее, вместо того чтобы пытаться разобраться с лексемой мы тупо берем ее местоположение в файле, вынимаем код соответствующий ему и парсим его PegGrammor-ом. Те места которые должны соответствовать немерловым подвыражениям мы "вырезаем" как строки и скарливаем эти строки штатному парсеру немерла (можно даже выковырять под-лексемы).


Z>Идея хорошая, а что парсер считает лексемой?


Офтоп: Блин! Написал много букв, но из-за гребоанного Хрома все потерял. Был какой-то кратковременный глюк сети и Хром тупо угробил все посланное мной! Хоть обратно к Фаерфокусу возвращайся .

Короче, вкратце. Вопрос я твой как всегда не понял, так что вкратце о том как работает парсер немерла:
* Сначала запускается лексер который в ленивом режиме (что важно) преобразует текст в лексемы (токены).
* Далее запускается препарсер. Он преобразует последовательность токенов в дерево токенов свернутое по скобкам. Боре подробно о свертке можно прочитать здесь. Кроме того препарсер распознает конструкции using с namespace и загружает/выгружает открываемые using-ами синтаксические расширения. Из синтаксических расширений считываются ключевые слова.

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

Парсер уже работает с деревом текено созданным препарсером.

Кроме того есть специальный вид макросов — лексерные макросы. Им вместо PExpr в качестве параметра (единственоно) передается подветка дерева теокено. Такие макросы могут сами отпарсить дерево токенов, а стало быть разбирать синтаксис сильно отличающийся от синтаксиса немерла. Единственно ограничение синтаксис должен удовлетворять правилам свертки токенов.

Например, PegGrammar использует лексерный макрос grammar который передает свой параметры в неизменном виде макросу PegGrammar. Далее разбор грамматики ПЕГ-а производится вручную.

Проблема в том, что разбирать токены вручную — это не простая задача. Но эту задачу можно упростить если взять текст соотвествющий этому дереву токенов и распарсить его PegGrammar-ом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.11 17:04
Оценка: -1
Здравствуйте, Ikemefula, Вы писали:

I>>>Вы что, CVS используете или VSS какой


VD>>Можно узнать, с чего сделан такой вывод?


I>"сутки простоя какой-нить большой команды из-за того что кто-то сломал всё совсем уже могут выйти очень дорого"


I>"Там разработчики сами релизят то что у них на винчестере лежало"


I>Не ясно, на что уходит неделя, если обычно релиз выкатывается за пару часов с документацией и прочей дрянью


И где же в приведенных цитатах хоть упоминание CVS или VSS?

Сдается мне, что данная догадка высосана из пальца.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.11 17:05
Оценка: -1
Здравствуйте, Ikemefula, Вы писали:

I>Основное время уходит на всякие активности которые не автоматизируются. Например тфс не умеет перезапускать сам себя и продолжать билд.


Так выкинь ТФС.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Что лучше делать на Nemerle вместо C#
От: Darooma Россия  
Дата: 23.05.11 17:11
Оценка: :)
Холиварчик вышел, я так и думал.
Re[7]: Что лучше делать на Nemerle вместо C#
От: _nn_ www.nemerleweb.com
Дата: 23.05.11 17:13
Оценка: 18 (1) +1
Здравствуйте, VladD2, Вы писали:

VD>Офтоп: Блин! Написал много букв, но из-за гребоанного Хрома все потерял. Был какой-то кратковременный глюк сети и Хром тупо угробил все посланное мной! Хоть обратно к Фаерфокусу возвращайся .


Lazarus всегда спасает.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.