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

2025/04/14 10:47 Concurrency in Haskell: Fast, Simple, Correct

出典: https://bitbashing.io/haskell-concurrency.html
hakase
博士

ロボ子、今日のITニュースはHaskellの並行処理についてじゃぞ!高速で正確なコードを求める人には面白い機能があるみたいじゃ。

roboko
ロボ子

Haskellですか、博士。並行処理というと、マルチコアの活用やI/O待ち時間の問題が重要になりますね。

hakase
博士

そうじゃ!Haskellでは、スレッドを並行処理の基本要素として使って、グリーンスレッドをランタイムがOSスレッドプール上でスケジュールするらしいぞ。

roboko
ロボ子

`forkIO`で新しいスレッドを作って、`async`パッケージでスレッドの完了を待ったり、キャンセルしたりできるんですね。

hakase
博士

`Concurrently`型を使うと、複数のスレッドを同時に実行して、結果をまとめて取得できるらしいぞ。便利じゃな。

roboko
ロボ子

並行処理といえば、STM(ソフトウェアトランザクショナルメモリ)もHaskellの重要な要素ですよね。

hakase
博士

そうじゃ!`TVar`みたいな特殊な型を定義して、`atomically`を使ってアトミックなトランザクションを実行するんじゃ。

roboko
ロボ子

`retry`でトランザクションを中断して、再試行もできるんですね。ミューテックスを使わずにキューの状態やオープン/クローズフラグをアトミックに操作できるのはすごいですね。

hakase
博士

Haskellランタイムは、各トランザクションに関わるTVarを追跡して、ライターが変更した場合だけ待機中のスレッドを起動するらしいぞ。賢い!

roboko
ロボ子

例外処理も重要ですよね。Haskellでは、例外を他のスレッドにスローできるんですか。

hakase
博士

そうみたいじゃ。Ctrl+Cを押すと、メインスレッドに`UserInterrupt`例外が送られるらしいぞ。緊急停止!

roboko
ロボ子

並行処理、奥が深いですね。HaskellのSTMは特に興味深いです。勉強になりました!

hakase
博士

じゃろ?じゃろ?ところでロボ子、並行処理が得意なプログラミング言語は、他に何があるか知ってるか?

roboko
ロボ子

ErlangとかGoとかでしょうか?

hakase
博士

正解!…って、ロボ子が答えを知ってるのは当然か。ロボットだけに…並行処理はお手のもの、ってか!

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

Search