Прочитал (довольно бегло, признаюсь) первые несколько разделов статьи “N2 – языковый фрeймворк”. Не понял, для какой аудитории предназначен сей инструмент.
Я вижу себе картину мира так:
- Есть разработчики универсальных языков программирования общего назначения. Таких, например, как Go или Vala. Нужен ли им какой-то вспомогательный фреймворк? Помнится, я читал, что при разработке серьезных компиляторов даже генераторы парсеров не часто используются. Из соображений эффективности и более качественной диагностики ошибок парсер, семантический анализатор, оптимизатор и пр. вещи там реализуются, зачастую, вручную.
- Есть разработчики мелких DSL-ей. Например, нужно разработчику сделать собственный специализированный аналог IDL (Interface Definition Language), наподобие тех, которые используются в Google Protocol Buffer или Thrift, но попроще. Тут цель разработчика – сделать быстро, без затей, чтобы затем было просто переделывать, да и выбросить чтобы было не жалко. Выбор в таких условиях идет, обычно, между встроенными возможностями целевого языка программирования (макросы или шаблоны в C++, метод eval в динамических языках и т.д.), использованием внешних динамических языков (Perl, Ruby, Python,…) или самых простых и доступных генераторов парсеров (коих великое множество, начиная от древних lex+yacc).
- Есть разработчики серьезных специализированных языков, вроде языков описания аппаратуры.
Первую группу из потенциальных пользователей N2 я бы выбросил сразу. Это слишком специфическая и очень узкая ниша, чтобы в нее протолкнуть заточенный под .NET самодельный универсальный комбайн.
Третью группу я бы так же сразу же отбросил. Поскольку сейчас полно всяких генераторов парсеров, с разнообразнейшими возможностями, на любой вкус, цвет и объем кошелька. Можно найти и весьма серьезные продукты, со средствами визуализации, отладки, блэкджеком и … ;) Причем разрабатывают их профессионалы, которые с этого живут. Так что если в каком-то проекте потребовался специализированный серьезный язык и на его развитие выделяются средства, то лично я не решился бы рисковать и закладываться на самодельную разработку.
Вот со второй группой поинтереснее. Тем не менее, лично я считаю, что N2 и в эту целевую категорию не попадает. Там масштабы задач, обычно, совсем мелкие. Там бы за день-два чего-нибудь рабочее слабать и забыть. Но так, чтобы после тебя новый разработчик смог бы за день-два разобраться, что и к чему. Поэтому там даже yacc может быть уже через чур мощной штукой, не говоря уже про целый фреймворк с отладчиком.
Так что, со нескрываемым злорадством отмечу, что Nemerle-строители в очередной раз страдают херней. С еще большим злорадством отмечу, что Nemerle-евангелисты вот уже шесть лет засирают самый солидный профильный ресурс Рунета без заметного практического выхлопа. И будут засирать еще шесть лет, хотя, похоже, у многих RSDN-еров уже устойчивый иммунитет на Nemerle выработался ;)
Имхо, причина в том, что первоначальные разработчики Nemerle (польские аспиранты) знали, зачем им Nemerle нужен. Они своих целей и достигли, полагаю. А вот RSDN-овские евангелисты не знают, зачем им это все. Нравится им с парсерами развлекаться, нравится мечтать сделать глобальный всемогутор, вот и пилят не язык программирования, а языковой фреймворк. Ну туда им и дорога.
PS. Кстати, для примера совсем мелкого DSL-я, который мне когда-то понадобился, приведу ссылку на свою статейку четырехлетней давности. С такими задачками время от времени приходится сталкиваться. Но для их решения вовсе и не нужен какой-либо языковой фреймворк.
24 комментария:
Для прототипирования может и сойдёт.
@Евгений Охотников
коррекция: Н2 планируется отвязать от .нет
но в общем-то согласен с твоим анализом, хотя чуть с другой стороны
я считаю, что будущее за языками группы 2, но затраты на их реализацию будут существенно меньше, а удобство больше, если они будут реализованы как встроенные DSL
а тогда нафиг не нужна и даже *вредна* скажем произвольная PEG грамматика разбора
впрочем, что касается системы типов, то там может уже как раз фреймворк то и будет полезен
@buffovich
Для прототипирования может и сойдёт.
хмм.... я бы скорее предложил чуть допилить для этого Н1
@buffovich:
Понимаешь, в чем дело. Когда Nemerle засветился на RSDN году эдак в 2005, под .NET-ом это был, возможно, самый интересный ФЯ, который мог бы быть интересен .NET-разработчикам. И самым важным, самым серьезным аргументом N-евангелистов был агрумент о том, что Nemerle можно использовать всего лишь как более удобный C#, без применения синтаксических макросов вообще.
Я думаю, что тогда именно эту его сторону и нужно было развивать, и внимание нужно было акцентировать именно на ней. Нужно было делать язык стабильным и наполнять его функционалом, который был бы полезен прикладным программистам. И тогда бы это был действительно уникальный для платформы .NET язык (на тот момент, по крайней мере).
Сейчас же он из потенциально привлекательной замены C# превращается в очередной "parser generator" или "compiler construction kit". Коих уже сейчас немало.
@имя:
Что-то я слабо себе представляю, чтобы такие одиозные персонажи, как VladD2, IT и Wolfhound (которые и продвигали N в свое время больше всех), съехали с .NET-а на нейтив.
Про Wolfhound'а ты зря. В особой любви к нету замечен не был, вроде :)
@Евгений Охотников
я вообще подозреваю, что именно Wolfhound настоял на отвязывании Н2 от дотнета
агрумент о том, что Nemerle можно использовать всего лишь как более удобный C#, без применения синтаксических макросов вообще.
без применения -- невозможно; а вот без написания своих макросов -- вполне можно
и кстати, макросы там мне кажутся существенно сложнее, чем плюсовые шаблоны
Сейчас же он из потенциально привлекательной замены C# превращается в очередной "parser generator" или "compiler construction kit". Коих уже сейчас немало.
согласен; и зачем писать еще один -- не ясно
Я вот с немерлистами тоже немало ругался, но не злорадствую. Как и в случае с D жаль что такой неплохой язык закапывают сами же создатели.
Хотя с N2 похоже еще более тяжелый случай чем с D2. Там хоть понятно что в результате получается, и потенциальная ниша использования все-таки расширяется (вместо "нативной явы" получаем, хотя бы и потенциального "убийцу C++").
У немерлистов по моему получается только одно, удобный и мощный инструмент для написания немерле :(
@имя:
без применения -- невозможно; а вот без написания своих макросов -- вполне можно
Об этом я и хотел сказать. Прикладные программисты не пишут своих макросов. Макросы используются только для развития языка.
@Rustam:
Кстати о D2. Вроде как поддержка D1 прекратится в декабре 2012, т.е. уже совсем скоро. Так что останется только D2, что уже делает ситуацию с D более однозначной и, я бы сказал, приемлимой.
Плюс к тому, в состав основных разработчиков D был включен еще один товарищь, так что сейчас не только Брайт и Александреску единолично решают что и куда пойдет. Чем больше людей в разработке, тем стабильнее и предсказуймей будет идти равитие языка. А это именно то, что D очень не хватает.
Блогер опять глючит. Wolfhound запостил большой комментарий, он попал ко мне в почту, но здесь не появился.
Если у Wolfhound-а есть желание увидеть его здесь, то пусть попробует еще раз (разбив большой комментарий на 2-3 поменьше).
Пока же отвечу по сути. Твоя проблема в том, что ты идешь от своей веры в конкретную технологию. Тебе кажется, что PEG-грамматика удобна и имеет какие-то преимущества. И ситаешь, что любой, кто прочитает статью про планы N2, сразу же в это уверует и воспримет N2 как серебрянную пулю.
Нифига подобного. Если мне нужен будет простенький DSL для моих C++ных проектов, я его или на C++шаблонах/макросах сделаю, либо на Ruby. Если потребуется что-то серьезнее, что я прошерстю список инструментов из Wikipedia и буду оценивать их по целому ряду факторов. Из которых конкретная технология, лежащая в основе инструмента, будет занимать далеко не ведущее место.
Так что у тебя явно проблема человека с молотком -- все вокруг выглядит как гвозди.
И еще. Хватит петь песни про то, как космические корабли бороздят. Сделаете свой N2, продвинете его в массы, будете молодцы. А пока хватит трындеть.
Ну что я могу сказать? Анализ херня. Ибо ты совсем не понимаешь то про что пишешь.
Впрочем, как обычно.
Разработчики первой группы действительно не используют генераторы парсеров ибо все существующие генераторы херня полная.
А все по тому, что разработчики этих генераторов занимаются херней с БНФ.
На БНФ сделать нормальный парсер невозможно, ибо это порождающая грамматика, а нам разбирать надо.
Н2 же построен на разбирающей грамматике которая изначально создавалась для разбора текста.
И мы не собираемся уговаривать эту группу использовать Н2. Они либо будут его использовать, либо вылетят с рынка. Ибо носилки против карьерного самосвала при работе в карьере...
И с .НЕТ Н2 довольно быстро слезет.
Что касается второй группы то: Учитывая что Н2 будет разбирать языки общего назначения то легким движением руки можно будет засунуть макросы и вывод типов в любой язык. Так что C# или там Java с макросами и выводом типов будут реальностью.
Плюс можно будет компилировать код на нескольких языках в одном проекте.
Базовые грамматики, типизация и кодогенерация ессно будут в комплекте. Прикладнику понадобится только написать маленький кусочек кода для своего ДСЛ.
Что касается третий группы то для них Н2 будет просто серебряной пулей. Просто по определению этой самой пули. Ибо тот список, что ты дал, содержит одно говно. Все эти парсеры либо основаны на БНФ, а на БНФ ничего хорошего не сделать. Либо на ПЕГ. ПЕГ лучше БНФ но тоже говно. Можешь попробовать задать в любом ПЕГ парсере десяток операторов с разными приоритетами и ассоциативностью и посмотри, какая жуткая гора кода получится. А как это все потом будет тормозить... Алгоритм разработанный для Н2 лишён этих недостатков.
А типизировать все эти мегакомбайны о которых ты пишешь вообще не умеют.
ИДЕ генерировать тоже.
Так что сравнивать Н2 с этими поделками просто смешно.
А те, кто умеют, имеют такие жуткие ограничения, что даже не смешно.
И в отличие от тебя я на все это смотрел.
Что касается того что лучше было бы допилить Н1 до рабочего состояния: Польские студенты насажали в код столько говна, что это сделать невозможно. Просто по тому, что если все это говно выбросить, то придется поломать совместимость с существующим кодом.
Да и затраты на переписывание Н1 будут больше чем на написания Н2 с нуля.
При этом Н2 (в том числе за счет полной кроссплатформенности) будет намного более перспективным продуктом чем еще один язык под .НЕТ.
> и кстати, макросы там мне кажутся существенно сложнее, чем плюсовые шаблоны
Попробуй плюсовыми шаблонами сделать оператор for.
А как насчет того чтобы на шаблонах замутить превращение регексов в ДКА и минимизацию этого ДКА во время компиляции?
Короче функциональность просто несравнима.
А для обобщенных контейнеров есть генерики.
> Об этом я и хотел сказать. Прикладные программисты не пишут своих макросов. Макросы используются только для развития языка.
Вот только если почитаешь, сообщения тех самых прикладных программистов, то окажется что пишут.
> Пока же отвечу по сути. Твоя проблема в том, что ты идешь от своей веры в конкретную технологию.
Ты даже не представляешь, какой объем работы по изучению технологий прасинга я проделал.
Я проанализировал кучу научных и практических работ за последние несколько десятилетий.
В результате я взял за основу два разработанных и забытых в середине семидесятых алгоритма.
Я разобрал их по косточкам. После чего соединил их части. Добавил кое-что от себя. И получил очень выразительный ДСЛ для описания парсеров.
Так что веришь тут ты. А я знаю.
>Тебе кажется, что PEG-грамматика удобна и имеет какие-то преимущества.
Очередное доказательство что ты не читаешь того что я пишу.
Там уже далеко не пег. И у него действительно полно преимуществ.
> Нифига подобного. Если мне нужен будет простенький DSL для моих C++ных проектов, я его или на C++шаблонах/макросах сделаю, либо на Ruby.
Вот уж действительно если есть молоток в руках, то вокруг одни гвозди. :)))
С++ это жуткий кастрат. Руби имеет больше возможностей но он динамически типизированный тормоз.
> Если потребуется что-то серьезнее, что я прошерстю список инструментов из Wikipedia и буду оценивать их по целому ряду факторов. Из которых конкретная технология, лежащая в основе инструмента, будет занимать далеко не ведущее место.
Можешь озвучить?
>И еще. Хватит петь песни про то, как космические корабли бороздят. Сделаете свой N2, продвинете его в массы, будете молодцы. А пока хватит трындеть.
Трындишь тут ты. Ибо не понимаешь предмета, о котором говоришь. А я занимаюсь разработкой системы, которая превосходит все существующие. И на это нужно время. Но уже сейчас у меня есть очень крутой парсер. Скоро будет очень крутой типизатор. Я уже знаю, как его делать. И что характерно снова использую вычислительную систему, которая почти никому не известна.
@Wolfhound:
Разработчики первой группы действительно не используют генераторы парсеров ибо все существующие генераторы херня полная.
Или же потому, что у них других забот хватает, помимо того, чтобы сравнивать длину у БНФ и у PEG. Например: BitC, Rust.
Так что C# или там Java с макросами и выводом типов будут реальностью.
Никому не нужной.
Я разобрал их по косточкам. После чего соединил их части. Добавил кое-что от себя. И получил очень выразительный ДСЛ для описания парсеров.
Так что веришь тут ты. А я знаю.
Повторю еще раз. Ты во главу угла ставишь технологию. Если бы технологическое преимущество было важно, многие мейнстримовые технологии, включая C++, Windows, Java и C#, сдохли бы еще в колыбели.
Можешь озвучить?
Могу. Например, лицензия и стоимость оной, возраст и распространенность инструмента, объем и качество документации, количество примеров и готовых грамматик, количество и регулярность релизов, объем и вменяемость community, количество и скорость исправления багов и т.д., и т.п.
Трындишь тут ты.
Если ты еще не в курсе, то это место такое, которое я сделал, чтобы трындеть самому. И самому назначать правила. А посему, с подобной манерой общения шел бы ты лучше обратно на RSDN. Может там ты кому нужен и интересен, но явно не здесь.
>Или же потому, что у них других забот хватает, помимо того, чтобы сравнивать длину у БНФ и у PEG.
Ты только что назвал кучу людей идиотами.
Ибо если бы генераторы парсеров давали хороший результат, то только идиоты их бы не использовали.
Я же делаю систему способную сгенерировать компилятор и ИДЕ промышленного качества.
А в сочетании с бекендами думаю 90% работы можно будет переложить на фреймворк.
Ты просто не представляешь, сколько времени экономит мой парсер по сравнению с конкурентами. А с ручным разбором даже сравнивать не смешно.
>Никому не нужной.
Говорим за всех да?
>Повторю еще раз. Ты во главу угла ставишь технологию. Если бы технологическое преимущество было важно, многие мейнстримовые технологии, включая C++, Windows, Java и C#, сдохли бы еще в колыбели.
Если бы технологии были бы не важны мы бы до сих пор в машинных кодах писали.
>Могу. Например, лицензия и стоимость оной, возраст и распространенность инструмента, объем и качество документации, количество примеров и готовых грамматик, количество и регулярность релизов, объем и вменяемость community, количество и скорость исправления багов и т.д., и т.п.
Что характерно в списке нет главной причины, почему вообще народ связывается с ДСЛ.
>Если ты еще не в курсе, то это место такое, которое я сделал, чтобы трындеть самому. А посему, с подобной манерой общения
Ты смотри. Обиделся. А про то, что ты выбрал эту манеру общения, уже забыл?
Сначала сказал, что я страдаю херней.
Потом сказал что я трындю.
Так что получи и распишись.
>шел бы ты лучше обратно на RSDN. Может там ты кому нужен и интересен, но явно не здесь.
Сначала наехал. А когда тебя аргументированно приперли к стенке начал посылать.
Ты еще сообщения тереть начни.
@Wolfhound:
>>Или же потому, что у них других забот хватает, помимо того, чтобы сравнивать длину у БНФ и у PEG.
>Ты только что назвал кучу людей идиотами.
Сударь, с такой манерой общения на RSDN. И сообщения подобного рода тереть буду.
>Сударь, с такой манерой общения на RSDN.
Ты задал эту манеру общения.
>И сообщения подобного рода тереть буду.
Начни с себя.
>Nemerle-строители в очередной раз страдают херней
>А пока хватит трындеть.
Или слабо?
@Wolfhound
Ты задал эту манеру общения.
Ok, разложу по полочкам. Я высказал предположение, что разработчиков языков программирования волнуют совсем другие проблемы, нежели выяснение преимуществ PEG над БНФ или наоборот. И дал ссылки на высказывания самих разработчиков языков, которые рассказывают о своих проблемах. Ты же сказал, что я "только что назвал кучу людей идиотами."
Я не понимаю, как проистекает одно из другого. Поэтому такой стиль общения у себя в блоге терпеть не собираюсь. Ты, помнится, активно его использовал на RSDN, вот там и продолжай.
Начни с себя.
Я уже давно начал. Этот блог предназначен для того, чтобы я мог высказывать свое мнение и свои соображения. Именно в той форме, в которой захочу.
Из этого не следует, что посетители этого блога могут делать в комментариях тоже самое.
Тебе что-то не нравится? Это не мое дело. Я тебя сюда не звал.
>Nemerle-строители в очередной раз страдают херней
Таки да. Если кому-то хочется меня переубедить -- сделайте язык, который будет востребован за пределами RSDN.
>Я уже давно начал. Этот блог предназначен для того, чтобы я мог высказывать свое мнение и свои соображения. Именно в той форме, в которой захочу.
>Из этого не следует, что посетители этого блога могут делать в комментариях тоже самое.
Двойные стандарты на марше.
Какая прелесть.
Отправить комментарий