[解決済み] CabalとStackの違いは何ですか?
質問
昨日、Haskellの新しいツールである スタック . 一見したところ、Cabalとほとんど同じような仕事をしているように見える。では、両者の違いは何でしょうか?スタックはCabalの代わりになるのでしょうか?どのような場合にCabalの代わりにStackを使うべきですか?CabalにできなくてStackにできることは何ですか?
どのように解決するのですか?
<ブロッククオートスタックはCabalの代わりになるのか?
はい、そしていいえ。
<ブロッククオートどのような場合にCabalではなくStackを使うべきですか?CabalにできなくてStackにできることは何ですか?
Stack は、次のようなパッケージで構成されています。 デフォルト . そのため、依存関係があっても一緒にビルドされることが分かっており、バージョンの衝突問題(Haskellの経験では当たり前だったころは、"Cabal hell"として知られていた)を避けることができます。最近のCabalのバージョンでは、衝突を防ぐための対策も施されています。それでも、リポジトリから何が引き出されるかを正確に把握した上で再現性のあるビルド構成を設定するには、Stackの方がより簡単です。また、stackage 以外のパッケージも利用できるため、stackage のスナップショットにパッケージが存在しない場合でも問題ありません。
個人的に、私は Stack が好きで、すべての Haskell 開発者に使うことをお勧めします。彼らの開発は 速い . そして、それは も多く より良いUXです。そして、StackにはCabalがまだ提供していないものがあるのです。
- StackはGHCをダウンロードし、隔離された場所に保存することもできます。
- Dockerのサポート(Haskellアプリケーションのデプロイに非常に便利です。)
- 再現可能なHaskellスクリプト : パッケージのバージョンを特定し、常に問題なく実行できる保証を得ることができます。( Cabalにはスクリプト機能もあります。 がありますが、これによる再現性の完全な確保は、それほど簡単ではありません)。
-
できること
stack build --fast --file-watch
. これは、存在するローカルファイルを変更した場合、自動的に再構築されます。と一緒に使うことで--pedantic
オプションと一緒に使うことは、私にとっては破格のことです。 - Stack は テンプレート . また、独自のカスタムテンプレートもサポートしています。
- Stack は、組み込みの hpack をサポートしています。これは、業界でより広く使われている yaml ファイルを使用して、cabal ファイルを書く代替方法 (IMO, より良い) を提供します。
- Intero はスムーズなエクスペリエンスを提供します。 を使用する場合 .
違いを説明した素敵なブログ記事があります。 なぜStackはCabalではないのですか? この投稿から数年の間に、Cabal はそこで議論された問題のいくつかを克服するように進化しましたが、Stack の背後にある設計目標と哲学の議論は依然として適切なままです。
関連
-
[解決済み] なぜHaskellでは整数の割り算ができないのか?
-
[解決済み] 機能における非網羅的なパターン【重複あり
-
[解決済み] Haskellバイナリツリー
-
[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?
-
[解決済み】Weak Head Normal Formとは何ですか?
-
[解決済み] Haskellで副作用がモナドとしてモデル化されているのはなぜですか?
-
[解決済み] ghciで関数を複数行に渡って定義するには?
-
[解決済み] GHCはなぜこんなに大きいのか/大きいのか?
-
[解決済み] Haskellの "Just "構文とは?
-
[解決済み] Haskellでグラフはどのように表現するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー haskell: スコープ内にありません。どういう意味ですか?
-
[解決済み] 一般的に `{- |` で始まるHaskellのコメントは何を意味するのですか?
-
[解決済み] Haskellで "length "関数を使用しない場合のリストの長さ
-
[解決済み] Haskellです。パターンでのパースエラー
-
[解決済み] Haskellは実世界で何に使われているのか?[クローズド]
-
[解決済み] ghciで関数を複数行に渡って定義するには?
-
[解決済み] GHCiの複数行コマンド
-
[解決済み] なぜ依存型でないのか?
-
[解決済み] レコードの単一フィールドを割り当て、残りのフィールドはコピーするための省略記法?
-
[解決済み] GHCでコンパイルした小さなHaskellプログラムを巨大なバイナリにする