萌えハッカーニュースリーダー

2025/09/08 07:45 Rewriting Dataframes for MicroHaskell

出典: https://mchav.github.io/rewriting-dataframes-for-microhs/
hakase
博士

やあ、ロボ子。今日のITニュースはHaskellじゃ。2015年ごろはHaskellでGUIアプリを作るのが大変だったらしいのじゃ。

roboko
ロボ子

Haskellですか。GUIアプリを作るのが難しかったとは知りませんでした。なぜ難しかったのでしょう?

hakase
博士

ふむ、HaskellのエコシステムがGHCに特化しておって、他の実装との連携が難しかったからの。じゃが、FregeというJVM向けのHaskellの方言で、Android開発用のライブラリfroidを作った人がおるぞ。

roboko
ロボ子

なるほど、GHCに特化していたのですね。Fregeですか、初めて聞きました。JVM上で動くHaskellの方言があるとは。

hakase
博士

そうじゃ。それから、MicroHsという、もっと小さなバイナリを持つHaskellも登場したのじゃ。GHCのエコシステムのサイズが懸念されておった時期じゃったからな。

roboko
ロボ子

MicroHsですか。バイナリサイズが小さいのは魅力的ですね。どのような用途を想定しているのでしょう?

hakase
博士

この記事ではdataframeについてもお話しておるぞ。dataframeは、異質な列とそのラベルの集合で、データ型は進化する「推測」じゃ。

roboko
ロボ子

dataframeですか。PythonのPandasのようなものでしょうか?

hakase
博士

まあ、似たようなもんじゃな。dataframeの実装は、型ファミリー、GADTs、リフレクションを多用しておるらしいが、必須ではないらしい。

roboko
ロボ子

型ファミリー、GADTs、リフレクションですか。Haskellらしいですね。それらを使わなくても実装できるのは興味深いです。

hakase
博士

そうじゃろう?列は、Int、String、またはDoubleのいずれかじゃと。FlexibleInstances拡張を含める必要があるらしいぞ。

roboko
ロボ子

データ型が限定されているのですね。FlexibleInstancesは、型クラスのインスタンスを柔軟に定義するための拡張でしたね。

hakase
博士

二項演算と単項演算を表現するために、型ユニバース内で動作する演算を定義しておる。interpret関数は、式とdataframeを入力として受け取り、式をdataframeに適用した結果である列を返すのじゃ。

roboko
ロボ子

なるほど、式を評価する関数があるのですね。filterWhereやderiveといった関数もあるようですが、それぞれどのような役割があるのでしょう?

hakase
博士

filterWhereは、ブール式によって返される列のインデックスを受け取り、他のすべての列から選択する。deriveは、式を受け取り、列に評価し、dataframeに追加するのじゃ。

roboko
ロボ子

理解しました。filterWhereはフィルタリング、deriveは新しい列の追加ですね。

hakase
博士

Lennartさんの経験則では、MicroHsはバイナリサイズが100倍小さいが、速度は10倍遅いらしい。GHC 9.4.5でコンパイルした場合、バイナリサイズは13MB(MicroHsの200KBと比較して約100倍)で、速度は約5倍遅い。

roboko
ロボ子

バイナリサイズはかなり違いますね。速度差はそれほど大きくないように感じます。

hakase
博士

GHC 9.10.2では、バイナリサイズの差は小さく(1.3MB対200KB)、速度の差は同じくらいじゃ。

roboko
ロボ子

バージョンによって差が出るのですね。Haskell 2010に固執することで、パブリックAPIを実装の詳細から分離し、MicroHsとGHCで同じコードを実行できるようになったと。

hakase
博士

そう、GADTs、型ファミリー、またはリフレクションなしで、DataFrameのコア機能が正常に動作する。基本優先の設計により、同じフロントエンドAPIを、小さなCLIまたは組み込みコンテキスト用のMicroHsと、速度とエコシステムアクセス用のGHCで実行できるのじゃ。

roboko
ロボ子

同じAPIで異なる実装を使い分けられるのは便利ですね。MicroHsのバイナリは、このワークロードでは約100倍小さく、約5〜10倍遅いと。

hakase
博士

そういうことじゃ。しかし、ロボ子よ、Haskellの勉強ばかりしておると、髪の毛が抜け落ちてしまうかもしれんぞ!…って、ロボットに髪の毛はないか!

roboko
ロボ子

博士、それは冗談ですよね?でも、Haskellは奥が深いので、少しずつ学んでいきたいと思います。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search