首页
学习
活动
专区
工具
TVP
发布

Rust FFI 编程 - FFI 概述

FFI 的历史和现状 FFI 这个术语最早来自 Common Lisp 的规范[1]。目前几乎所有严肃编程的语言都有提供 FFI 的支持,但大多数是单向功能。...Common Lisp、Haskell、Python、Rust 这些叫 FFI,Java 叫 JNI 或 JNA,还有一些其它语言叫 “绑定”。...严格来说,FFI 与 绑定,意义并不相同,绑定可以理解为 FFI 中的一种实现。 不同语言实现 FFI 的方式不尽相同。...所以,虽然都能做 FFI,但是不同语言实现 FFI 的困难程度是不同的。 哪些语言可以方便地对外提供 FFI 库支持 可惜,大部分语言只能单向地“索取”。...zh.wikipedia.org/wiki/SWIG: 简单包装界面产生器(SWIG)是一个开源软件工具,用来将C语言或C++写的计算机程序或函式库,连接脚本语言,例如Lua, Perl, PHP, Python

93520
您找到你想要的搜索结果了吗?
是的
没有找到

在 WSL 中学习 Rust ffi

博主最近从新学习 Rust FFI 的使用,但是手头上没有可用的 Linux 环境(Windows 编译c太麻烦了),于是就尝试着使用 WSL来搭建 Rust 环境和简易的 c 编译环境,并记录下中间遇到的一些坑...cargo 详细使用教程 甚至不会讲 Rust FFI 是什么 WSL Rust 环境搭建 由于 WSL 是新装的,没有 Rust 和 gcc/g++ 环境,因此需要安装: sudo apt install...首先,创建一个 binary 项目: cargo new --bin ffi_learn 项目目录结构如下: cpp_src |-- sorting.h |-- sorting.cpp...\n", my_arr); } 然后执行调用: $ cargo run Compiling ffi_learning v0.1.0 (/mnt/c/Users/huangjj27/Documents.../codes/ffi_learning) warning: `extern` block uses type `[i32]`, which is not FFI-safe --> src/main.rs

1.1K21

从 RUST 库中公开 FFI

FFI 可用于加快程序执行(这在 Python 或 Ruby 这类动态语言中很常见),或者只是因为你想使用一些其他语言编写的库(例如 TensorFlow 的核心库是用 C++ 写的,并暴露了 C API...在这篇文章中,我将讲述我对 Rust 和 FFI 的经验,基于 battery-ffi ,它将 FFI 暴露给我的另一个 crate — battery。...例如,如果我的 Manager 结构中包含 Mutex,它应该如何用 C 或 Python 4。 这就是我为什么把结构体的实现隐藏在 不透明指针 背后的原因。...The Rust FFI Omnibus 和 Rust FFI Guide 都提供了如何做到这一点的多个示例。...除非他们需要用他们的语言再次重写你导出的定义,就像 Python 的 ctypes 需要的那样: import ctypes class Manager(ctypes.Structure): pass

1.8K30

Rust FFI 编程 - Rust导出共享库02

我们首先回顾关于字符串的基础知识,了解其在Rust和C中的区别,然后设计具体的示例进行实践,并整理出传递字符串的FFI编程范式。 基础知识 在 C 语言中,字符串可看作是由字符组成的一维的字节数组。...代码示例如下: // ffi/example_01/csrc/hello.c // basic string - char pointer char *str; str = "hello"; //...[]); char *generate_str(); void free_str(char *); Rust 共享库的实现如下: use std::os::raw::c_char; use std::ffi...使用std::ffi::CStr提供的from_ptr方法包装 C 的字符串指针,它基于空字符'\0'来计算字符串的长度,并可以通过它将外部 C 字符串转换为 Rust 的 &str和String。...使用std::ffi::CString提供的一对方法into_raw和from_raw可以进行原始指针转换,由于将字符串的所有权转移给了调用者,所以调用者必须将字符串返回给 Rust,以便正确地释放内存

96620
领券