В чем разница между Cabal и Stack?


вчера я узнал о новом инструменте Haskell под названием стек. На первый взгляд кажется, что он выполняет ту же работу, что и Кабал. Так в чем же разница между ними? Является ли стек заменой для Кабала? В каких случаях я должен использовать Stack вместо Cabal? Что может стек сделать, что Кабал не может?

3 61

3 ответа:

является ли стек заменой для Cabal?

да и нет.

в каких случаях я должен использовать стек вместо Cabal? Что может стек сделать, что Кабал не может?

С Stack использует кураторские пакеты stackage by по умолчанию пакеты, как известно, строить вместе. В кабале, есть шанс, что вы можете получить удар с Кабал ад. Стек также локально кэширует ваш пакет, так что вы не составляете все с нуля, когда вы используете этот пакет (или это транзитивная зависимость) в следующий раз. Обратите внимание, что также предусмотрено использование пакетов без стека, поэтому вы можете пойти, даже если пакет отсутствует в моментальном снимке стека.

лично мне нравится Stack и я бы рекомендовал всем разработчикам Haskell использовать его. Их развитие-это быстро. Они не беспокоятся (так много) о обратной совместимости. И у него есть много лучше UX. И есть вещи, которые stack какую Cabal пока не обеспечивает:

  • стек даже загружает GHC для вас и держит его в изолированном месте.
  • поддержка Докер
  • воспроизводимый сценарий Хаскелла: вы можете точно определить версию пакета и можете получить гарантию, что он всегда будет выполняться без каких-либо проблем.
  • умение делать stack build --fast --file-watch. Это будет автоматически перестраиваться при изменении локальных файлов. С помощью он вместе с --pedantic option-это сделка для меня.
  • возможность указать внешний репозиторий git как зависимость.
  • стек поддерживает создание проектов с помощью шаблоны. Он также поддерживает ваши собственные шаблоны.
  • стек имеет встроенный hpack поддержка в этом. Он предоставляет альтернативный (IMO, лучший) способ записи файлов cabal с использованием файла yaml, который более широко используется в промышленность.
  • Intero имеет гладкий опыт при работе со стеком.

есть хороший пост в блоге, объясняя разницу: почему стек не Кабал?

в дальнейшем я буду ссылаться на два сравниваемых инструмента как cabal-install и стек. В частности, я буду использовать cabal-install чтобы избежать путаницы с Кабал библиотека, которая является общей инфраструктурой, используемой обоими инструментами. Вообще говоря, мы можем сказать cabal-install и стек являются интерфейсами к Кабал, и основные различия между ними сводятся к тому, что рабочие процессы по умолчанию:

  • по умолчанию cabal-install когда вас попросят построить проект, посмотрите на зависимости, указанные в его .cabal файл и использовать решатель зависимостей, чтобы выяснить (если это возможно) набор пакетов и версий пакетов, которые удовлетворяют его. Этот набор рисуется из Hackage в целом -- все пакеты и все версии, прошлые и настоящие. После того, как возможный план сборки найден, выбранная версия зависимостей будет, по умолчанию, установлен и зарегистрирован в одной базе данных установленных пакетов где-то в ~/.cabal.

  • стек, С другой стороны, сначала посмотри

из того, что я могу почерпнуть из FAQ, кажется, что стек использует библиотеку Cabal, но не cabal.exe двоичный (более правильно известный как cabal-install). Похоже, что целью проекта является автоматическая песочница и избежание адской зависимости.

другими словами, он использует ту же структуру пакета Cabal, он просто предоставляет другой интерфейс для управления этим материалом. (Я думаю!)