На конец праздничных дней (между выпить/закусить, выездами на природу и прочими развлечениями):
- доделана генерация в Си
- сделана компиляция программы из нескольких модулей (есть пара недоделок)
Вот пример (модули в отдельных файлах, соединены для показа):
Из изменений сделанных и намеченных:
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. Если у кого-то есть желание поиграть с компилятором, напишите, подумаем как, хотя еще малость рановато.