NEPLg2 Standard Library - io - io
Web Playground
Web Playground

io

stdio / fs などの入出力にゅうしゅつりょく系統けいとうを category target の enum でたばねる facade

目的もくてき

  • read target / write target data共通きょうつう入口いりぐちstd facade がわき、stdio / fs / 将来しょうらいnetwork / eventおなかたちあつかえる土台どだいつくります。
  • streamio個別こべつ stream handle を対象たいしょうにするのにたいし、こちらは入出力にゅうしゅつりょく系統けいとうそのものを enum target でえらぶ facade とします。
  • ReadStream / WriteStreamけ、めない target やけない target を compile error ではじけるようにします。

注意ちゅうい

  • 現在げんざいstdiofs と 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:
            1

TargetWritable

category target へめるあたい能力のうりょく

TargetReadable

category target からせるあたい能力のうりょく

read

category target から byte れつむ facade

目的もくてき

  • read ReadStream::Stdioread ReadStream::Fs "a.txt" のように、媒体ばいたい種類しゅるいではなく target enum 中心ちゅうしんめるようにします。

実装じっそう

  • stdio内部ないぶStdinStream / StdoutStream直接ちょくせつ使つかい、category facade がわへ low-level handle をらしません。
  • fsfs_read_to_bytesび、error は StdErrorKind::IoError正規化せいきかします。
  • ReadStream::TextstrByteBuf複製ふくせいしてかえします。

注意ちゅうい

  • file read の詳細しょうさい errno は保持ほじしません。
  • 型引数かたひきすうまたはがわ型注釈かたちゅうしゃくかえかためます。

計算量けいさんりょう

  • かく backend に依存いそんします。

read

category target から byte れつや text をむ facade

write

category target へ byte れつや text をく facade

目的もくてき

  • write WriteStream::Stdio datadata |> write WriteStream::Stdio を 1 write集約しゅうやくし、公開面に型 suffix をのこしません。

write

pipe 終端しゅうたんから category target へ byte れつや text をく overload

writeln

category target へ text と つづけてく facade

writeln

pipe 終端しゅうたんから category target へ text と つづけてく overload

flush

category target の保留中ほりゅうちゅう出力しゅつりょく反映はんえいする

目的もくてき

  • flush WriteStream::Stdio / WriteStream::Stdio |> flush で category target 単位たんいの flush をあつかいます。

実装じっそう

  • 現在げんざいWriteStream::StdioStdoutStream の flush に委譲いじょうします。

close

category target をじる

目的もくてき

  • close WriteStream::Stdio のように facade がわから終了しゅうりょうそろえます。

注意ちゅうい

  • 現在げんざいstdout close は no-op です。