ZigのIo.Threadedが実現する「ブロッキングAPIで確実にキャンセル可能」という巧妙な仕組み

Zig's Io.Threaded Is Neat

Zigの新しいIoインターフェースの実装の一つであるstd.Io.Threadedは、標準OSスレッドとブロッキングシステムコールを使いながら、信頼性の高いキャンセルを可能にする。POSIXではシグナルと共有メモリのフラグを組み合わせてEINTRを活用し、WindowsではNtCancelSynchronousIoFileを使用する。この設計は、Javaのスレッド割り込みやpthread_cancelの欠点を克服し、言語レベルでエラーとしてキャンセルを扱う。また、Ioインターフェースは「並行実行」と「並列実行」を明確に分離し、より正確なシグネチャを提供する。

キャンセルはエラーではない。なぜなら、それは偶然の成功だからではなく、逆に、エラーとはキャンセルにペイロードが付いたものだからだ。
  1. _old_dude_

    私の低レベルな経験はすべてWindowsの世界で、async/cancelは少なくともNTカーネルの時代からサポートされていました。これを何らかの抽象化レベルで一貫してラッピングすることは常に価値がありましたが、スレッドはその1つの方法に過ぎません。オーバーラップI/Oを使えば、1つのスレッドで全てを行うことができました。Linuxはより難しいようです。Zigがこれをより「第一級市民」としてサポートしているのは素晴らしいことです。必須ではありませんが、有用に見えます。

  2. lll-o-lll

    ああ、これは早く終わりすぎる。もっと読みたい!

  3. two_handfuls

    構文は本当に重要ではないことは分かっていますが、Zigの構文はちょっと劣っていると思います。非常に冗長で、既存の言語から奇妙に選ばれています。Zigのコードは、ノイズが多く、他の言語には存在しない奇妙なものがあるため、通常読みにくいです。

この日のほかの記事

2026-08-22