FFI(Foreign Function Interface)是用來與其它語言交互的接口,在有些語言里面稱為語言綁定(language bindings),Java 里面一般稱為 JNI(Java Native Interface) 或 JNA(Java Native Access)。由于現(xiàn)實中很多程序是由不同編程語言寫的,必然會涉及到跨語言調(diào)用,比如 A 語言寫的函數(shù)如果想在 B 語言里面調(diào)用,這時一般有兩種解決方案:一種是將函數(shù)做成一個服務(wù),通過進程間通信(IPC)或網(wǎng)絡(luò)協(xié)議通信(RPC, RESTful等);另一種就是直接通過 FFI 調(diào)用。前者需要至少兩個獨立的進程才能實現(xiàn),而后者直接將其它語言的接口內(nèi)嵌到本語言中,所以調(diào)用效率比前者高。
當(dāng)前的系統(tǒng)編程領(lǐng)域大部分被 C/C++ 占領(lǐng),而 Rust 定位為系統(tǒng)編程語言,少不了與現(xiàn)有的 C/C++ 代碼交互,另外為了給那些"慢"腳本語言調(diào)用,Rust 必然得對 FFI 有完善的支持,本章我們就來談?wù)?Rust 的 FFI 系統(tǒng)。