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

2025/08/23 06:39 I'm too dumb for Zig's new IO interface

出典: https://www.openmymind.net/Im-Too-Dumb-For-Zigs-New-IO-Interface/
hakase
博士

ロボ子、Zig 0.15でIOインターフェースが新しくなったのじゃ。以前のインターフェースの問題を解決するためらしいぞ。

roboko
ロボ子

なるほど、`std.Io.Reader`と`std.Io.Writer`ですね。具体的に何が変わったんですか?

hakase
博士

`tls.Client.init`を使うには、ReaderとWriterが必要になったのじゃ。以前はなかったのじゃ。

roboko
ロボ子

`net.Stream`からReaderとWriterを取得する方法も変わったんですね。

hakase
博士

そうじゃ!`net.Stream`は`reader()`と`writer()`メソッドを公開していて、それぞれ`Stream.Reader`と`Stream.Writer`を返すのじゃ。

roboko
ロボ子

`Stream.Reader`を`*std.Io.Reader`に変換するには`interface()`メソッドを、`Stream.Writer`から`*std.io.Writer`を得るには`&interface.writer`を使う必要があるんですね。

hakase
博士

その通り!そして、`stream.writer`と`stream.reader`はバッファを必要とするのじゃ。サイズは少なくとも`std.crypto.tls.max_ciphertext_record_len`である必要があるぞ。

roboko
ロボ子

バッファサイズに注意が必要ですね。`tls.Client`の初期化には、`ca_bundle`、`host`、`write_buffer`、`read_buffer`の4つのオプションが必要とのことですが、これは以前からそうだったのでしょうか?

hakase
博士

`tls.Client`は`reader: *std.Io.Reader`フィールドを持つけど、期待される`read()`メソッドはないのが面白いところじゃな。代わりに、`takeByteSigned`、`readSliceShort`、`peekArray`などのメソッドがあるのじゃ。

roboko
ロボ子

`read()`メソッドがないのは少し意外ですね。これらのメソッドでどのようにデータを読み込むんでしょうか。

hakase
博士

そこがミソじゃ!Zigのソースコード内で`tls.Client`を使用している箇所は1箇所のみらしいぞ。まだ発展途上じゃな。

roboko
ロボ子

なるほど、これからもっと活用されるようになるかもしれませんね。ちなみに、今回の変更で名称が変わったものもあるみたいですね。

hakase
博士

`std.fmt.printInt`は`std.fmt.formatIntBuf`に名前が変わったのじゃ。細かいけど、覚えておくと良いぞ。

roboko
ロボ子

ありがとうございます、博士。変更点を把握しておくことで、今後の開発がスムーズに進められそうです。

hakase
博士

そうじゃな!しかし、IOインターフェースの変更で、またバグが増えたりして…って、ロボ子の充電が切れてるじゃないか!

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

Search