У меня грустная новость.
Я создатель языка программирования Tokype и я недавно начал разрабатывать версию 0.0.3. Я начал чинить AST, ведь раньше он выдавал такое дерево AST:
При таком коде:
Я это исправил более-менее и теперь он выдаёт почти правильный AST:
Это он с оптимизатором. Как видите инлайнинг работает, но почему-то parser не хочет брать в тело функции встроенные функции (а именно последние 3 строчки). Возможно, он просто не понимает, как их засовывать в блоки функций.
И главная грустная новость: оказывается те бенчмарки с 0 секундами из первого поста про мой интерпретатор - это всё неправда. Я устроил очень жёсткий тест для интерпретатора и он очень долго выполнялся, но в конце написал 0 секунд. Я посмотрел оптимизированный AST и понял, что мой оптимизатор, чтобы посчитать строки по типу "stop-start" с помощью функции evaluateConstant смог получить время и просто вставил его в вызовы функций....Поэтому мой оптимизатор читерил на бенчмарках. И теперь, я готов показать те бенчмарки, но с настоящей скоростью Tokype:
Бенчмарк 1
Код:
Терминал:
(до исправления бага он показывал "0 sec")
Бенчмарк 2
Код:
Терминал:
(до исправления бага он показывал "0 sec")
Бенчмарк 3
Код:
Терминал:
(до исправления бага он показывал "0 sec")
Бенчмарк 4
Код:
Терминал:
(до исправления бага он показывал "0 sec")
Но, если учитывать то, что мой интерпретатор обходит AST, то я думаю результат очень хороший, а также я сделал фибоначчи, чтобы проверить насколько интерпретатор справится с ним. И терминал меня удивил:
Код:
Терминал:
Получается все-таки мой оптимизатор может оптимизировать код до 0 секунд. Но напоминаю, что это не мой язык быстрый, а это просто оптимизатор всё вырезал.
На этом у меня всё. Всем пока!
(ищите ссылки на GitHub - в моём первом посте про Tokype)