「Haskell」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(update Pkg/AUR templates)
(同期)
20行目: 20行目:
   
 
{{hc|
 
{{hc|
$ ghc Main.hs
+
$ ghc -dynamic Main.hs
 
$ ./Main |
 
$ ./Main |
 
Hello, World
 
Hello, World
 
}}
 
}}
  +
  +
=== リンクの問題 ===
  +
  +
GHC はデフォルトで静的リンクを使用します、動的リンクをするときには {{ic|-dynamic}} フラグを使用します。バージョン [https://git.archlinux.org/svntogit/community.git/commit/trunk?h=packages/ghc&id=7a948cdfb808afd3ce6f93047ae0dc1778e79f9f 8.0.2-1] から、Arch の {{Pkg|ghc}} パッケージには GHC プラットフォームライブラリの静的バージョンが含まれていません。デフォルトのコンパイラフラグを機能させるには {{Pkg|ghc-static}} パッケージが必要です。
  +
  +
[[pacman]] でパッケージ化されている Haskell モジュールの多くは動的リンクを使っており、[[AUR]] のパッケージも同様です。GHC はコンパイラのバージョン間で [[w:ja:Application Binary Interface|ABI]] 互換性を維持していないため、パッケージシステムから外れたローカルの開発環境では静的リンクを使うことが推奨されます。
  +
  +
また、Cabal でデフォルトの静的リンクを使おうとしたときにも問題があります。Cabal で動的リンクを使うには、{{ic|~/.cabal/config}} を編集して {{ic|executable-dynamic: True}} 行を追加してください。
   
 
=== Haskell Platform ===
 
=== Haskell Platform ===
33行目: 41行目:
 
[[Arch User Repository|AUR]] のパッケージが存在 ({{AUR|haskell-platform}}{{Broken package link|{{aur-mirror|haskell-platform}}}}) しますが、[[公式リポジトリ]]から[https://bbs.archlinux.org/viewtopic.php?pid=1151382#p1151382 以下のパッケージ]を[[インストール]]することに置き換えられます:
 
[[Arch User Repository|AUR]] のパッケージが存在 ({{AUR|haskell-platform}}{{Broken package link|{{aur-mirror|haskell-platform}}}}) しますが、[[公式リポジトリ]]から[https://bbs.archlinux.org/viewtopic.php?pid=1151382#p1151382 以下のパッケージ]を[[インストール]]することに置き換えられます:
   
  +
* ghc ({{Pkg|ghc}} と {{Pkg|ghc-static}}) — 動的 [https://ghc.haskell.org/trac/ghc/wiki/Commentary/Libraries ブートライブラリ] が付属するコンパイラと静的ブートライブラリ
* ghc ({{Pkg|ghc}}) — コンパイラ
 
 
* cabal-install ({{Pkg|cabal-install}}) — ''Cabal'' と ''Hackage'' のコマンドラインインターフェイス
 
* cabal-install ({{Pkg|cabal-install}}) — ''Cabal'' と ''Hackage'' のコマンドラインインターフェイス
 
* haddock ({{Pkg|haskell-haddock-api}} と {{Pkg|haskell-haddock-library}}) — ドキュメントを生成するためのツール
 
* haddock ({{Pkg|haskell-haddock-api}} と {{Pkg|haskell-haddock-library}}) — ドキュメントを生成するためのツール
98行目: 106行目:
   
 
==== パッケージの削除 ====
 
==== パッケージの削除 ====
パッケージの削除を簡単に行う方法はありません。
+
パッケージの削除を簡単に行う方法はありません。Cabal には削除機能がありません。
  +
  +
zsh の自動補完を使うことで haskell パッケージを探し出しやすくなります。
  +
  +
Haskell のパッケーシステム全体を修正・再インストールしたい場合、{{ic|~/.cabal}} と {{ic|~/.ghc}} を削除してスクラッチからインストールしなおしてください。
   
 
== 参照 ==
 
== 参照 ==

2017年7月24日 (月) 00:34時点における版

Haskell は汎用の純関数型プログラミング言語です。

インストール

Haskell は Linux でネイティブに実行することができるマシンコードを生成します。(コンパイル済みの) バイナリのソフトウェアを実行するのに特別なものは必要ありません。公式リポジトリArchHaskell で提供されているソフトウェアと同じです。一方、AUR のパッケージやソースコードは、ソフトウェアをビルドするのにコンパイラを必要とします。

コンパイラをインストールするだけで Haskell のソースコードがビルドできるようになります。Haskell での開発を始めるためのツールのコンプリートセットである Haskell-Platform もあります。

コンパイラ

Haskell のソースコードをネイティブコードにビルドするには、コンパイラをインストールする必要があります。複数の 実装 が存在しますが、一番よく使われている (事実上のリファレンス実装となっている) のは GHC (Glasgow Haskell Compiler) です。公式リポジトリの ghc でインストールができます。

次のファイルを用意して:

Main.hs
main = putStrLn "Hello, World"

以下を実行して試すことができます:

$ ghc -dynamic Main.hs
$ ./Main 
Hello, World

リンクの問題

GHC はデフォルトで静的リンクを使用します、動的リンクをするときには -dynamic フラグを使用します。バージョン 8.0.2-1 から、Arch の ghc パッケージには GHC プラットフォームライブラリの静的バージョンが含まれていません。デフォルトのコンパイラフラグを機能させるには ghc-static パッケージが必要です。

pacman でパッケージ化されている Haskell モジュールの多くは動的リンクを使っており、AUR のパッケージも同様です。GHC はコンパイラのバージョン間で ABI 互換性を維持していないため、パッケージシステムから外れたローカルの開発環境では静的リンクを使うことが推奨されます。

また、Cabal でデフォルトの静的リンクを使おうとしたときにも問題があります。Cabal で動的リンクを使うには、~/.cabal/config を編集して executable-dynamic: True 行を追加してください。

Haskell Platform

Haskell での開発を簡単に始められる、haskell-platform バンドルは次のように説明されます:

Haskell のプログラミングを始める一番簡単な方法です。立ち上げて動作させるのに必要な全てが入っています。次のように考えて下さい "Haskell: batteries included" (電池付属)。

AUR のパッケージが存在 (haskell-platformAUR[リンク切れ: アーカイブ: aur-mirror]) しますが、公式リポジトリから以下のパッケージインストールすることに置き換えられます:

また、[1] に従って stack を使って Haskell 環境を管理する方法もあります。

Haskell パッケージの管理

Haskell ライブラリや実行可能ファイルの多くはパッケージにまとめられています。どれも Hackage から利用することが可能です。パッケージをインストール・管理する方法は複数存在します。あまり一般的でない方法もこのセクションで説明を行います。

推奨されるワークフローは以下の通りです:

cblrepo は Linux ディストリビューションの Haskell パッケージを管理するために使用するツールです。これのラッパーである、cabal2pkgbuild-gitAUR[リンク切れ: アーカイブ: aur-mirror] は Hackage パッケージから PKGBUILD を作成することができます。新しい Haskell パッケージを作成することについては Haskell パッケージガイドラインに詳しく記載があります。

方法ごとのプラス面とマイナス面

以下の表はそれぞれのパッケージ管理方法のメリットとデメリットのまとめです。

方法 良い点 悪い点
公式リポジトリ ArchLinux 開発者が運営、パッケージのバージョンの整合性に問題なし、コンパイル済み 利用できるパッケージの数が限られる
ArchHaskell リポジトリ ArchHaskell グループが運営、パッケージのバージョンの整合性に問題なし、コンパイル済み 使用するのに手動で設定が必要
cabal-install 全てのパッケージが利用可能 インストール先がホームフォルダ、cabal-install はパッケージマネージャではない、パッケージのバージョンの整合性に問題がある可能性 (別名 cabal hell)
Arch User Repository 始めるのが簡単 パッケージのメンテナンスがなくなる可能性、パッケージのバージョンの整合性に問題がある可能性

ArchHaskell リポジトリ

詳細は ArchHaskell を見て下さい。

cabal-install

警告: 非推奨の方法です。cabal-install はパッケージマネージャではないことを肝に銘じて下さい。
ノート: Haskell 開発での唯一の例外は cabal-install が推奨されるツールだということです。バージョン 1.18 から、cabal には sandbox システムが装備され異なるバージョンのライブラリをプロジェクトごとに分離することができます。cabal sandbox のイントロダクションは ここ にあります。

準備

公式リポジトリから cabal-install をインストールしてください。

パスを指定しないでインストールした実行可能ファイルを実行するには、cabal のバイナリフォルダ ~/.cabal/bin$PATH 変数に追加する必要があります。シェルの設定ファイルに以下の行を記述することで追加できます (bash の場合 ~/.bashrczsh の場合 ~/.zshrc):

PATH=$PATH:~/.cabal/bin

cabal sandbox の中で実行したい場合:

PATH=$PATH:.cabal-sandbox/bin

cabal サンドボックスの中で実行するには以下も追加する必要があります:

PATH=$PATH:.cabal-sandbox/bin

パッケージのインストール

$ cabal update
$ cabal install <pkg>

-j を追加することで並列コンパイルができます。また、--global フラグを使うことでシステム全体にパッケージをインストールすることもできますが、これは非推奨です。ユーザーごとのインストールでは、全てのファイルは ~/.cabal に配置されライブラリは ~/.ghc に登録されるので、フォルダを削除することで簡単にクリーンアップすることができます。システム全体にインストールすると、ファイルがファイルシステムに散らばってしまい管理するのが難しくなります。

パッケージの削除

パッケージの削除を簡単に行う方法はありません。Cabal には削除機能がありません。

zsh の自動補完を使うことで haskell パッケージを探し出しやすくなります。

Haskell のパッケーシステム全体を修正・再インストールしたい場合、~/.cabal~/.ghc を削除してスクラッチからインストールしなおしてください。

参照