瀏覽代碼

обновил ридми, проект пока заморожен

kpmy 10 年之前
父節點
當前提交
b5a587b996
共有 1 個文件被更改,包括 35 次插入18 次删除
  1. 35 18
      README.md

+ 35 - 18
README.md

@@ -1,23 +1,40 @@
-The Framework (fw)
-==
-Фреймворк-интерпретатор для языка КП (Oberon/L).
+# The Framework (fw) #
 
-Вводные:
-AST-выход компилятора ББ.
+**Фреймворк-интерпретатор для языка Component Pascal (Oberon/L, КП).**  
+**Цель проекта:** отвязка языка КП от фреймворка BlackBox.
 
-Результат:
-Исполнение модулей на КП.
+## Вводные данные ##
+Компилятор BlackBox Component Builder работает по трехзвенной схеме. Результатом первого этапа работы является абстрактное синтаксическое дерево. Это дерево сохраняется в файл (сейчас это формат GraphML).
 
-Дополнения:
-Создание диалекта КП, который лучше (возможно) подойдет для высокоуровневой среды рантайма.
+## Инструменты ##
+Используется компилятор Go и его стандартная библиотека.
+Так же необходим пакет *ypk*.
+Код генерируется в BlackBox, подсистемой *Xev*.
+## Результат ##
+Исполнение кода из модулей-графов. Перед исполнением структура дерева восстанавливается в памяти интерпретатора. Идентификация узлов сквозная для всех модулей. 
 
-Промежуточный результат нескольких месяцев работы:
-Работа идет в разных направлениях.
-Почти сразу, со второй попытки, была выработана стабильная схема интерпретации деревьев с помощью нерекурсивного пошагового исполнителя. Пока нет обобщенного механизма, некоторые зачатки обобщения есть, но их внедрение не так важно.
-Вместе с интерпретацией реализован стабильный и гибкий механизм хранения данных среды исполнения, с четвертой попытки. Ничего революционного, стек областей видимости и куча для динамических данных. 
-В плане взаимодействия с окружающим миром выбран кустарный REST-протокол, интерпретируемый уже в хост-среде.
-Постепенно оформляется концепция исполнения кода на КП в произвольной среде.
-Все пока работает медленно. 
-Вызывает подозрения в ненадежности механизм работы с массивами. Сложные типы пока не поддерживаются. 
+Интерпретатор нацеливается на узел входа в модуль и начинает итеративно переходить от узла к узлу по заданным правилам (см. doc/ast.pdf). Каждый новый узел порождает новый уровень глубины стека обработки. Результат обработки узла, если таковой имеется, передается на обработку предыдущему узлу в стеке. 
 
-Касаемо Xev есть планы оптимизации. А так же более полноценной интеграции с компилятором. Нужно понимание структуры символьных файлов. Однако тратить много сил не хочется, ведь при портировании компилятора для fw потребуется что-то новое.
+Данные хранятся в трех экземплярах менеджера данных.  
+
+- Первый экземпляр - данные модулей, не выгружаются по завершении обработки узла входа в модуль. Таким образом достигается модульность среды исполнения.
+- Второй экземпляр - данные процедур, стек, каждый уровень существует, пока интерпретатор не вышел из тела процедуры. 
+- Третий экземпляр - куча. Данные в ней размещаются динамически, в результате вызова процедуры NEW. Очистка памяти так же автоматическая, используются механизмы языка Go. 
+
+Данные в менеджере хранятся организованно, они соответствуют заданным узлам данных. 
+
+Одним из основных элементов отвязки языка от конкретного фреймворка является применение процедурных переменных, которые инициализируются фреймворком. Таким образом, в рамках правил языка доступен вызов таких процедурных переменных. Их названия и интерфейс сигнализируют фреймворку об особенностях интерпретации. Такой подход проверен в оригинальном фреймворке и в фреймворке *fw*.
+
+## Текущее состояние ##
+На данном этапе выполняется интерпретация всех типов узлов, обобщенный механизм допускает появление новых узлов. Узлы с данными так же обрабатываются в полной мере.
+Менеджер данных поддерживает структурные типы данных КП, но для сложных типов, с наследованием и прочим - возможны ошибки.
+
+Модуль работы с данными пока поддерживает не все типы данных, то есть, операция сложения и другие могут быть не определены для редких типов данных, типа SHORTREAL, но эта ситуация охраняется. 
+
+Концепция отвязки от среды позволила наладить процесс написания тестовых модулей для фреймворка прямо в BlackBox, что помогает в процессе разработки. Модуль SYSTEM исключен из рантайма, что позволяет добиться хорошей переносимости кода.
+
+## TODO: ##
+
+- Отладка работы со сложными типами данных
+- Реализация базовых операций для всех типов данных.
+- Реализация базовых компонентов по работе с окружающим миром, возможно на основе компонентов BlackBox (Files, Strings).