Назад

Чому Janet? Есей про маленький діалект Ліспа
SiTech AI Team2 хв читання

Чому Janet? Есей про маленький діалект Ліспа

Програміст Ієн Генрі пояснює, чому маленький діалект Ліспа Janet став його основною мовою для хобі-проєктів: ядро з восьми інструкцій, вбудовуване середовище на C і самостійні бінарники.

У есеї на своєму блозі програміст Ієн Генрі пояснює, чому маленький діалект Ліспа Janet уже кілька років є його основною мовою для хобі-проєктів. Мова йому сподобалася настільки, що він написав про неї цілу книжку — «Janet for Mortals» — і безкоштовно опублікував її онлайн.

Маленька мова, яку можна вивчити за вечір

Janet — імперативна мова з функціями як значеннями першого класу, єдиним простором імен для ідентифікаторів і лексичним блоковим скоупом. Її ядро — лише вісім інструкцій: do, def, var, set, if, while, break і fn, а макроси дають конструкції вищого рівня. Генрі описує семантику виконання як знайому: «уявіть JavaScript плюс типи-значення мінус усі дивацтва». Уся стандартна бібліотека вміщується на одній сторінці.

Від байткоду до самостійних бінарників

Janet компілює себе в байткод, записує його у C-файл, який також запускає середовище виконання Janet, а потім компілює цей файл системним C-компілятором. Результат — програми постачаються як нативні виконувані файли, і нічого не треба встановлювати. Бінарник hello world важить менше мегабайта — 784K для Janet 1.27.0 на aarch64 macOS — разом із середовищем виконання, збирачем сміття і компілятором байткоду, тож програми можуть виконувати код Janet у час роботи. Середовище — невелика C-бібліотека, яку легко вбудувати, навіть у вебсайти.

PEG, шел-скрипти та колекції

Замість регулярних виразів обробка тексту в Janet побудована на граматиках розбору виразів (PEG), які Генрі називає простішими, потужнішими й передбачуванішими: вони розбирають HTML, JSON і бінарні формати з нульовими байтами. Стороння бібліотека sh додає DSL для шел-скриптів із конвеєрами й перенаправленнями. Колекції бувають змінювані та незмінювані: незмінювані мають семантику значень, а змінювані, як-от хеш-таблиці, порівнюються за ідентичністю.

Макроси та значення часу компіляції

Написання макросів — те, що Генрі радить найбільше, і, за його словами, негігієнічні макроси Janet усе одно можуть бути референційно прозорими, бо літеральні функції можна розквартувати (unquote). Janet також дозволяє переносити значення з часу компіляції в час виконання: компіляція запускає код верхнього рівня, а потім записує на диск повний знімок стану програми, зберігаючи спільні посилання, генератори й замикання. У книжці показано, як цим згенерувати прив'язки до бази даних із SQL-схеми.

Поділитися цифровим досвідом

SiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.