[Nitra] Описание подсистемы сбора информации «Nitra»
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.10.15 21:06
Оценка: 7 (2)
Предварительная версия статьи Описание подсистемы сбора информации «Nitra»
Автор(ы):


В статье описана подсистема сбора информации по AST, работа с символами, областями видимость и связыванием.

Сразу извинюсь за орфографию, пунктуацию и опечатки. Статья пока не вчитывалась. В финальной версии мы это все поправим.

Сейчас работаем над:
1. Типизацией Nitra на своей новой версии. Это даст поддержку IDE для самой Nitra.
2. Над деплойментом через NuGet.
3. Квази-цитированием.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 16.10.2015 21:09 VladD2 . Предыдущая версия .
Re: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: kekekeks  
Дата: 18.10.15 12:34
Оценка:
А есть где-то полный список материалов для чтения по Nitra?
Re[2]: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.10.15 14:38
Оценка:
Здравствуйте, kekekeks, Вы писали:

K>А есть где-то полный список материалов для чтения по Nitra?


Пока что есть два материала на русском:
1. Описание языка описания расширяемых парсеров «Nitra»
Автор(ы):
— там рассказывается про вопросы связанные с парсингом. Статья несколько устарела, но не сильно.
2. Описание подсистемы сбора информации «Nitra»
Автор(ы):
(т.е. текущая статья). В ней описаны возможности Nitra по связыванию имен и общей типизации.

В общем, по мере появления подсистем они описываются.

Так же есть страница проекта на английском языке. Надо ее в вики Гитхаба перенести (по уму).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: hi_octane Беларусь  
Дата: 20.10.15 20:31
Оценка:
VD>Сразу извинюсь за орфографию, пунктуацию и опечатки. Статья пока не вчитывалась. В финальной версии мы это все поправим.
В тексте есть "М описали расчет значений" — видимо подразумевалось Мы
Nemerle — power of metaprogramming, functional, object-oriented and imperative features in a statically-typed .NET language
Re[2]: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.15 00:23
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>В тексте есть "М описали расчет значений" — видимо подразумевалось Мы


Спасибо, поправил в репозитории.

А, как насчет понятности?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: hi_octane Беларусь  
Дата: 21.10.15 10:02
Оценка:
VD>А, как насчет понятности?

Споткнулся об token Reference — если на token Name есть явная ссылка, то для Reference явная ссылка только в месте где переменная используется (но там не должно быть "var", а в token'е !Keyword есть), и как Reference возникает в объявлении (иначе зачем там !Keyword) — не совсем понятно.

Всё остальное понятно, но я за проектом слежу, все предыдущие статьи читал и коммиты просматриваю. Если и замечаю места которые хочется прояснить — то далеко за пределами вводной статьи, типа взаимодействия коллекторов с расширениями грамматики, и т.п.

Ещё одно замечание — в примере калькулятора сначала идёт код с номерами строк, а потом описание с ссылками. Для печатной статьи лучшего варианта наверное и нету, для веба было бы легче если бы описание того что делается появлялось при наведении/клике на строку. Если надо — могу сляпать подходящий JS для такого "интерактива".

Также основной акцент во всех статьях делается на расширении уже существующего языка (наглядный способ ввода новых precedence — это супер). Но имхо, полностью возможности можно было бы увидеть на примере в котором по шагам создаётся язык (пусть только с add/sub), потом расширяется (mul/div и скобки), и после этого создаётся язык-обёртка, в который последняя конструкция плавно встраивается. Собственно я этот путь в свободное от работы время сейчас пытаюсь пройти. Это интересно из-за того что есть всякие Razor-подобные DSL которые расширяются шарпом для получения специфической функциональности, и судя по гуглу "ASP.NET Template Engine" — их уже легион, и каждый — кандидат на переписывание на Nitra.
Re[4]: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.15 19:56
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Споткнулся об token Reference — если на token Name есть явная ссылка, то для Reference явная ссылка только в месте где переменная используется


И Name, и Reference — это правило идентификатора. Разделение сделано для того, чтобы еще в грамматике развести имя сущности и ссылку на сущность.

Что касается явных ссылок, то и для Name, и Reference в этом примере есть только по одному применению.
Name используется при объявлении переменной:
syntax VariableDeclaration = "var" sm Name sm "=" sm Expression ";"; // 10

Reference используется для ссылки на нее:
  syntax Expression // 11
  {
    ...
    | Variable = Reference; // 15


Обрати внимание, что в примере нет маппинга ни для Name, ни для Reference. Вот эти атрибуты создают маппинг автоматом.

_> (но там не должно быть "var", а в token'е !Keyword есть), и как Reference возникает в объявлении (иначе зачем там !Keyword) — не совсем понятно.


Что касается !Keyword, то это демострация того как сделать так, чтобы пользователю выдавалось сообщение об ошибке в случае, если он попытается использовать "var" в качестве имени переменной. В принципе Nitra позволяет не накладывать такое ограничение. Так что если убрать эти предикаты, то можно будет писать код вроде:
var var = 42;

Такое код будет прекрасно работать, но будет "рвать глаз". Вот пример и демонстрирует как это запретить.
Наверно стоит разжевать этот момент в статье.

_>Всё остальное понятно, но я за проектом слежу, все предыдущие статьи читал и коммиты просматриваю. Если и замечаю места которые хочется прояснить — то далеко за пределами вводной статьи, типа взаимодействия коллекторов с расширениями грамматики, и т.п.


Ну, так задавай вопросы. Мы с удовольствием ответим. Это будет полезно и окружающим, и нам.

_>Ещё одно замечание — в примере калькулятора сначала идёт код с номерами строк, а потом описание с ссылками. Для печатной статьи лучшего варианта наверное и нету, для веба было бы легче если бы описание того что делается появлялось при наведении/клике на строку. Если надо — могу сляпать подходящий JS для такого "интерактива".


Идея интересная, но не ясно как это дело вмонитровать в RSDN-овский формат. Там ведь исходно XML. При открытии статьи он преобразуется в HTML через XSLT.

Может просто скопипастить нужные строки по месту?

_>Также основной акцент во всех статьях делается на расширении уже существующего языка (наглядный способ ввода новых precedence — это супер). Но имхо, полностью возможности можно было бы увидеть на примере в котором по шагам создаётся язык (пусть только с add/sub), потом расширяется (mul/div и скобки), и после этого создаётся язык-обёртка, в который последняя конструкция плавно встраивается. Собственно я этот путь в свободное от работы время сейчас пытаюсь пройти. Это интересно из-за того что есть всякие Razor-подобные DSL которые расширяются шарпом для получения специфической функциональности, и судя по гуглу "ASP.NET Template Engine" — их уже легион, и каждый — кандидат на переписывание на Nitra.


В качестве примера для своего языка живущего в отдельном файле с отдельным расширением можно рассматривать реализацию C# (.ncs) и саму Nitra (я сейчас начал реализацию ее типизации на новой подсистеме связывания).

В наших планах опубликовать .ncs в NuGet (как обычном, так и NuGet расширений ReSharper). Это позволит делать расширения для C#. Все кто хочет сделать свой формат могут сделать все по образу и подобию.

Так же нужно вынести в библиотеку найторовский код реализующий работу с пространствами имен для C#-подобных языков. Имея такую библиотеку создать нечто вроде Разора будет совсем очень просто. Естественно, .ncs тоже нужно перенести на эту библиотеку. Это позволит совмещать в одном проекте .ncs и свои форматы, причем они будут порождать единый набор символов и будут обрабатываться как единый проект.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: koodeer  
Дата: 05.11.15 08:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А, как насчет понятности?


Раздражает вот это "А," — с постоянной запятой после "а".
Re[4]: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.11.15 16:14
Оценка:
Здравствуйте, koodeer, Вы писали:

K>Раздражает вот это "А," — с постоянной запятой после "а".


Что-то ничего не понял. Что за "А,"?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Nitra] Описание подсистемы сбора информации «Nitra» (предва
От: koodeer  
Дата: 05.11.15 17:32
Оценка:
Здравствуйте, VladD2, Вы писали:

K>>Раздражает вот это "А," — с постоянной запятой после "а".


VD>Что-то ничего не понял. Что за "А,"?


Прощу прощения, это не по коду замечание и не по Нитре, а по русскому языку. Согласен на небольшой бан.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.