メモリの扱い
Nagiでは、データを所有する値と、元のデータを借りるviewを区別します。コンパイル先のRustが最終的な借用検査と値の解放を行います。
| 値 | 保持と解放 |
|---|---|
| 数値・bool・コピーできるclass | 値を直接保持し、コピーして渡せる |
| str・bytes・List・所有データを含むclass | 所有権を渡して使う。不要になったときに解放する |
| view | 元のデータを借りる。自分ではそのデータを解放しない |
| shared | データを共有する。保持している参照がなくなったときに解放する |
| task・channel・DBの仕事 | 実行用の領域を確保し、終了や破棄に伴って解放する |
通常の値に参照カウントを一律に付ける方式ではありません。sharedだけはRustのArcを使い、参照の増減を管理します。アプリを書くときの具体例は所有権とviewにあります。
リクエストごとに領域をまとめて確保し、一括解放するarenaは実験段階です。アプリへ自動で適用していません。文字列やファイルなどの後始末、非同期処理をまたぐデータの寿命を含めて検討する必要があります。