Система
lompi
Менеджер пакетов Loment. Он поставляется вместе с инструментарием и
не является подкомандой loment — отдельная программа,
со своей версией и своим руководством.
Библиотека — это каталог
Нет формата манифестов, который надо учить, и нет второго языка, на котором его писать. Библиотека — это каталог, полный файлов Loment, и три вещи, которые система пакетов обычно изобретает, либо уже есть в языке, либо выводятся из него, либо генерируются:
Экспорты — уже в языке
pub. Нечего нового объявлять, нечего держать в согласии с исходником.
Зависимости — строки use
Списка зависимостей нет. Решатель читает импорты, которые в исходнике уже есть, поэтому «объявлено, но не используется» и «используется, но не объявлено» — не ошибки, которые он вообще может выдать: таких состояний не существует.
Идентичность — рекурсивный хеш содержимого
Идентичность пакета вычисляется из его собственного исходника и идентичностей всего, от чего он зависит, до самого низа. Хешировать только собственные файлы пакета было бы неверно: один и тот же исходник, связанный с разными зависимостями, — это разные вещи, и их по ошибке слили бы вместе.
Последнее и убирает целую категорию сложности. Нет языка диапазонов версий, нет решателя и нет конфликта разрешения, потому что две версии библиотеки — это просто две идентичности, и они могут сосуществовать.
Файл-метка — это Loment
Пакет может нести файл .lomp. Это не манифест в обычном смысле: это
исходник Loment, в котором есть самое большее имя и версия для
сообщения, и у него нет раздела зависимостей, — потому что зависимости с самого начала
никогда не объявлялись в файле. Если его опустить, имя каталога и есть имя пакета.
Номера версий в нём — метки для людей. Машина не использует их, чтобы что-либо выбирать; хеш содержимого уже сделал это.
Почему не обычная схема
Библиотеки не могут поставляться как бинарники
Дженерики мономорфизируются под каждый экземпляр, поэтому компилятору нужно видеть исходник, чтобы решить, что генерировать. Скомпилированный блоб плюс заголовки — не вариант, — и не вариант также класс проблем, идущий в комплекте с поддержанием двух описаний одного интерфейса в согласии.
Нет службы реестра
Точки расширения — это файлы на диске. Нет центрального сервера, решающего, что означает имя.
Это не часть loment
lompi устанавливается рядом с инструментарием и находится в вашем
PATH, но держится вне командной поверхности — loment help
его не перечисляет, и loment никогда не передаёт ему управление. Это
разделение нарочно и обеспечивается принудительно.
Что он принимает сегодня. Библиотеки-исходники Loment. До настоящих
библиотек C можно дотянуться через choose hosted — вы называете библиотеку
в сборке, — но они пока не устанавливаемая зависимость. Установка чужих
библиотек — то, для чего предназначен следующий выпуск менеджера пакетов.