-
Notifications
You must be signed in to change notification settings - Fork 5
metaL_old
Язык metaL
не предназначен для программирования, это DML/DDL для формирования и модификации вычислительных структур на основе расширенной фреймовой модели Марвина Мински, и управлении EDS-интерпретатором. Другими словами, metaL
это язык описания данных. Что это за данные, и что вы с ними будете делать, это уже ваше решение. Единственное накладываемое ограничение: каждый объект структуры данных может быть только фреймом -- экземпляром базового класса Frame, или любого класса, который его наследует.
metaL
изначально задумывался как очень минималистичный язык для разработки программ для встраиваемых систем, используя метапрограммирование как основной подход к разработке ПО. Поэтому у него и такое название -- metaпрограммирование и Language (язык), и одновременно отсылка к baremetal.
Поскольку для метапрограммирования необходима языковая система со встроенной поддержкой гомоиконичности, была проделана определенная поисковая исследовательская работа по выбору модели данных и архитектуры абстрактной машины, которая бы использовала структуры данных, одновременно хорошо понятные человеку, и способные описать (и синтезировать) исходный код программ на языках Си и С++, обязательных к применению для встраиваемых систем при работе в группе. Из гомоиконичных языков наиболее известен Lisp, но списковое представление исходного кода показалось ужасно громоздким. В поиске удалось выйти на точную формулировку, какое направление информатики наиболее точно соответствует требуемой прикладной области -- Knowledge Representation & Reasoning, и универсальную модель фреймов, хорошо подходящую как к моделированию программного обеспечения так и задачам семантического ИИ.
Упрощенная реализация на Python доступна в подкаталоге проекта https://github.com/ponyatov/itstep/tree/master/metaL
Абстрактная машина языка metaL
похожа на стековая машина языка Форт с использованием объектов и символьной адресацией памяти вместо целочисленных указателей, и состоит из следующих компонентов:
- базовый класс Frame и его производные классы формируют базу для реализации гомоиконичной языковой системы
- Context вычислительный контекст, содержит состояние нити/процесса
- команды абстрактной машины Cmd
- выполняют операции над несколькими верхними элементами стека
S
, - включают операции обмена данными между стеком
S
и словаремW
, - операции ввода/вывода,
- интерфейс с операционной системой,
- классы-обертки для нескольких распространенных библиотек, и
- произвольные пользовательские команды, написанные на языке реализации ВМ
- выполняют операции над несколькими верхними элементами стека
- веб-интерфейс реализован на фреймворке Flask, обеспечивает визуализацию, командную консоль, и пользовательский интерфейс в браузере -- мультиплатформенность, запуск системы на арендованном VDS-сервере, и возможность создания коммерческих приложений.