Re: [Nitra] Roadmap - Milestone 2 (Символы и связывание)
От: btn1  
Дата: 29.10.14 10:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Пару слов по поводу символов, деклараций и биндинга, раз уж оно интересно и не понятно.


Я скажу больше — после прочитанного, мне вообще бы никогда в голову не пришло, о каких декларациях речь, если бы не документация!

VD>Символ — это эдакий объект описывающий ту или иную сущность языка.


Знак "+" — это тоже "символ"?

VD>Если язык подразумевает наличие внешних бинарных модулей или библиотек, то символы можно будет сериализовать и загружать в эти внешние модули


Э-э-э... Как можно загружать символы _ВО_ внешние модули? Я так понял, будет встроенная функция считывать символы ИЗ модулей? (и кэшировать, видимо)


VD>На практике не всегда просто отобразить Дерево разбора (детальный АСТ порождаемый Найтрой) на символы. Во-первых, разные синтаксические конструкции могут отображаться на одинаковые типы символов,


Вот тут непонятно. Раз символы — это какие-то терминалы из имён, какая разница в какие синтаксические конструкции они входят? Синтаксис — это вообще вопрос формы ветки в АСТ.

VD> во-вторых, отображение может быть не прямолинейным


Например?

Всё равно немного непонятна глубина проблемы. Пусть есть АСТ:

+
|\
a b


Здесь "a" и "b" — те самые символы из начала поста. Теперь нам нужно связать эти символы с конкретными сущностями — полем класса или локальной переменной, что угодно. Ну так пробегаемся по глобальному дереву имён и связываем!

VD>Декларация — это что-то типа АСТ файла (еденицы компиляции) только содержит оно исключительно конструкции верхнего уровня.


Суть понятна. Но как будут связываться локальные переменные? Типа "если не нашёл символ в дереве деклараций — ищи в локальном АСТ"?


VD>К сожалению, формализовать алгоритм связывания довольно не просто. Мы пока не имеем готового решения на этот счет. Так что любые предложения приветствуются. Если не получится придумать внятного декларативного описания принципов связывания имен....


эээ... а зачем "декларативно"? (да и возможно ли?) Это же задача разработчика языка — написать процедуру связки имён, мало ли что он себе в языке придумал! Вот пусть бегает по дереву и связывает.

VD>К сожалению, работы тут непочатый край. И код будет критичен к производительности. Так что этот этап займет не менее полугода (по моим оценкам).


Это да, не всё так просто, блин! Выскажу лишь идею: не стоит подобно разрабам WPF с головой уходить в декларативность. Если можно написать строчку кода или 5 строк деклараций, пусть лучше это будет строчка кода! (да и код ГИБЧЕ в развитии, чем прибитые гвоздями декларации)


Спасибо за разъяснения, Влад! Много текста, конечно, но я осилил А диаграммы были бы ещё круче!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.