В чем разница между Cabal и Stack?
вчера я узнал о новом инструменте Haskell под названием стек. На первый взгляд кажется, что он выполняет ту же работу, что и Кабал. Так в чем же разница между ними? Является ли стек заменой для Кабала? В каких случаях я должен использовать Stack вместо Cabal? Что может стек сделать, что Кабал не может?
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, он просто предоставляет другой интерфейс для управления этим материалом. (Я думаю!)