Re[3]: Вопрос к Vlad2: Nemerle & R#
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.03.06 23:19
Оценка: 2 (1)
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.