Раздел 31 · Janet на практике

Экосистема и что дальше

junior~25 мин

открытый урокЭтот раздел читается без входа. Войди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Экосистема и что дальше

Закрывающий урок раздела. Соберём пройденное в одну картину, разложим экосистему по областям и выберем, что писать дальше.

Что мы прошли

Двадцать девять уроков назад мы начали со скобок. Оглядываясь, маршрут выглядит так.

Фундамент. Синтаксис за пару уроков и модель данных: две половины мира, изменяемая и неизменяемая. Отсюда выросли = против deep=, ключи словарей и пара freeze с thaw. Это литералы и значения и ссылки.

Модель исполнения и макросы. Код это данные. Парсер, окружения, раскрытие макросов, гигиена. Мы увидели, что макрос это обычное связывание с пометкой :macro, а try построен на файберах. Это код как данные, окружения и гигиена.

Инструменты. PEG вместо регулярных выражений, файберы как единый примитив для генераторов, ошибок и асинхронности, полный арсенал управления потоком. Это PEG, файберы и событийный цикл.

Организация. Модули как таблицы связываний, jpm, прототипы и полиморфизм. Это модули, jpm и таблицы.

Граница с C. FFI в одну сторону, встраивание в другую: FFI и встраивание.

Практика. Тестирование, скриптинг, макросы, которые пишут определения, и сквозной проект.

Алгопрактика. Структуры данных из четырёх кирпичей и три урока задач с собеседований: один проход и хеш-таблица, указатели, окна и префиксы, графы, кучи и динамика.

Три сквозных мотива стоит держать в голове и дальше: строка это байты, = строг к типам, почти всё это обычная таблица.

Экосистема

Начни с факта, который про большие языки невозможен: реестр пакетов Janet пролистывается целиком за десять минут, попробуй прямо сейчас. Сообщество небольшое, библиотек меньше, чем в Python, часть из них работа одного человека, и это надо принимать как данность. Но обозримость это тоже свойство, а не только недостаток: ты можешь знать всю экосистему.

Пакеты ставятся по короткому имени, если они есть в реестре:

jpm install spork

Карта ниже раскладывает реестр по областям, а вторая вкладка это расширенный список идей проектов:

Отдельно стоит Bauble, браузерная песочница для генеративной 3D-графики, написанная на Janet. Хороший пример того, на что язык способен, и приятный способ поиграть без установки.

Что писать дальше

Главный следующий шаг это собственный проект. Несколько идей с честной оценкой времени:

  • На вечер: утилита сравнения двух JSON-файлов с человекочитаемым диффом; spork/json разбирает, обход таблиц у тебя уже в руках.
  • На вечер: генератор паролей или конвертер форматов дат как установленная команда, от идеи до jpm install.
  • На выходные: просмотрщик логов с фильтрами поверх сквозного проекта: цвет, --follow в духе tail -f, конфиг.
  • На выходные: статический генератор заметок: каталог Markdown-файлов на входе, HTML на выходе, разбор через PEG.
  • На неделю: сетевой инструмент на ev/: чат на каналах, прокси с логированием или бот для мессенджера.

Список во второй вкладке карты выше шире, но правило одно: выбери то, чем сам будешь пользоваться.

Где искать помощь

Когда упрёшься, иди по маршруту, а не по кругу:

  1. (doc имя) в REPL. Вопрос “как зовётся функция и что принимает” решается тут, быстрее любого сайта.
  2. Официальная документация. Вопрос “как устроена тема целиком” (PEG, файберы, модули); читается за вечер целиком. Рядом справочник API.
  3. Исходники Janet. Вопрос “а как это работает на самом деле”. Язык маленький, особенно полезен src/boot/boot.janet: значительная часть стандартной библиотеки написана на самом Janet.
  4. Обсуждения на GitHub и чат сообщества. Вопрос, на который не ответили первые три шага. Встречают доброжелательно, что для маленького сообщества скорее правило, чем исключение.

Куда идти из этого раздела

Janet хорошо стыкуется с соседними темами роадмапа.

  • Если понравилась работа с грамматиками, дальше идут комбинаторы парсеров и разбор языков всерьёз.
  • Если зацепили файберы, посмотри корутины и планировщики и модель акторов на BEAM в разделе Gleam.
  • Если понравилась граница с C, следующий шаг это Rust: та же ниша, другой ответ на вопрос про безопасность памяти.
  • Если тянет к метапрограммированию с типами, смотри Haskell.

Чекпоинт: что ты теперь умеешь руками

Не в терминах “прошёл урок”, а в терминах дела:

  • написать скрипт с разбором аргументов, файлами и процессами вместо расползшегося bash;
  • разобрать текстовый формат грамматикой PEG, а не регуляркой на пределе;
  • собрать и установить пакет через jpm, с тестами на краях;
  • позвать функцию из C-библиотеки через FFI и встроить Janet в свою программу;
  • написать макрос, объяснить его раскрытие и вовремя от него отказаться.

Напоследок

Janet вряд ли станет твоим основным языком, он на это и не претендует. Но у него есть своя ниша: задачи, где важны мгновенный старт, один файл вместо дерева зависимостей и возможность встроить язык куда угодно.

И есть вещь, которую трудно оценить, пока не попробуешь: язык, который целиком помещается в голову. Стандартная библиотека обозрима, исходники читаемы, а от идеи до работающего скрипта проходит несколько минут. Это редкое ощущение, и ради него стоило разбираться со скобками.

Упражнения

Дальше по роадмапу

Раздел закрыт. Если Janet зашёл, самое время посмотреть на соседей по семейству и по нише: Gleam даёт типы и BEAM, Haskell даёт систему типов всерьёз, Rust закрывает ту же системную нишу без сборщика мусора.

домашка

Домашка