Экосистема и что дальше
открытый урокЭтот раздел читается без входа. Войди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти
Экосистема и что дальше
Закрывающий урок раздела. Соберём пройденное в одну картину, разложим экосистему по областям и выберем, что писать дальше.
Что мы прошли
Двадцать девять уроков назад мы начали со скобок. Оглядываясь, маршрут выглядит так.
Фундамент. Синтаксис за пару уроков и модель данных: две половины мира, изменяемая и неизменяемая. Отсюда выросли = против 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/: чат на каналах, прокси с логированием или бот для мессенджера.
Список во второй вкладке карты выше шире, но правило одно: выбери то, чем сам будешь пользоваться.
Где искать помощь
Когда упрёшься, иди по маршруту, а не по кругу:
(doc имя)в REPL. Вопрос “как зовётся функция и что принимает” решается тут, быстрее любого сайта.- Официальная документация. Вопрос “как устроена тема целиком” (PEG, файберы, модули); читается за вечер целиком. Рядом справочник API.
- Исходники Janet. Вопрос “а как это работает на самом деле”. Язык маленький, особенно полезен
src/boot/boot.janet: значительная часть стандартной библиотеки написана на самом Janet. - Обсуждения на GitHub и чат сообщества. Вопрос, на который не ответили первые три шага. Встречают доброжелательно, что для маленького сообщества скорее правило, чем исключение.
Куда идти из этого раздела
Janet хорошо стыкуется с соседними темами роадмапа.
- Если понравилась работа с грамматиками, дальше идут комбинаторы парсеров и разбор языков всерьёз.
- Если зацепили файберы, посмотри корутины и планировщики и модель акторов на BEAM в разделе Gleam.
- Если понравилась граница с C, следующий шаг это Rust: та же ниша, другой ответ на вопрос про безопасность памяти.
- Если тянет к метапрограммированию с типами, смотри Haskell.
Чекпоинт: что ты теперь умеешь руками
Не в терминах “прошёл урок”, а в терминах дела:
- написать скрипт с разбором аргументов, файлами и процессами вместо расползшегося bash;
- разобрать текстовый формат грамматикой PEG, а не регуляркой на пределе;
- собрать и установить пакет через
jpm, с тестами на краях; - позвать функцию из C-библиотеки через FFI и встроить Janet в свою программу;
- написать макрос, объяснить его раскрытие и вовремя от него отказаться.
Напоследок
Janet вряд ли станет твоим основным языком, он на это и не претендует. Но у него есть своя ниша: задачи, где важны мгновенный старт, один файл вместо дерева зависимостей и возможность встроить язык куда угодно.
И есть вещь, которую трудно оценить, пока не попробуешь: язык, который целиком помещается в голову. Стандартная библиотека обозрима, исходники читаемы, а от идеи до работающего скрипта проходит несколько минут. Это редкое ощущение, и ради него стоило разбираться со скобками.
Упражнения
Дальше по роадмапу
Раздел закрыт. Если Janet зашёл, самое время посмотреть на соседей по семейству и по нише: Gleam даёт типы и BEAM, Haskell даёт систему типов всерьёз, Rust закрывает ту же системную нишу без сборщика мусора.
домашка