Object
это класс базового узла объектного графа, реализующий поведение и интерфейсы, общие для всех элементов языка metaL
.
В большинстве случаев у нас есть необходимость хранить для любого элемента данных следующие поля:
class:tag
тэг класса/типа явно указывающий на тип фрейма.scalar:val
имя фрейма или скалярное значение: строка, число,.. хранимое в типе языка реализации (Python, хост-язык).dict:slot{}
ассоциативный массив для хранения атрибутов/слотов; хранит любые другие фреймы, и использует строки для адресации элементов по имени атрибутаvector:nest[]
упорядоченный массив; может работать одновременно как список, стек или очередь, адресуется целыми
числамиuint32:gid
уникальный глобальный идентификатор для адресации в глобальном хранилище (быстрый 32-битный xxhash по содержимому объекта)## базовый класс узла объектного графа
class Object:
## конструктор
def __init__(self, V):
if isinstance(V, Object):
V = V.val
## скалярное значение: имя объекта, строка, число,..
self.val = V
## ассоциативный массив: слоты = атрибуты = словарь = environment
self.slot = {}
## упорядоченный контейнер: вложенные AST = вектор = стек = очередь
self.nest = []
## глобальный storage id (хэш по содержимому)
self.gid = self.sync().gid