stdio: 標準入出力(WASI / LLVM)
目的:
print/read_lineなどの基本 I/O を target 非依存で提供します。
実装(アルゴリズム):
- wasm では WASI
fd_read/fd_writeを呼びます。 - llvm では Linux の
syscall(read/write)で互換fd_read/fd_writeを実装します。 - 文字列は [len][bytes] の形式です。
注意(重要):
- 入力は固定長バッファのため長い入力は切り捨てられます。
- 失敗時は空文字列や無視で返します(Result 化は未実装)。
計算量:
- 文字列長に比例
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/streamioやStreamScannerの 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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
read_line ();println: 改行付き出力
目的:
- s を出力し、改行を追加します。
実装(アルゴリズム):
- print を 2 回呼びます。
注意(重要):
- 改行は "
" 固定です。
計算量:
- O(n)
println: 使い方の最小例
printlnの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
println_i32 0;ansi_reset: 色リセットコード
目的:
- ANSI のリセットコードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_reset: 使い方の最小例
ansi_resetの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_reset ();ansi_bold: 太字コード
目的:
- ANSI の太字コードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_bold: 使い方の最小例
ansi_boldの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_bold ();ansi_underline: 下線コード
目的:
- ANSI の下線コードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_underline: 使い方の最小例
ansi_underlineの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_underline ();ansi_red: 赤色コード
目的:
- ANSI の赤色コードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_red: 使い方の最小例
ansi_redの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_red ();ansi_green: 緑色コード
目的:
- ANSI の緑色コードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_green: 使い方の最小例
ansi_greenの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_green ();ansi_yellow: 黄色コード
目的:
- ANSI の黄色コードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_yellow: 使い方の最小例
ansi_yellowの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_yellow ();ansi_blue: 青色コード
目的:
- ANSI の青色コードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_blue: 使い方の最小例
ansi_blueの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_blue ();ansi_magenta: マゼンタコード
目的:
- ANSI のマゼンタコードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_magenta: 使い方の最小例
ansi_magentaの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_magenta ();ansi_cyan: シアンコード
目的:
- ANSI のシアンコードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_cyan: 使い方の最小例
ansi_cyanの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_cyan ();ansi_white: 白色コード
目的:
- ANSI の白色コードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_white: 使い方の最小例
ansi_whiteの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
ansi_white ();ansi_gray: 灰色コード
目的:
- ANSI の灰色コードを返します。
実装(アルゴリズム):
- 文字列リテラルを返します。
注意(重要):
- 端末が ANSI に対応している必要があります。
計算量:
- O(1)
ansi_gray: 使い方の最小例
ansi_grayの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
println_color "sample" "sample";debug: デバッグ出力
目的:
- debug ビルド時のみ出力します。
実装(アルゴリズム):
- print を呼びます。
注意(重要):
- release では no-op です。
計算量:
- O(n)
debug: 使い方の最小例
debugの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
debug_color "sample" "sample";debug: デバッグ出力(release では無効)
目的:
- release では何もしません。
実装(アルゴリズム):
- 空関数です。
注意(重要):
- 文字列は使用されません。
計算量:
- O(1)
debug: 使い方の最小例
debugの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
debug "sample";debug_color: 色付きデバッグ出力(release では無効)
目的:
- release では何もしません。
実装(アルゴリズム):
- 空関数です。
注意(重要):
- 文字列は使用されません。
計算量:
- O(1)
debug_color: 使い方の最小例
debug_colorの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
debug_color "sample" "sample";debugln: デバッグ出力(改行付き)
目的:
- debug ビルド時のみ改行付きで出力します。
実装(アルゴリズム):
- println を呼びます。
注意(重要):
- release では no-op です。
計算量:
- O(n)
debugln: 使い方の最小例
debuglnの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#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の典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
debugln_color "sample" "sample";debugln: デバッグ出力(release では無効)
目的:
- release では何もしません。
実装(アルゴリズム):
- 空関数です。
注意(重要):
- 文字列は使用されません。
計算量:
- O(1)
debugln: 使い方の最小例
debuglnの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
debugln "sample";debugln_color: 色付きデバッグ出力(release では無効)
目的:
- release では何もしません。
実装(アルゴリズム):
- 空関数です。
注意(重要):
- 文字列は使用されません。
計算量:
- O(1)
debugln_color: 使い方の最小例
debugln_colorの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
#entry main
#target std
#import "std/stdio" as *
fn main <()*>()> ():
debugln_color "sample" "sample";