← На главную

OCamlPro выпустила руководство по dune для OCaml

04.06.2026 17:52 · hackernews

Новый материал из блога OCamlPro — практическое руководство по системе сборки dune для новичков в экосистеме OCaml. Всё строится на игрушечном проекте helloer.

В основе любого dune-проекта лежит файл dune-project. Он содержит метаданные: версию dune, название пакета, настройки для автоматической генерации opam-файлов. Первая строка всегда должна быть (lang dune X.Y) без лишних пробелов.

Сам dune-файл — это спецификация сборки для конкретной директории. В нём описываются стазны — блоки конфигурации. Их три основных типа. (library) собирает модули в переиспользуемую библиотеку. В примере это helloer_lib из файла helloer_lib.ml. (executable) создаёт исполняемый бинарник. Он указывает имя (helloer), публичное имя (public_name helloer) и зависимости — внешние (cmdliner для парсинга CLI) и внутренние (helloer_lib). (test) регистрирует тестовую цель в правиле runtest. В проекте используется библиотека alcotest.

После настройки структуры сборка запускается командой dune build @all. Алиас @all собирает все цели: библиотеки, исполняемые файлы, тесты. Всё кладётся в директорию _build.

Чтобы запустить бинарник, используется dune exec -- ./helloer.exe. Двойной дефис отделяет опции dune от аргументов самой программы. Для генерации документации из аннотированных комментариев OCaml служит dune build @doc. Он использует odoc и создаёт HTML-файлы в _build/default/_doc/_html/.

Тестирование поддерживает два подхода. Первый — обычные тесты с alcotest. Второй — cram-тесты: файлы с расширением .t, содержащие shell-сессии и ожидаемый вывод. dune runtest прогоняет все тесты. Если вывод не совпадает, dune promote заменяет ожидаемый результат на актуальный.

Когда базовая рутина освоена, на помощь приходит dune init. Эта команда автоматически создаёт скелет проекта: директории bin/, lib/, test/ с готовыми файлами dune и исходниками. Для библиотеки используется dune init lib helloer, для приложения — dune init exec helloer. Такой подход экономит время, но авторы статьи подчёркивают: сначала важно понять устройство вручную, чтобы знать, что именно генерирует dune init.

OCamlPro — R&D-лаборатория, основанная в 2011 году. Она помогает промышленным заказчикам работать с современными языками (Rust, Wasm, OCaml) и легаси (COBOL). Среди проектов — пакетный менеджер opam, учебная платформа LearnOCaml, оптимизирующий компилятор Flambda и SMT-решатель Alt-Ergo.

Читать оригинал →