Тривиль 08.01.2023

На конец праздничных дней (между выпить/закусить, выездами на природу и прочими развлечениями):

  • доделана генерация в Си
  • сделана компиляция программы из нескольких модулей (есть пара недоделок)

Вот пример (модули в отдельных файлах, соединены для показа):вывод

Печатает: хорошо и привет!

Из изменений сделанных и намеченных:

1. Изменен синтаксис приведения (конверсии) типа. Изменен вроде бы вынуждено, так как я не смог пробиться через Notepad++, но то, что получилось мне нравится больше. Например, приведение целого к вещественному: ц(:Вещ64). Символ (: можно читать «как«:

  • ц(:Вещ64) — ц как Вещ64
  • человек(:Работник) — человек как Работник

При этом, за «:» как и в описаниях следует тип, а за счет скобок сохраняется синтаксическая однозначность.

Работают преобразования встроенных типов, проверки дин. типа объектов (downcasting), преобразования строки в вектор байтов или символов и обратно. Для последних в runtime добавлены функции кодирования/декодирования UTF-8.

2. Я пришел к мысли, что надо подключать GC вместо ARC. Основное соображение — ускорение реализации. Подключать буду Boehm GC.

Вообще компилятор близок к завершению. Кроме небольших доработок, осталось сделать мб ссылки и оператор выбора (в том числе по типам). В runtime есть что делать, и надо подумать над  хранением/доступом к модулям (раскладка кодовой базы).

Еще я думаю, написать систему тестирования на Тривиле. Этого не хватает, так как я не хочу использовать Go механику для исполняемых файлов. Думаю сразу сделать так, чтобы потом использовать с любым компилятором (в том числе с Тривилем на Тривиле). К тому же это будет хорошим тестом самого Тривиля и заставит написать нужные библиотеки.

По сути, у меня остался один важный нерешенный вопрос: как сделать map. Компилятор без map’а на Тривиле я писать не хочу. А как сделать дешево и сердито, пока не придумал.

Статистика:

  • Компилятор: 6583 строк на Го (7 пакетов, 44 файла) — думаю, что в итоге будет около 7500 строк.
  • Тесты пакетов компилятора: 193 штуки (используется go test)
  • Runtime: 509 строки на Си

PS. Если у кого-то есть желание поиграть с компилятором, напишите, подумаем как, хотя еще малость рановато.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *