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別に明記されています。