FFI
ถึง Rust จะเก่งแค่ไหน แต่โลกนี้ก็ยังเต็มไปด้วยโค้ดภาษา C/C++ ครับ FFI คือวิธีที่ Rust ใช้คุยกับภาษาอื่น (โดยเฉพาะ C)
ลองนึกภาพว่าเราอยากใช้ library C ที่พัฒนามา 30 ปี หรืออยากให้ C program เรียกใช้ Rust code ที่เราเขียน FFI คือสะพานที่เชื่อมโลกทั้งสองเข้าด้วยกัน!
1. เรียก C จาก Rust
Section titled “1. เรียก C จาก Rust”1.1 extern “C” Block
Section titled “1.1 extern “C” Block”// ============================================// extern "C" block// ประกาศ functions ที่อยู่ใน C library// Rust สามารถเรียกใช้ได้// ============================================extern "C" { // ============================================ // abs() จาก C standard library // รับ i32 คืน i32 (absolute value) // ============================================ fn abs(input: i32) -> i32;
// ============================================ // sqrt() จาก math library // รับ f64 คืน f64 (square root) // ============================================ fn sqrt(x: f64) -> f64;
// ============================================ // strlen() วัดความยาว C string // รับ pointer คืน usize // ============================================ fn strlen(s: *const i8) -> usize;}
fn main() { // ============================================ // ต้องใช้ unsafe เพราะ Rust ไม่รู้ว่า // C function ทำอะไร อาจจะ crash ได้! // ============================================ unsafe { // เรียก abs จาก C let result = abs(-42); println!("abs(-42) = {}", result); // 42
// เรียก sqrt จาก C let root = sqrt(16.0); println!("sqrt(16.0) = {}", root); // 4.0 }}เข้าสู่ระบบเพื่อดูเนื้อหาเต็ม
ยืนยันตัวตนด้วยบัญชี Google เพื่อปลดล็อกบทความทั้งหมด
Login with Google