Немного LISP'а для Hare?
Опубликовано 2024-06-05. Последние изменение 2024-11-05.
Итак, о новом проекте.
Звать его мышка[^1]. Ибо он маленький!
Я подумал, чего же мне не хватает как программисту? Правильно, своего диалекта Scheme. Конечно дело не в том, что я хочу просто написать интерпретатор. Дело в том, что новый прекрасный язык программирования Hare[^2] живёт без возможности расширить логику приложения каким-либо скриптовым языком. Так больше продолжаться не может! "Доколе!" подумал я и сел за работу.
На самом деле я ожидал, что многое будет мне непонятно. Но имея некоторый опыть написания плагинов для Emacs и небольшой опыт в самом Hare, я имел представление с какой стороны подойти. Также я нашёл просто прекрасную статью[^3], в которой очень базово, но понятно объясняется что и как нужно делать. Я немного переработал лексер из самого Hare, написал небольшой READ, подкрутил EVAL. И не успел я моргнуть, как мой интерпретатор начал принимать тестовый код вычисления чисел Фибоначчи на интерпритацию!
(define (fib n) (if (= n 2) 1 (if (= n 1) 1 (+ (fib (- n 1)) (fib (- n 2))))))
После этого запилил сам REPL и вот им уже можно пользоваться!
$ ./mice mice-repl v0.0.0 λ => (define x 12) 12 λ => (+ x 25) 37 λ => (define y (+ x 25)) 37 λ => (exit) Bye!
Конечно, ещё много работы впереди, но я смогу с этим справиться. Изначально я думал, что буду добавлять по одному примитиву в неделю. Но реализовывать Scheme на Hare оказалось так легко, что за короткое время я смог добавить почти все самые базовые примитивы. Думаю некоторые сложности у меня будут со сборщиком мусора. Что-то мне подсказывает, что до меня на Hare этого никто не делал. Остаётся только читать документацию и примеры кода на старом добром C. Благо возможности у Hare и C сопоставимые.
Неожиданным бонусом я получил очередной кусочек собираемого мной пазла "понимание технологий". Теперь я могу с уверенностью сказать, что не просто понимаю как именно машины обрабатывают команды и выполняют описанные в них операции, но и реализовал такую машину, хоть на очень базовом уровне и не в железе. Но кто знает, возможно и до стэковой машини на ПЛИС доберусь когда-нибудь.
А пока пожелайте мне удачи, т.к. на этот интерпретатор у меня ну уж очень большие планы.
Продолжение следует...
=> [1] mice | [2] Harelang | [3] Implement Scheme
=> Codeberg | e-mail | Fediverse | GitHub | IRC | nostr
© 2024 POLYSERV BY MODERN HOME
text/gemini
This content has been proxied by September (3851b).