tweag/rules_haskell v0.14 がリリースされました
前バージョンの v0.13 が 2020年9月なので、1年以上ぶりのリリースです。もうリリースされないのかと思ってました。
ハイライト
せっかくなので、ハイライトだけでも紹介します。
- 標準のサポートをBazel4系に移行
- 新しく GHC 9.0, 9.2 をサポート
- クロスコンパイルをサポート
- Asterius をサポート(Experimental)
-
haskell_module
ルールを追加(Experimental)
標準のサポートをBazel4系に移行
要求する Bazel のバージョンを 4.0.0 以上にしたようです:
GHC 9.0, 9.2 をサポート
v0.13 以降にリリースされていた GHC のバージョンが対応されました。全ての Bazel ルールや、全てのパッケージが動作するかは分かりませんが、いちおう base パッケージだけならビルド可能なことを以下のリポジトリで確認してあります:
クロスコンパイルをサポート
Bazel は、Bazel 生成物(バイナリなど)を実行する OS やアーキテクチャを指定してビルドすることができます。つまり、クロスコンパイルのインターフェースを提供をしているのです。例えば、rules_go ではオプションひとつでクロスコンパイルが可能です(これ自体は Go の力ですが)。
Haskell のクロスコンパイル事情については詳しくないですが、少なくとも Go のような自由度はないはずです。そのためか、rules_haskell でもクロスコンパイルはなかったのですが、実現に向けて色々やってみてるそうです:
そして、ファーストステップとして ARM Linux だけ実現したようです:
あまりわかっていませんが、LLVM と Nix を駆使して行っている様子です。
Asterius をサポート
Asterius というのは、Haskell コードから WebAssembly へコンパイルするための処理系の一つで、rules_haskell 同様 Tweag が作っています。比較的最近の日本語記事だと以下のがありました(僕は WebAssembly 詳しくないので。。。):
で、まだ Experimental ですが、なんとこの Asterius のルールも追加されたみたいです:
余談ですが、Asterius 自体のビルドシステムを Bazel にするという案もあるようです:
haskell_module
ルールを追加
まだ Experimental ですが、モジュール単位で Bazel 生成物を定義するためのルールっぽいです。haskell_library
ルールだと、一つのモジュールが変わるだけで全部ビルドし直してしまいます。そこで、haskell_module
ルールを使ってモジュール単位で厳密に依存関係を管理することで、キャッシュをうまく機能できるようにしたいみたいです。確かに、その方が理想的ですが、記述するの大変そう。。。
おしまい
めでたい。
Discussion