io
stdio / fs などの
目的
read target/write target dataの共通 入口 をstdfacade側 に置 き、stdio/fs/将来 のnetwork/eventを同 じ形 で扱 える土台 を作 ります。streamioが個別 stream handle を対象 にするのに対 し、こちらは入出力 系統 そのものを enum target で選 ぶ facade とします。ReadStream/WriteStreamを分 け、読 めない target や書 けない target を compile error で弾 けるようにします。
注意
現在 はstdioとfsと in-memory text の最小 構成だけを実装 しています。network/eventは将来 の variant追加 を想定 した設計 です。- file read
失敗 の詳細 errno は現状 StdErrorKind::IoErrorへ丸 めます。 ReadStream::Text "..."を使 うと、文字列リテラルや in-memory text を stdin / fs と同 じ read target面 で扱 えます。- raw binary は
ReadStream::Bytes bytesで渡 します。型付 き binary(u8/u32など)は暗黙 再解釈せず、明示的 に byte buffer へ符号化 してから渡 す方針 です。
計算量
各 category backend の実装 に依存 します。
TEST
#entry main
#target std
#import "std/io" as *
#import "core/result" as *
fn main <()*>i32> ():
match write WriteStream::Stdio "io facade\n":
Result::Ok out:
match flush out:
Result::Ok _:
0
Result::Err _e:
1
Result::Err _e:
1TargetWritable
category target へ
TargetReadable
category target から
read
category target から byte
目的
read ReadStream::Stdioやread ReadStream::Fs "a.txt"のように、媒体 の種類 ではなく target enum中心 で読 めるようにします。
実装
stdioは内部 でStdinStream/StdoutStreamを直接 使 い、category facade側 へ low-level handle を漏 らしません。fsはfs_read_to_bytesを呼 び、error はStdErrorKind::IoErrorへ正規化 します。ReadStream::TextはstrをByteBufへ複製 して返 します。
注意
- file read の
詳細 errno は保持 しません。 型引数 または受 け側 の型注釈 で返 す型 を決 めます。
計算量
各 backend に依存 します。
read
category target から byte
write
category target へ byte
目的
write WriteStream::Stdio dataとdata |> write WriteStream::Stdioを 1個 のwriteへ集約 し、公開面に型 suffix を残 しません。
write
pipe
writeln
category target へ text と
を
writeln
pipe
を
flush
category target の
目的
flush WriteStream::Stdio/WriteStream::Stdio |> flushで category target単位 の flush を扱 います。
実装
現在 のWriteStream::StdioはStdoutStreamの flush に委譲 します。
close
category target を
目的
close WriteStream::Stdioのように facade側 から終了 を揃 えます。
注意
現在 のstdoutclose は no-op です。