Здравствуйте, EvilChild, Вы писали:
EC>R# взят просто как немаленький и достаточно сложный проект, который писал Vlad2, исходники которого доступны,
Тогда пример плохой. R# скорее конкурент Nemerle, чем что-то что можно реализовать на Nemerle.
Скорее тут нужно прикинуть Nemerle на другие проекты. Попробую это сделать:
1. Rsdn.Editor. Этот проект практически на 90% базируется на ООП. Варианты Nemerle-а позволили бы сократить описание некоторых частей проекта. Например, они позволили бы сократить описание команд (т.е. реализации паттерна команда). Возможно кое-где Nemerle позволил бы избавиться от реализации паттернов. Но не думаю, что бщий объем кода уменшился бы сильнее чем процентов на 20%. Хотя это конечно только прикидки. Возможно, что-то я упускаю из вида.
2. Янус. Вот тут бы Nemerle мог оказать очень большой эффект. Взять хоят бы пример реструктуризатора на который у меня никак не получается выделить времни, чтобы его закончить. Одна из проблем реструктуризатора — генерация SQL-кода для разных диалектов SQL. Чтобы упростить эту задачу я воспользовался шаблонным движком
StringTemplate. Например, вот как выглядит код создания индекса:
CreateIndex(name, table, isClustered, isUnique, entries) ::= <<
/* General:CreateIndex */
CREATE $Unique(isUnique)$ $Clustered(isClustered)$ INDEX $Quot(name)$ ON $Quot(table)$
(
$entries:{ entry | $entry.Column$ $Direction(entry.IsAscending)$}; separator=",\n"$
)
>>
Выражения внутри баксов (символов "$") — это активные части шаблона. Они или преобразуют в текст некоторые переменные, или вызвают другие шаблоны, или применяют шаблоны к так называемым множественным атрибутам. Так "$Quot(name)$" приводит к тому, что вызывается шаблон Quot() которому передается значнеие параметра name внешенего шаблона. В итоге "$Quot(name)$" приводит к тому, что вместо этого кода выводится имя индекса хранящееся в параметре "name" причем значение помещается в ковычки. Выражение "$entries:Xxx()$" приводит к тому, что шаблон Xxx применяется ко всем элементам помещенным в entries (в примере использован безымянный шаблон "{ ... }").
Думаю, что те кто уже успел пописать на Nemerle догадались, что это очень похоже на активные строки в Nemerle (реализуемые макросами).
StringTemplate — это здоровая библиотека (объем ее кода сравним с объемом кода всего реструктуризацтора) не лишенная кучи недостатков. Так сообщения об ошибках в StringTemplate бывают крайне неинформативными, время затрачиваемое на загрузку шаблонов при запуске из под отладчика очень высокое, а возможности по расшерению не очень высокие (фактически библиотеку развивает только ее автор).
На Nemerle я мог бы создать встроенный в язык движек шаблонов лишенный практически всех нидостатков StringTemplate. При этом решение было бы быстрым (ведь пораждался бы код во время компиляции) и гибким (ведь я мог бы использовать всю мощь языка). При этом слжность реализации такого движка была бы куда ниже чем если это делать внучную.
Подобных мест в Янусе очень много и можно было бы получить нехилый выигрышь.
Оданако для этого нужна хорошая поддержка среды.
Кстати, нехилым проектом доказывающим, что Nemerle мощьнейший язык является сам компилятор Nemerle. Он изначально является компонентом (реализован в виде ДЛЛ и может подгружаться динамически). Его код краток и понятен. Он задействует практически все свои возможности. Аналогичный проект на С++ был бы в десятки раз бльше. Да и на C# тоже намного больше.
EC>ну и ещё то, что Vlad2 главный евангелист Nemerle на rsdn, а то, что он не нужен при наличии Nemerle это понятно.
Да, я за него даже еще не брался.

Мы еще шашочкой то помахаем.

... << RSDN@Home 1.2.0 alpha rev. 637>>