Почему некоторые стандартные библиотеки ocaml содержат пакеты opam, а некоторые нет?

Я вижу base-unix пакет в репозитории OCaml. Он описывается как "библиотека Unix, распространяемая вместе с компилятором OCaml". Некоторые другие библиотеки, которые также распространяются вместе с компилятором OCaml, не имеют своего собственного пакета. Например, нет такой вещи, как base-str пакет для str библиотека.

Почему такая разница? Насколько я вижу, они оба должны быть указаны как пакеты или библиотеки в командной строке при компиляции с ocamlfind или же ocamlbuild,

1 ответ

Решение

Библиотеки с именами пакетов OPAM base-XXX являются необязательными библиотеками: они взяты из самого компилятора OCaml, но могут устанавливаться или не устанавливаться в зависимости от компьютерной среды, ОС и флагов конфигурации компилятора. Например, наличие base-unix означает, что библиотека unix доступна в этой среде.

С другой стороны, библиотека str не зависит от системы и поэтому доступна везде, где установлен OCaml. Поэтому OPAM не нужно явно предоставлять свой базовый пакет, чтобы сообщить о существовании библиотеки.

Хотя str существует для всех установок OCaml, его связывание не является автоматическим. Вот почему ocamlfind требует пакет для этого.

Пакеты OPAM предназначены для установки командой opam. Пакеты OCamlFind предназначены для линковки. Они связаны, но разные. Заблуждение, но это то, что мы сейчас имеем в эко-системе OCaml.

Другие вопросы по тегам