Здравствуйте, batu, Вы писали:
B>Сначала про "жизненный цикл". В общем случае объекты создаются не только динамически. Есть статические объекты. Есть базы данных или текст. Это тоже объекты и хотя это не программа (а у меня нет разницы между программой и документом. Даже форматов нет.). А в программе есть инструкции. Это тоже объекты. Говорить о жизненом цикле таких объектов. Ну, вот сколько существует документ, столько и существуют в нем объекты. Объекты создающиеся динамически это просто объекты к которым применяется оператор (инструкция, объект) Dim или New.
То есть вы хотите сказать, что в вашем случае программа сразу существует не в текстовом виде, а в виде AST?
Подход интересный, хотя и не новый. Его основная проблема — в том, что в нём не может существовать некорректная программа. На первый взгляд это здорово, но на практике оказывается помехой. Привычные методики типа Copy-Paste здесь не работают.
Расскажите, как вы собираетесь бороться с отсутствием отдельной фазы компиляции, которая запускается вручную.
B>3. Синтаксический анализ создает из последовательности объектов-лексем и объектов-знаков новые объекты! Так как синтаксис у меня простой сначала имя класса ,а затем имя создаваемого объекта (далее в скобках идет присвоение значений свойств объекту и определение вложеных объектов) то выглядит это примерно так.
B>B>Form Fm {Size=120;50 Label Lb {Size=20;30 Text="Конечно"}}
B>For I=0 To N { J+=1 Z=X*Y}
B>
B>Из первой строки синтаксический анализатор создаст форму с вложеной меткой и текстом "Конечно".
B>Вторая строка создаст объект-инструкцию класса For, с вложенными операторами J+=1 Z=X*Y
Это всё понятно. Непонятно,
зачем вы создаёте эту объект-инструкцию. Точнее, зачем вы на этом концентрируетесь.
В обычном жизненном цикле программы все эти объекты эфемерны — они существуют во время работы компилятора. Как только компилятор сгенерировал целевой код, никакие объекты-инструкции не нужны.
B>Совершенно верно изумление. Мы создаем оператор For в динамической области. Давай только не будем сейчас обсуждать зачем это нужно.
Как это? Вопрос "зачем это нужно" здесь главный.
B>Теперь, надеюсь, понятно, что такая многоуровневость позволяет иметь абсолютно всю информацию как при выполнении так и при редактировании, и позволяет создавать как программы, так и документы.
Осталось понять, зачем нужна "абсолютно вся" информация. В практических подходах ограничиваются той информацией, которая
нужна. Ну вот например нужно нам определять, в каком месте исходной программы случился breakpoint при отладке. Совершенно не обязательно при выполнении хранить где-то копию этих строчек и заниматься интерпретацией. Достаточно иметь файл
символов, которые позволяют отобразить адреса в имена и ссылки.