Блог типа

Чо Тут

Что это такое?

Практикуюсь в изобретении бессмысленных вещей. После проекта fw, в котором интерпретировался выхлоп уже готового компилятора, написание своего компилятора было неизбежным. Вот он и реализовался. Проект компилятора и интерпретатора. Все довольно упростилось, язык LEAF структурно даже проще обычного Оберона. Система типов банальная. Хотя есть комплексные числа. Но это простой тип, он не усложняет систему вообще. Зато списки есть, и множества для любых значений, и ассоциативные массивы. Все довольно примитивное.

Основная особенность в том, что все статическое. И передается по значению. Есть пара обобщенных типов: значение вообще и указатель на значение вообще, вот по указателю уже динамическое значение будет, в куче. Работа с ними (с значениями вообще) получилась неудобной, ведь язык строго типизированный.

Зато структурно в языке всё очень по Дейкстре. Хотя он бы не одобрил такое обращение со сложными структурами (я про передачу по значению). Процедуры, два вида циклов (и никаких FOR), ветвление. Модульность уже по Вирту, почти как в Обероне. А пользовательских типов нет. Да и зачем, основная идея в том, что пользовательский тип это обязательно либо RECORD либо ARRAY OF, RECORD хорошо ложится на ассоциативный массив, а ARRAY на простой список. Дальше возникает кагбэ “проблема”: тип полей и элементов массива не указать, в LEAF значение в списке всегда ANY.

Ну что тут поделаешь, язык LEAF как раз и нужен чтобы проверить, как оно вообще, жизнеспособна ли такая идея или нет. Первая версия компилятора и рантайма написана на golang где-то за месяц. Теперь надо остановиться и подумать, как это сделать эффективным и не глючным.

P.S. Этак можно и лолу переписать на golang, где бы только время взять.