浏览代码

Создано 2015-07-17-чо-тут.md

Пётр 10 年之前
父节点
当前提交
6104ba5833
共有 1 个文件被更改,包括 15 次插入0 次删除
  1. 15 0
      _posts/2015-07-17-чо-тут.md

+ 15 - 0
_posts/2015-07-17-чо-тут.md

@@ -0,0 +1,15 @@
+---
+published: false
+---
+
+## Что это такое?
+
+Практикуюсь в изобретении бессмысленных вещей. После проекта [fw](https://github.com/kpmy/fw "fw"), в котором интерпретировался выхлоп уже готового компилятора, написание своего компилятора было неизбежным. Вот он и реализовался. Проект компилятора и интерпретатора. Все довольно упростилось, язык `LEAF` структурно даже проще обычного Оберона. Система типов банальная. Хотя есть комплексные числа. Но это простой тип, он не усложняет систему вообще. Зато списки есть, и множества для любых значений, и ассоциативные массивы. Все довольно примитивное. 
+
+Основная особенность в том, что все статическое. И передается по значению. Есть пара обобщенных типов: значение вообще и указатель на значение вообще, вот по указателю уже динамическое значение будет, в куче. Работа с ними (с значениями вообще) получилась неудобной,  ведь язык строго типизированный. 
+
+Зато структурно в языке всё очень по Дейкстре. Хотя он бы не одобрил такое обращение со сложными структурами (я про передачу по значению). Процедуры, два вида циклов (и никаких `FOR`), ветвление. Модульность уже по Вирту, почти как в Обероне. А пользовательских типов нет. Да и зачем, основная идея в том, что пользовательский тип это обязательно либо `RECORD` либо `ARRAY OF`, `RECORD` хорошо ложится на ассоциативный массив, а `ARRAY` на простой список. Дальше возникает кагбэ "проблема": тип полей и элементов массива не указать, в `LEAF` значение в списке всегда `ANY`. 
+
+Ну что тут поделаешь, язык `LEAF` как раз и нужен чтобы проверить, как оно вообще, жизнеспособна ли такая идея или нет. Первая версия компилятора и рантайма написана на `golang` где-то за месяц. Теперь надо остановиться и подумать, как это сделать эффективным и не глючным. 
+
+P.S. Этак можно и лолу переписать на `golang`, где бы только время взять.