API ドキュメントを読む: エラーと所有権

因子の単位、結果構造体、部分的な成功、およびリソースの寿命を理解します。

Wave Foundation

宣言を読む

以下は関数宣言を説明する表記で、実行可能ファイル全体ではありません。

io_read(fd: i64, buf: ptr<u8>, len: i64) -> i64

fdはオープンディスクリプタ、bufは発信者によって提供されたストレージスペース、lenは書き込み可能なバイト数です。 i64として負の長さが有効なわけではありません。戻り値は要求長ではなく実際に読み取ったバイト数なので、返された範囲のみを使用します。

失敗表現は関数によって異なる

方法 はい 検査方法
ポインタまたはnull mem_alloc null検査後のメモリアクセス
バイト数または負数 io_read 負の誤差、0 EOF、正のデータ
ステータスコード buffer_push BUFFER_OKとエラー定数の比較
成功かどうか NetResult<T> okを検査した後valueを使用
部分進行量を含む RandomFillResult ok、written、errorを一緒に確認

エラーの数だけを見て、他のモジュールの定数と比較しません。たとえば、envのエラー番号とOSerrnoは同じスキームではありません。 WASIの元のエラーをLinuxerrnoのように解釈してはいけません。

所有と賃貸

  • 所有:割り当てメモリ、オープンファイル、オープンソケットを取得したら、対応する解放・クローズを呼び出す責任があります。
  • 借りる:バイトviewや関数に渡したバッファは既存のメモリを参照します。関数が所有権を受け取ることを指定しない限り、呼び出し側は管理し続けます。
  • 出力引数:out_value: ptr<T>のように受け取る関数には、結果を書き込むための有効なストレージスペースを渡します。成功した場合にのみ、結果が有効であることを確認してください。

Buffer 構造をコピーすると、両方のコピーが同じ割り当てを指したままになる可能性があります。各コピーを個別に解放しないでください。借用したポインタは、割り当てが解放または再割り当てされると無効になります。文字列リテラルは書き込み可能なバッファではありません。

失敗が以前の状態に戻るという意味ではありません

io_write_allは、一部のバイトを書き込んだ後に失敗することがあります。すでに外部に書き込んだバイトは戻りません。一方、bytesのcheckedcursor読み取りは失敗すると位置と出力値を保存します。これらの違いは、API別に明記されています。

失敗処理も実践するには、ファイルリーダーとバイナリメッセージに進んでください。