tgoop.com/logofalprog/183
Last Update:
Комментарии по ку-ку
#kuku
Пришло время немного рассказать об успехах по разработке моего скриптового языка.
Я не ищу лёгких путей и мне нафиг не сдался язык без поддержки в IDE рефакторинга и дебагера, поэтому kuku изначально пишется с поддержкой Language Server Protocol. Как минимум я хочу поддержку куку в VS Code, и, скорее всего, в Vim или Neovim. Ну а потенциально во всех более-менее толковых IDE.
Не знаю, удастся ли запихать language server в браузер, но вы можете рассчитывать, что playground языка будет доступен онлайн по крайней мере с простой подсветкой синтаксиса и возможностью запустить код (хвала emscripten’у!), а также посмотреть его байт-код.
Ну так вот: по задумке kuku.exe должно будет уметь выполнять одновременно функции и парсера-компилятора, и language-сервера, и interactive mode, и декомпилятора с дебагером и всего на свете, в общем-то. И чтобы не делать одну и ту же работу дважды, парсер пишется сразу с оглядкой на LSP. В частности, например, это означает, что внутренне документы всегда представлены массивом строк, а строки соответственно последовательностью UTF-16 code unit’ов без символов конца строки. Таким образом всё позиционирование (даже у лексера) и обновление документов происходит только в этих координатах.
Я, конечно, полистал немного книгу дракона и “crafting interpretors”, но больше всего мне понравилась фраза из последней: “parsing doesn’t matter”. Действительно, можно долго зарубаться на тему математической красоты LL(1) и LR и прочих аббревиатур, но они лишь усложняют жизнь. Куку достаточно простой язык, чтобы осилить его разбор рекурсивным спуском. И даже при разборе выражений я собираюсь вручную резолвить приоритет операторов вместо того, чтобы заморачиваться с грамматиками. Чем ближе структуры AST будут отражать концепты языка, тем лучше в моём случае. В конце концов, мне ещё семантический разбор и рефакторинг поверх этого писать. А вот где действительно имеет смысл угореть по Computer Science, так это в генерации кода и оптимизациях. Но до этого пока далеко.
Ещё, кстати, появились мысли о том, как конкретно я хочу имплементировать пункт 4.2 моих design goals. Речь идёт о транзакционной памяти, но до этого совсем-совсем далеко.
Ну а пока зацените как сделаны комментарии в куку, например: https://alprog.github.io/kuku/comments.html
BY Log of Alprog
Share with your friend now:
tgoop.com/logofalprog/183