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

Установка и REPL: разговор вместо чтения

junior~25 мин

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

Установка и REPL: разговор вместо чтения

Ставим Janet, jpm и spork, а дальше заводим главную привычку раздела: не читать про язык, а спрашивать его. REPL в Janet отвечает быстрее, чем поиск по документации.

Представь: ты хочешь узнать, как в Janet разрезать строку по разделителю. Привычный маршрут: браузер, поиск по сайту, три вкладки документации. Маршрут этого раздела: набрать в терминале (doc string/split) и получить ответ за две секунды, не отрывая рук от клавиатуры. Всё, что ниже про установку, это подготовка к такому способу работать.

Установка

# macOS
brew install janet

# Arch Linux
sudo pacman -S janet

# Из исходников, работает везде, где есть компилятор C
git clone https://github.com/janet-lang/janet.git
cd janet && make && sudo make install

Проверяем:

janet -v
1.41.2-homebrew

Вместе с Janet обычно приезжает jpm, Janet Project Manager. Он собирает проекты, запускает тесты и ставит зависимости. Если jpm не нашёлся, ставим отдельно:

git clone https://github.com/janet-lang/jpm.git
cd jpm && sudo janet bootstrap.janet

Дальше понадобится spork, официальный набор дополнительных библиотек. Там лежит модуль для тестов, разбор аргументов командной строки (модуль argparse) и много другого:

jpm install spork

Установка без прав root. jpm умеет держать зависимости в подкаталоге проекта, а не в системе. Флаг -l (он же --local) кладёт всё в ./jpm_tree:

jpm -l install spork

Так удобнее, когда разным проектам нужны разные версии библиотек. Полностью с jpm разберёмся в уроке про jpm и пакеты.

REPL

Запуск без аргументов открывает интерактивную сессию:

janet
Janet 1.41.2-homebrew  Copyright (C) 2017-2026 Calvin Rose
janet:1:> (+ 1 2)
3
janet:2:>

janet:1:> это приглашение с номером ввода. Ты пишешь выражение, Janet его вычисляет и печатает результат. Всё.

Попробуй прямо здесь, не выходя из урока:

Выше была подборка готовых примеров. А ниже уже не симуляция: настоящий интерпретатор Janet 1.41.2, собранный в WebAssembly, работает прямо у тебя в браузере. Пиши что угодно: определения сохраняются между строками, как в настоящей сессии.

Три команды, которые окупятся сразу

(doc имя) показывает документацию по функции или макросу. Она вшита в сам образ языка, поэтому работает без интернета:

janet:1:> (doc string/split)

    function
    src/core/string.c on line 458, column 1

    (string/split delim str &opt start limit)

    Splits a string str into an array of substrings...

(doc) без аргументов печатает список всех доступных имён. Пригодится, когда помнишь, что функция где-то есть, но забыл название.

Tab дополняет имена. Набери string/ и нажми Tab, увидишь все функции работы со строками. Это самый быстрый способ исследовать стандартную библиотеку: не гуглить, а листать.

Выйти из REPL можно двумя способами: Ctrl-D или (os/exit).

REPL печатает не то же, что print

Разница существенная, и на ней спотыкаются в первый день.

janet:1:> "привет"
"привет"
janet:2:> (print "привет")
привет
nil

REPL показывает представление значения: строки в кавычках, изменяемые структуры со знаком @. Функция print выводит текст как есть. Второй nil во втором примере это возвращаемое значение самой print, а не часть вывода.

Запомни знак @. Он помечает изменяемый вариант типа и встретится буквально в каждом уроке дальше.

Рабочий цикл

Основной режим разработки на Janet это короткая петля из трёх шагов:

  1. Правишь hello.janet в редакторе.
  2. Запускаешь janet -r hello.janet: флаг -r выполняет файл, а затем открывает REPL прямо в его окружении, так что все определения из файла доступны для экспериментов.
  3. Дёргаешь функции руками в приглашении. Нашёл баг: Ctrl-D и назад к шагу 1.
janet -r hello.janet

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

Правило на весь раздел. Каждое утверждение урока проверяй в REPL сам. Если написано, что (truthy? 0) возвращает true, набери и убедись. Знание, полученное руками, держится дольше прочитанного.

Что запомнить

  • janet -v проверяет установку, jpm собирает проекты, spork даёт тесты и argparse.
  • jpm -l install держит зависимости в каталоге проекта, а не в системе.
  • (doc имя) это встроенная документация, (doc) список всех имён, Tab дополняет.
  • REPL печатает представление значения, print печатает текст и возвращает nil.
  • Знак @ перед литералом означает изменяемый вариант типа.
  • janet -r файл выполняет файл и оставляет тебя в REPL с его определениями.

Упражнения

Дальше

Следующий урок закрывает синтаксис целиком: числа, строки и буферы, ключевые слова и символы, а главное, четыре коллекции, которые идут двумя парами изменяемое плюс неизменяемое. Держи REPL открытым.

домашка

Домашка