<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>04-外部函数接口（FFI） on 编程那些事儿</title><link>https://before80.github.io/prgms/Rust/RustDesignPatterns/design-patterns/04-foreign-function-interface-ffi/</link><description>Recent content in 04-外部函数接口（FFI） on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 21 Aug 2026 22:34:20 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Rust/RustDesignPatterns/design-patterns/04-foreign-function-interface-ffi/index.xml" rel="self" type="application/rss+xml"/><item><title>01-基于对象的 API</title><link>https://before80.github.io/prgms/Rust/RustDesignPatterns/design-patterns/04-foreign-function-interface-ffi/01-object-based-apis/</link><pubDate>Tue, 18 Aug 2026 22:10:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/RustDesignPatterns/design-patterns/04-foreign-function-interface-ffi/01-object-based-apis/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://rust-unofficial.github.io/patterns/"&gt;Rust Design Patterns&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://rust-unofficial.github.io/patterns/patterns/ffi/export.html"&gt;https://rust-unofficial.github.io/patterns/patterns/ffi/export.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="基于对象的-api"&gt;基于对象的 API&lt;/h1&gt;
&lt;h2 id="description"&gt;描述&lt;/h2&gt;
&lt;p&gt;在设计向其他语言暴露的 Rust API 时，有一些重要设计原则与普通的 Rust API 设计相反：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;所有封装类型应由 Rust &lt;em&gt;拥有&lt;/em&gt;，由用户 &lt;em&gt;管理&lt;/em&gt;，并且是 &lt;em&gt;不透明的&lt;/em&gt;。&lt;/li&gt;
&lt;li&gt;所有事务性数据类型应由用户 &lt;em&gt;拥有&lt;/em&gt;，并且是 &lt;em&gt;透明的&lt;/em&gt;。&lt;/li&gt;
&lt;li&gt;所有库行为都应是作用于封装类型的函数。&lt;/li&gt;
&lt;li&gt;所有库行为都应封装进不以结构、而以 &lt;em&gt;来源/生命周期&lt;/em&gt; 为基础的类型中。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="motivation"&gt;动机&lt;/h2&gt;
&lt;p&gt;Rust 内置了对其他语言的 FFI 支持。它通过不同 ABI（尽管对本实践并不重要）为 crate 作者提供 C 兼容 API 的方式。&lt;/p&gt;</description></item><item><title>02-将类型收拢到包装器中</title><link>https://before80.github.io/prgms/Rust/RustDesignPatterns/design-patterns/04-foreign-function-interface-ffi/02-type-consolidation-into-wrappers/</link><pubDate>Tue, 18 Aug 2026 22:10:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/RustDesignPatterns/design-patterns/04-foreign-function-interface-ffi/02-type-consolidation-into-wrappers/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://rust-unofficial.github.io/patterns/"&gt;Rust Design Patterns&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://rust-unofficial.github.io/patterns/patterns/ffi/wrappers.html"&gt;https://rust-unofficial.github.io/patterns/patterns/ffi/wrappers.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="将类型收拢到包装器中"&gt;将类型收拢到包装器中&lt;/h1&gt;
&lt;h2 id="description"&gt;描述&lt;/h2&gt;
&lt;p&gt;此模式旨在优雅地处理多个相关类型，同时尽量缩小内存不安全的表面积。&lt;/p&gt;
&lt;p&gt;Rust 别名规则的基石之一是生命周期。这确保了许多类型间的访问模式可以是内存安全的，也包括数据竞争安全。&lt;/p&gt;</description></item></channel></rss>