Установка и REPL: разговор вместо чтения
открытый урокЭтот раздел читается без входа. Войди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти
Установка и 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 это короткая петля из трёх шагов:
- Правишь
hello.janetв редакторе. - Запускаешь
janet -r hello.janet: флаг-rвыполняет файл, а затем открывает REPL прямо в его окружении, так что все определения из файла доступны для экспериментов. - Дёргаешь функции руками в приглашении. Нашёл баг:
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 открытым.
домашка