問題一覧に戻る
上級システムプログラミング
問題105: FFI(Foreign Function Interface)
FFIはRustと他言語(主にC)の相互運用を可能にします。extern "C"ブロックで外部関数を宣言し、標準Cライブラリの関数を直接呼び出せます。#[no_mangle]はRustの名前マングリングを無効化し、Cから呼び出し可能な関数を作成。外部関数の呼び出しは常にunsafeです。ABI(Application Binary Interface)の違いに注意が必要。既存のCライブラリの活用やシステムAPIの呼び出しに不可欠です。
// externブロック
extern "" {
// 外部関数の宣言
fn abs(input: i32) -> ;
fn sqrt(input: f64) -> f64;
}
// Cから呼び出せる関数
#[no_mangle]
pub extern "C" fn call_from_c(x: i32) -> i32 {
x * 2
}
fn main() {
// 外部関数の呼び出し
unsafe {
println!("abs(-5) = {}", ());
println!("sqrt(9.0) = {}", sqrt(9.0));
}
}