10-小结
10.7 小结
Rust为我们提供了方便的FFI抽象,可以与不同的语句进行交互,并且对C语言提供了一流的支持,因为它为标记为extern的函数公开了C ABI(cdecl)。因此,它适用于很多C/C++库的绑定。其中一个突出的例子是SpiderMonkey JavaScript引擎,它是用C++实现的,用于Servo项目。Servo引擎通过bindgen软件包生成绑定来调用C++。
但是,当我们进行跨语言交互时,一种语言的语言构造和数据表示不需要与另一种语言的匹配。因此,我们需要在Rust代码中添加额外的注释和不安全的代码块,以便编译器了解我们的意图。我们在使用#[repr(C)]属性时就会看到这一点。外部函数接口与Rust的很多其他特性一样是零成本的,这意味着链接到其他语言的代码时会产生最小的运行时成本。我们还探讨了Python和Node.js,它们为这些低级FFI抽象提供了很好的包装器。对于没有这种包装器的语言,通过Rust标准库提供的裸FFI API,也能够实现与其他语言的交互。
到本章为止,我们的内容已经涵盖了Rust的核心主题,我们希望读者能够尽快掌握该语言的核心特性。接下来的内容将涵盖Rust框架和相关软件包的案例研究,并将重点放在Rust的实际项目应用上。