Rust 程序设计(第 2 版)
Jim Blandy, Jason Orendorff, Leonora F. S. Tindall
软件工程师
1469 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
课程目录
已完结/共 41 讲
时长 02:41
时长 06:30
时长 10:04
时长 01:05
时长 50:06
时长 31:35
时长 34:39
时长 29:11
时长 37:15
时长 23:44
时长 44:19
时长 29:54
时长 39:01
时长 01:38
时长 01:15
时长 00:37
Rust 程序设计(第 2 版)
15
15
1.0x
00:00/00:00
登录|注册

第 23 章 外部函数

赛博空间。难以想象的复杂性。光线交织在思维的非空间、数据的集群和星座中。就像城市的灯光,渐行渐远……
——《神经漫游者》,William Gibson
很遗憾,世界上并不是每个程序都是用 Rust 编写的。我们希望能够在 Rust 程序中使用以其他语言实现的关键库和接口。Rust 的外部函数接口(foreign function interface,FFI)允许 Rust 代码调用以 C 语言编写的(在某些情况下是用 C++ 编写的)函数。由于大多数操作系统提供了 C 接口,因此 Rust 的外部函数接口能帮你立即访问各种底层设施。
在本章中,我们将编写一个与 libgit2 链接的程序,libgit2 是用于 Git 版本控制系统的 C 库。我们将先展示如何借助第 22 章演示的不安全特性在 Rust 中直接使用 C 函数,然后再展示如何构建 libgit2 的安全接口,这些灵感都来自开源的 git2-rs crate。
假设你已经熟悉 C 以及编译和链接 C 程序的机制。如果你擅长使用 C++,那么情况也一样。假设你对 Git 版本控制系统也比较熟悉。
确实存在用于和许多其他语言(包括 Python、JavaScript、Lua 和 Java)通信的 Rust crate。由于篇幅所限,本书就不详细介绍了,但归根结底,所有这些接口都是用 C 的外部函数接口构建的,因此无论要使用哪种语言,本章都会为你提供一个良好的开端。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Rust FFI(Foreign Function Interface)与C语言进行交互的基础知识。首先探讨了Rust和C之间数据表示的共同点,包括原始类型和结构体类型的对应关系。通过示例演示了如何使用#[repr(C)]属性定义与C结构体兼容的Rust结构体类型,以及如何控制C风格枚举的表示法。此外,还介绍了在Rust和C之间传递字符串的困难以及如何声明外部函数与变量,以及使用库中的函数。文章还提供了在Rust中使用外部函数接口的基础知识,以及与C代码进行交互的方法。通过示例和技术细节,为读者提供了Rust FFI的基本概念和实际应用。文章还介绍了构建脚本的编写,以告知Rust在何处搜索库,以及如何处理共享库的路径问题。最后,文章提到了构建安全的Rust接口的关键策略,展示了如何在Rust中使用libgit2函数和类型。同时,还介绍了libgit2的安全接口设计规则和如何通过Rust的类型系统构建强制执行这些规则的libgit2 Rust接口。文章深入浅出地介绍了Rust FFI与C语言交互的技术细节,为读者提供了全面的了解和实际应用指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部