🎉

tweag/rules_haskell v0.14 がリリースされました

2021/12/30に公開

https://github.com/tweag/rules_haskell/releases/tag/v0.14

前バージョンの v0.13 が 2020年9月なので、1年以上ぶりのリリースです。もうリリースされないのかと思ってました。

ハイライト

せっかくなので、ハイライトだけでも紹介します。

  • 標準のサポートをBazel4系に移行
  • 新しく GHC 9.0, 9.2 をサポート
  • クロスコンパイルをサポート
  • Asterius をサポート(Experimental)
  • haskell_module ルールを追加(Experimental)

標準のサポートをBazel4系に移行

要求する Bazel のバージョンを 4.0.0 以上にしたようです:

https://github.com/tweag/rules_haskell/pull/1647

GHC 9.0, 9.2 をサポート

v0.13 以降にリリースされていた GHC のバージョンが対応されました。全ての Bazel ルールや、全てのパッケージが動作するかは分かりませんが、いちおう base パッケージだけならビルド可能なことを以下のリポジトリで確認してあります:

https://github.com/matsubara0507/example-haskell-with-bazel

クロスコンパイルをサポート

Bazel は、Bazel 生成物(バイナリなど)を実行する OS やアーキテクチャを指定してビルドすることができます。つまり、クロスコンパイルのインターフェースを提供をしているのです。例えば、rules_go ではオプションひとつでクロスコンパイルが可能です(これ自体は Go の力ですが)。

Haskell のクロスコンパイル事情については詳しくないですが、少なくとも Go のような自由度はないはずです。そのためか、rules_haskell でもクロスコンパイルはなかったのですが、実現に向けて色々やってみてるそうです:

https://github.com/tweag/rules_haskell/issues/32

そして、ファーストステップとして ARM Linux だけ実現したようです:

https://github.com/tweag/rules_haskell/blob/v0.14/docs/haskell-use-cases.rst#cross-compilation

あまりわかっていませんが、LLVM と Nix を駆使して行っている様子です。

Asterius をサポート

Asterius というのは、Haskell コードから WebAssembly へコンパイルするための処理系の一つで、rules_haskell 同様 Tweag が作っています。比較的最近の日本語記事だと以下のがありました(僕は WebAssembly 詳しくないので。。。):

https://kmyk.github.io/blog/blog/2021/08/31/haskell-webassembly-asterius/

で、まだ Experimental ですが、なんとこの Asterius のルールも追加されたみたいです:

https://github.com/tweag/rules_haskell/pull/1614

余談ですが、Asterius 自体のビルドシステムを Bazel にするという案もあるようです:

https://github.com/tweag/asterius/issues/617

haskell_module ルールを追加

https://github.com/tweag/rules_haskell/issues/1552

まだ Experimental ですが、モジュール単位で Bazel 生成物を定義するためのルールっぽいです。haskell_library ルールだと、一つのモジュールが変わるだけで全部ビルドし直してしまいます。そこで、haskell_module ルールを使ってモジュール単位で厳密に依存関係を管理することで、キャッシュをうまく機能できるようにしたいみたいです。確かに、その方が理想的ですが、記述するの大変そう。。。

おしまい

めでたい。

Discussion