Подтвердить что ты не робот

Почему Кабал не сделал полного менеджера пакетов?

(Прежде чем я начну: я собираюсь использовать Cabal для всего, у кого есть Cabal, и имеет какое-то отношение к Haskell.)

У вас был обычный "вам нужно обновить X для установки Y, но на днях это снова вызовет проблему зависимости Z", я подумал, что просто спрошу: почему Cabal не был предназначен для полного менеджера пакетов, особенно со следующими функциями:

  • Версии: установите несколько версий пакета рядом друг с другом, дайте пакетам выбрать нужные зависимости. Если версия пакета не указана, используйте последнюю доступную версию.
  • Обновить - или лучше, также установите последнюю версию.
  • Удалить
  • Проверка целостности пакета

Вы видите, куда идет этот список. Прямо сейчас, для меня Cabal чувствует себя как-то сложная система сборки (попробуйте выяснить, какая версия Base для вашего пакета требуется, когда вы хотите начать использовать его в первый раз), который поставляется с установщиком пакетного пакета.

Итак, вопрос снова: Почему Кабал не создал полнофункциональную систему сборки/пакета? Я уверен, что было какое-то дизайнерское решение, которое привело к текущему состоянию.

(Этот вопрос несколько вдохновил набросок на Reddit, но вопреки этому парню не значит никого обижать вышеприведенным. ): -)

4b9b3361

Ответ 1

Установка нескольких версий одного и того же пакета отлично работает прямо сейчас (попробуйте cabal install ansi-terminal-0.5.4 && cabal install ansi-terminal-0.5.5), но установка нескольких экземпляров одной и той же версии пакета не выполняется. Это то, что мы очень хотели бы поддержать, так как это позволило бы нам внедрить герметичные сборки и решить проблему "аддитивного ада" но это не совсем тривиально. В этом году был проект GSoC, чтобы добавить поддержку нескольких экземпляров в ghc-pkg и Cabal, но патчи еще не находятся в магистрали. Здесь видео HIW 2012 рассказывает о результатах проекта и здесь описание внутреннего дизайна.

Что касается других ваших вопросов, то фактически использовалась команда cabal upgrade для установки последних версий всех установленных в настоящий момент пакетов, но она была удалена, так как она могла нарушить вашу установку (опять же, имея поддержку нескольких экземпляров такая же версия пакета исправит это). В настоящее время поддержка удаления включена в список пожеланий, просто, что никто еще не успел ее реализовать. Я предполагаю, что то же самое касается пакетов с цифровой подписью и HTTPS.

Кроме того, если вам интересно увидеть некоторые из реализованных функций, патчи к Cabal всегда приветствуются и с переходом на GitHub стало легче, чем когда-либо, вносить код (внесение наличных денег также хорошо, если вы можете себе это позволить - я думаю, Well-Typed будет очень рад поговорить с вами об этом).

Обновление (сентябрь 2016 г.): для обновления текущего состояния дел см. этот пост от Edward Z. Yang: cabal new-build - это менеджер пакетов.