Skip to content

metaL_old

Dmitry Ponyatov edited this page Oct 9, 2019 · 1 revision

Язык metaL

Язык metaL не предназначен для программирования, это DML/DDL для формирования и модификации вычислительных структур на основе расширенной фреймовой модели Марвина Мински, и управлении EDS-интерпретатором. Другими словами, metaL это язык описания данных. Что это за данные, и что вы с ними будете делать, это уже ваше решение. Единственное накладываемое ограничение: каждый объект структуры данных может быть только фреймом -- экземпляром базового класса Frame, или любого класса, который его наследует.

metaL изначально задумывался как очень минималистичный язык для разработки программ для встраиваемых систем, используя метапрограммирование как основной подход к разработке ПО. Поэтому у него и такое название -- metaпрограммирование и Language (язык), и одновременно отсылка к baremetal.

Поскольку для метапрограммирования необходима языковая система со встроенной поддержкой гомоиконичности, была проделана определенная поисковая исследовательская работа по выбору модели данных и архитектуры абстрактной машины, которая бы использовала структуры данных, одновременно хорошо понятные человеку, и способные описать (и синтезировать) исходный код программ на языках Си и С++, обязательных к применению для встраиваемых систем при работе в группе. Из гомоиконичных языков наиболее известен Lisp, но списковое представление исходного кода показалось ужасно громоздким. В поиске удалось выйти на точную формулировку, какое направление информатики наиболее точно соответствует требуемой прикладной области -- Knowledge Representation & Reasoning, и универсальную модель фреймов, хорошо подходящую как к моделированию программного обеспечения так и задачам семантического ИИ.

Абстрактная машина языка metaL

Упрощенная реализация на Python доступна в подкаталоге проекта https://github.com/ponyatov/itstep/tree/master/metaL

Абстрактная машина языка metaL похожа на стековая машина языка Форт с использованием объектов и символьной адресацией памяти вместо целочисленных указателей, и состоит из следующих компонентов:

  • базовый класс Frame и его производные классы формируют базу для реализации гомоиконичной языковой системы
  • Context вычислительный контекст, содержит состояние нити/процесса
    • Ip точка выполнения программы (указатель инструций интерпретатора)
    • стек данных nest[] хранит данные в процессе вычислений
    • словарь slot{} содержит соответствия между именами и исполняемыми структурами данных
    • стек компиляции compile
    • другие ресурсы, привязанные к текущей выполняемой нити
  • команды абстрактной машины Cmd
    • выполняют операции над несколькими верхними элементами стека S,
    • включают операции обмена данными между стеком S и словарем W,
    • операции ввода/вывода,
    • интерфейс с операционной системой,
    • классы-обертки для нескольких распространенных библиотек, и
    • произвольные пользовательские команды, написанные на языке реализации ВМ
  • веб-интерфейс реализован на фреймворке Flask, обеспечивает визуализацию, командную консоль, и пользовательский интерфейс в браузере -- мультиплатформенность, запуск системы на арендованном VDS-сервере, и возможность создания коммерческих приложений.

система типов

Clone this wiki locally