Чо Тут
Что это такое?
Практикуюсь в изобретении бессмысленных вещей. После проекта fw, в котором интерпретировался выхлоп уже готового компилятора, написание своего компилятора было неизбежным. Вот он и реализовался. Проект компилятора и интерпретатора. Все довольно упростилось, язык LEAF
структурно даже проще обычного Оберона. Система типов банальная. Хотя есть комплексные числа. Но это простой тип, он не усложняет систему вообще. Зато списки есть, и множества для любых значений, и ассоциативные массивы. Все довольно примитивное.
Основная особенность в том, что все статическое. И передается по значению. Есть пара обобщенных типов: значение вообще и указатель на значение вообще, вот по указателю уже динамическое значение будет, в куче. Работа с ними (с значениями вообще) получилась неудобной, ведь язык строго типизированный.
Зато структурно в языке всё очень по Дейкстре. Хотя он бы не одобрил такое обращение со сложными структурами (я про передачу по значению). Процедуры, два вида циклов (и никаких FOR
), ветвление. Модульность уже по Вирту, почти как в Обероне. А пользовательских типов нет. Да и зачем, основная идея в том, что пользовательский тип это обязательно либо RECORD
либо ARRAY OF
, RECORD
хорошо ложится на ассоциативный массив, а ARRAY
на простой список. Дальше возникает кагбэ “проблема”: тип полей и элементов массива не указать, в LEAF
значение в списке всегда ANY
.
Ну что тут поделаешь, язык LEAF
как раз и нужен чтобы проверить, как оно вообще, жизнеспособна ли такая идея или нет. Первая версия компилятора и рантайма написана на golang
где-то за месяц. Теперь надо остановиться и подумать, как это сделать эффективным и не глючным.
P.S. Этак можно и лолу переписать на golang
, где бы только время взять.