NEPLg2 Standard Library - stdio
Web Playground
Web Playground

stdio: 標準入出力(WASI / LLVM)

目的:

実装(アルゴリズム):

注意(重要):

計算量:

stdio_write_bytes

ByteBuf を stdout へ

目的もくてき

  • std/streamio が binary write を str 変換へんかんなしで実行じっこうできるようにします。

関連かんれん

  • 所有権しょゆうけんうつさない byte span 出力しゅつりょくstdio_write_mem使つかいます。

実装じっそう

  • ByteBuf の pointer/length を stdio_write_memわたし、partial write を吸収きゅうしゅうしながら stdout へ出力しゅつりょくします。

注意ちゅうい

  • vector 自体じたい所有権しょゆうけん確保領域かくほりょういきがわ管理かんりします。
  • 詳細しょうさい error 報告ほうこくはまだおこないません。
  • 失敗しっぱいしても unit をかえしてります。error を利用者りようしゃかえすのは std/stdio 自体じたいの Result 同時どうじ整理せいりする予定よていです。

計算量けいさんりょう

  • み byte すうを n として O(n) です。

stdio_read_all_bytes

stdin ののこりを ByteBuf として

目的もくてき

  • std/streamioStreamScanner の binary read 入口いりぐちとして、stdin 全体ぜんたいByteBuf として保持ほじします。

実装じっそう

  • 64KiB から開始かいしして buffer を必要ひつようおうじて拡張かくちょうし、EOF まで fd_read反復はんぷくします。
  • かえあたいByteBufがわ所有しょゆうします。

注意ちゅうい

  • text helper read_all とは別経路べつけいろです。text 変換へんかんともなわないため、NUL をふくむ入力もそのまま保持ほじします。

計算量けいさんりょう

  • んだ byte すうを n として O(n) です。

print: 文字列を標準出力へ出す

目的:

  • s をそのまま stdout に書き込みます。

実装(アルゴリズム):

  • stdio_write_mem使つかい、partial write を吸収きゅうしゅうしながら stdout へします。

注意(重要):

  • エラーは無視します。

計算量:

  • O(n)

print: 使い方の最小例

目的もくてき:

  • print の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    print "sample";

read_all: 標準入力を読み込む(固定長)

目的:

  • stdin から最大 4096 バイト読み込み、文字列として返します。

実装(アルゴリズム):

  • 1 回の fd_read で読み込みます。

注意(重要):

  • 失敗時は長さ 0 を返します。
  • 入力が 4096 バイトを超える場合は切り捨てます。

計算量:

  • O(n)

read_all: 使い方の最小例

目的もくてき:

  • read_all の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    read_all ();

read_line: 1 行読み込む

目的:

  • newline か EOF まで読み込み、文字列として返します。

実装(アルゴリズム):

  • 1 バイトずつ読み取り、改行か EOF で停止します。

注意(重要):

  • 最大 1024 バイトまでです。
  • 失敗時は短い文字列になる可能性があります。

計算量:

  • O(n)

read_line: 使い方の最小例

目的もくてき:

  • read_line の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    read_line ();

println: 改行付き出力

目的:

  • s を出力し、改行を追加します。

実装(アルゴリズム):

  • print を 2 回呼びます。

注意(重要):

  • 改行は "
    " 固定です。

計算量:

  • O(n)

println: 使い方の最小例

目的もくてき:

  • println の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    println "sample";

print_i32: i32 を文字列にして出力

目的:

  • v を 10 進文字列にして出力します。

実装(アルゴリズム):

  • from_i32 相当の手順で文字列を生成し、print します。

注意(重要):

  • 負数は未対応のため "0" を出力します(暫定動作)。

計算量:

  • O(d)

print_i32: 使い方の最小例

目的もくてき:

  • print_i32 の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    print_i32 0;

println_i32: i32 を改行付きで出力

目的:

  • print_i32 の後に改行を出力します。

実装(アルゴリズム):

  • print_i32 と print("
    ") を呼びます。

注意(重要):

  • 改行は常に追加されます。

計算量:

  • O(d)

println_i32: 使い方の最小例

目的もくてき:

  • println_i32 の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    println_i32 0;

ansi_reset: 色リセットコード

目的:

  • ANSI のリセットコードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_reset: 使い方の最小例

目的もくてき:

  • ansi_reset の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_reset ();

ansi_bold: 太字コード

目的:

  • ANSI の太字コードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_bold: 使い方の最小例

目的もくてき:

  • ansi_bold の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_bold ();

ansi_underline: 下線コード

目的:

  • ANSI の下線コードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_underline: 使い方の最小例

目的もくてき:

  • ansi_underline の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_underline ();

ansi_red: 赤色コード

目的:

  • ANSI の赤色コードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_red: 使い方の最小例

目的もくてき:

  • ansi_red の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_red ();

ansi_green: 緑色コード

目的:

  • ANSI の緑色コードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_green: 使い方の最小例

目的もくてき:

  • ansi_green の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_green ();

ansi_yellow: 黄色コード

目的:

  • ANSI の黄色コードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_yellow: 使い方の最小例

目的もくてき:

  • ansi_yellow の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_yellow ();

ansi_blue: 青色コード

目的:

  • ANSI の青色コードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_blue: 使い方の最小例

目的もくてき:

  • ansi_blue の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_blue ();

ansi_magenta: マゼンタコード

目的:

  • ANSI のマゼンタコードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_magenta: 使い方の最小例

目的もくてき:

  • ansi_magenta の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_magenta ();

ansi_cyan: シアンコード

目的:

  • ANSI のシアンコードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_cyan: 使い方の最小例

目的もくてき:

  • ansi_cyan の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_cyan ();

ansi_white: 白色コード

目的:

  • ANSI の白色コードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_white: 使い方の最小例

目的もくてき:

  • ansi_white の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_white ();

ansi_gray: 灰色コード

目的:

  • ANSI の灰色コードを返します。

実装(アルゴリズム):

  • 文字列リテラルを返します。

注意(重要):

  • 端末が ANSI に対応している必要があります。

計算量:

  • O(1)

ansi_gray: 使い方の最小例

目的もくてき:

  • ansi_gray の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    ansi_gray ();

print_color: 色付きで出力する

目的:

  • color を適用して s を出力し、最後にリセットします。

実装(アルゴリズム):

  • color/s/reset の順に print します。

注意(重要):

  • color は ANSI コード文字列を想定します。

計算量:

  • O(n)

print_color: 使い方の最小例

目的もくてき:

  • print_color の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    print_color "sample" "sample";

println_color: 色付きで改行出力

目的:

  • print_color の後に改行を追加します。

実装(アルゴリズム):

  • print_color と print("
    ") を呼びます。

注意(重要):

  • 改行は常に追加されます。

計算量:

  • O(n)

println_color: 使い方の最小例

目的もくてき:

  • println_color の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    println_color "sample" "sample";

debug: デバッグ出力

目的:

  • debug ビルド時のみ出力します。

実装(アルゴリズム):

  • print を呼びます。

注意(重要):

  • release では no-op です。

計算量:

  • O(n)

debug: 使い方の最小例

目的もくてき:

  • debug の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    debug "sample";

debug_color: 色付きデバッグ出力

目的:

  • debug ビルド時のみ色付きで出力します。

実装(アルゴリズム):

  • print_color を呼びます。

注意(重要):

  • ANSI 対応端末が必要です。
  • release では no-op です。

計算量:

  • O(n)

debug_color: 使い方の最小例

目的もくてき:

  • debug_color の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    debug_color "sample" "sample";

debug: デバッグ出力(release では無効)

目的:

  • release では何もしません。

実装(アルゴリズム):

  • 空関数です。

注意(重要):

  • 文字列は使用されません。

計算量:

  • O(1)

debug: 使い方の最小例

目的もくてき:

  • debug の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    debug "sample";

debug_color: 色付きデバッグ出力(release では無効)

目的:

  • release では何もしません。

実装(アルゴリズム):

  • 空関数です。

注意(重要):

  • 文字列は使用されません。

計算量:

  • O(1)

debug_color: 使い方の最小例

目的もくてき:

  • debug_color の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    debug_color "sample" "sample";

debugln: デバッグ出力(改行付き)

目的:

  • debug ビルド時のみ改行付きで出力します。

実装(アルゴリズム):

  • println を呼びます。

注意(重要):

  • release では no-op です。

計算量:

  • O(n)

debugln: 使い方の最小例

目的もくてき:

  • debugln の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    debugln "sample";

debugln_color: 色付きデバッグ出力(改行付き)

目的:

  • debug ビルド時のみ色付きで改行出力します。

実装(アルゴリズム):

  • print_color と print("
    ") を呼びます。

注意(重要):

  • ANSI 対応端末が必要です。
  • release では no-op です。

計算量:

  • O(n)

debugln_color: 使い方の最小例

目的もくてき:

  • debugln_color の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    debugln_color "sample" "sample";

debugln: デバッグ出力(release では無効)

目的:

  • release では何もしません。

実装(アルゴリズム):

  • 空関数です。

注意(重要):

  • 文字列は使用されません。

計算量:

  • O(1)

debugln: 使い方の最小例

目的もくてき:

  • debugln の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    debugln "sample";

debugln_color: 色付きデバッグ出力(release では無効)

目的:

  • release では何もしません。

実装(アルゴリズム):

  • 空関数です。

注意(重要):

  • 文字列は使用されません。

計算量:

  • O(1)

debugln_color: 使い方の最小例

目的もくてき:

  • debugln_color の典型的な使い方を最小構成で示します。
  • 値を返す関数は結果の受け取り方も合わせて確認できます。

注意ちゅうい:

  • 例は用途が伝わる最短の呼び出しに絞っています。
  • 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
    debugln_color "sample" "sample";