Crubit,C++/Rust 双向互操作工具

Lobsters Hottest 工具

摘要

Crubit 是 Google 的双向绑定生成器,它实现了 C++ 和 Rust 之间的无缝互操作,使两种语言能够相互调用对方的函数。文档包括示例、演练教程和支持功能的状态页面。

<p><a href="https://lobste.rs/s/9ofzvx/crubit_c_rust_bidirectional_interop_tool">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/08/06 22:14

# 首页 - Crubit 文档 来源:https://crubit.rs/ ## 键盘快捷键 按 ← 或 → 在章节之间导航 按 S 或 / 在书中搜索 按 ? 显示此帮助 按 Esc 隐藏此帮助 ## Crubit 文档 rust workflow (https://github.com/google/crubit/actions/workflows/rust.yml) GitHub (https://github.com/google/crubit) Crubit 是一个面向 C++ 和 Rust 的双向绑定生成器,旨在整合 C++ 和 Rust 生态系统。 ## 状态 (https://crubit.rs/#status) 查看状态 (http://crubit.rs/overview/status) 页面,了解当前支持的功能概览。 ## 示例 (https://crubit.rs/#example) 考虑以下 Rust 库: `` #![allow(unused)] fn main() { pub struct Account { pub id: u64, pub balance: f64, } impl std::fmt::Display for Account { ... } // Takes shared references, mapped to const references in C++. pub fn calculate_interest(account: &Account, rate: f64) -> f64 { ... } // Takes a string slice, mapped to rs_std::StrRef in C++. pub fn is_valid_username(username: &str) -> bool { ... } } `` 你可以从 C++ 调用这些 Rust 函数: `` #include "path/to/account.h" #include <iostream> void demo() { account::Account my_account{.id = 123, .balance = 1000.0}; double interest = account::calculate_interest(my_account, 0.05); // my_account is printable because Account implements Display in Rust! std::cout << my_account << std::endl; if (account::is_valid_username("bob")) { std::cout << "Valid user" << std::endl; } } `` 考虑以下 C++ 头文件: `` #include <cstdint> #include <memory> #include <optional> #include <string_view> struct User { int id; double balance; }; std::optional<User> FindUser(int id); std::unique_ptr<User> CreateUser(std::string_view name, int id); `` 你可以从 Rust 调用这些 C++ 函数: `` use cc_std::std::unique_ptr; use ffi_11::{c_double, c_int}; use user_api::{CreateUser, FindUser, User}; let id: c_int = 123; let user: Option<&User> = FindUser(id); if let Some(u) = user { let balance: c_double = u.balance; println!("User {} has balance {}", u.id, balance); } let new_user: unique_ptr<User> = CreateUser("Alice".into(), 456); `` ## 入门 (https://crubit.rs/#getting-started) 我们提供了使用 Crubit 的详细教程,涵盖如何从 Rust 使用 C++,或从 C++ 使用 Rust,以及可直接复制粘贴的示例代码。示例代码还包括生成绑定的快照。 - 教程:Rust 库的 C++ 绑定 (http://crubit.rs/rust) - 示例:`examples/rust/` (https://github.com/google/crubit/tree/main/examples/rust) - 教程:C++ 库的 Rust 绑定 (http://crubit.rs/cpp) - 示例:`examples/cpp/` (https://github.com/google/crubit/tree/main/examples/cpp) ## 测试矩阵 (https://crubit.rs/#test-matrix) https://crubit.rs/overview/status.html https://crubit.rs/overview/status.html

相似文章

crustc: 整个rustc编译器,已翻译成C语言

Lobsters Hottest

一个名为cilly的Rust到C编译器工具链已成功将整个rustc编译器翻译成4600万行C代码,生成了一个可以用GCC构建的功能性Rust编译器。该项目旨在通过生成可移植的C代码,使Rust能够在老旧/冷门硬件上运行。

Cpp2Rust: 从C++到安全Rust的自动翻译

Lobsters Hottest

Cpp2Rust 是一个开源工具,利用 clang 的 AST 和一个运行时库,自动将 C++ 代码转换为安全的 Rust 代码,支持安全和 unsafe 两种输出模式,实现安全的内存安全转换。

Diplomat:面向 Rust 库的多语言 FFI

Lobsters Hottest

Diplomat 是一个多语言单向 FFI 工具,用于封装 Rust 库,旨在将 Rust API 暴露给 C++、JS、Dart 和 JVM 等语言,而无需 FFI 专业知识,填补了 Rust 工具生态系统中的空白。

如何将C/C++项目重写为Rust?

Hacker News Top

本文讨论了将C/C++项目迁移到Rust的策略,强调增量迁移而非全面重写,并引用了Luca Palmieri和JetBrains的见解。