項目34:FFI境界を通過するものを制御しよう
https://effective-rust.com/ffi.html
LT;DR
C の シンボル は単一のグローバル 名前空間 に存在する
FFI 境界 で問題が起こる可能性を最小化するために、以下を行うこと
unsafe な FFI コードを safe なラッパで包む
メモリの確保と解放は常に境界を挟んだどちらか一方で行う
Rust で行う場合、RAII パターン が活用できる
項目11:RAIIパターンにはDropトレイトを実装しよう
サイズの指定された整数型を用いる(e.g. uint32_t)
標準ライブラリで提供されている FFI 関連のヘルパを用いる
e.g. CString、Cstr、Box::into_raw / Box::from_raw
未定義動作を引き起こす可能性があるため、Rust の panic! は FFI 境界 を通過しないようにする
項目18:Don't panic#6796105475d04f00003109c2
hr.icon
FFI(Foreign Function Interface)は、関数のみに限らずデータ構造も相互作用が可能
Rust から C の関数を呼び出す
Rust から C のライブラリを呼び出す
Rust から C のデータにアクセスする
Rust と C の FFI で生じるメモリ安全性の問題
C から Rust のコードを呼び出す
#Rust #Effective_Rust_―_Rustコードを改善し、エコシステムを最大限に活用するための35項目