Отчитываюсь о проделанной работе. Мы завершили
Milestone 2. Теперь на Nitra можно создавать расширяемые парсеры и производить связывание имен (простую типизацию не завязанную на вывод типов) для языков общего назначения и DSL-ей.
Все это не означает, что работа завершена. Нужно еще многое сделать. Но уже можно начинать делать какие-то свои языки и DSL-и.
В качестве подопытного языка мы использовали C#. Он был выбран как один из наиболее сложных из современных мэйнстрим-языков и из-за того, что у него есть полноценная спецификация. Еще одной предпосылкой являлось то, что я хочу сделать расширяемую версию C#. На новой подсистеме связывания сделана типизация C# в плоть до тел методов. При этом результат получился очень компактным, легким в понимании и поддержке (после освоения наших DSL-ей), и очень легко расширяемым. Что реализация Nemerle, что Roslyn на ее фоне выглядят переусложненными монстрами и при этом поддерживают очень скудную расширяемость. Нитровский вариант на против может легко расширяться и при этом на порядок проще в поддержке.
В тестах, у нас уже есть C# с JSON-ом в качестве расширения. В этом примере C#-выражения внедряется JSON-выражения, которые в свою очередь, может содержать C#-выражения (рекурсивно). Причем расширения добавляются, как и в Nemerle, директивой usung.
Если для языка имеется код связывания, то для него можно генерировать плагин к ReSharper-у, который будет предоставлять базовые сервисы IDE. Потенциально можно создать генератор для любой IDE (включая VS без ReSharper-а). Просто сделать расширение для ReSharper-а было проще.
Подсистем генерации кода и бэкэндов пока нет, но код можно генерировать и вручную. Символы получаемые нашей подсистемой связывания можно обрабатывать из любого дотнет-кода (на C#, Nemerle или чем угодно).
В ближайшее время я сделаю статью, в которой расскажу о подсистеме связывания и прочих возможностях появившихся в Nitra за последний год, а так же постараюсь сделать скринкасты.
ЗЫ
Я подправил
стартовую страницу проекта. Просьба зайти на нее и оценить насколько она понятная для не посвященных в детали проекта. Приветствуется любая конструктивная критика.