Rust中文翻译11

3.3.4 Python

创建一个embed.py文件,然后编辑如下:

from ctypes import cdll

lib = cdll.LoadLibrary("target/release/embed.dll")

lib.process()

print("done!")

更简单了!我们使用ctypes模块中的cdll.调用了LoadLibrary之后,我们调用了process()方法.

在我的系统上,执行了秒.真快!

Page 61

3.3.5 Node.js

Node并不是一种语言,但是目前它是服务端最流行的javaScript脚本.

为了能让Node使用FFI,我们首先需要安装这个库:

$npm install ffi

安装之后,我们可以这样用:

var ffi = require(‘ffi‘);

var lib = ffi.Library(‘target/release/embed.dll‘, {

‘process‘: [ ‘void‘, [] ]

});

lib.process();

console.log("done!");

它看起来更像Ruby而不是Python.我们使用ffi模块来调用ffi.Library(),来加载我们的共享对象.我们需要声明方法的参数和返回值,返回值是void,一个空的数组意味着没有参数.我们可以调用它然后打印结果.

在我的系统上,它执行了0.092秒.

3.3.6 总结

正如你看到的,完成这些功能的基本代码都很简单.当然,我们还有很多可以做的.会在第4.8节进行详细介绍.

时间: 2024-10-27 18:07:04

Rust中文翻译11的相关文章

Rust中文翻译30

5.11 可变性 可变性,就是改变某些值的能力,Rust语言和其他语言有很大的区别.第一点就是Rust默认是不可变的: let x = 5; x = 6; // error! 我们可以引入mut关键字来增加可变性: let mut x = 5; x = 6; // no problem! 这是一个可变绑定.当一个绑定时可变的时候,你可以改变绑定指向的值.上例中,x的值没有太大变化,但是绑定从一个i32转移到了另一个i32上. 如果你需要改变绑定的值,你需要一个一个可变引用: let mut x

Rust中文翻译19

我们来讨论一下迭代器. 还记得Rust的for循环么?有一个例子: for x in 0..10 { println!("{}", x); } 现在你更了解Rust了,我们可以讨论它的工作细节了.区间(Ranges)(0..10)就是迭代器.一个迭代器可以重复的调用.next()方法,然后给我们返回一个序列. 像这样: let mut range = 0..10; loop { match range.next() { Some(x) => { println!("{}

Rust中文翻译7

去台湾玩儿了一个礼拜,赶紧回来继续翻译吧! 3.1.5 循环 Page 38 loop关键字可以实现一个无限循环.让我们来加入一个循环: extern crate rand; use std::io; use std::cmp::Ordering; use rand::Rng; fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1, 101); prin

Rust中文翻译29

5.10 生命期 本节是Rust三处描述所有权系统的其中之一.所有权是Rust最独特和引人注目的特性,这也是Rust程序员必须熟悉的一个特性.所有权使Rust得以实现它最大的设计目标,内存安全.这里有一些不同的概念,每一个都有自己的章节: 所有权,你正在读的 借用(borrowing, 5.9), 以及它的关联特性'引用' 生命期(5.10),以及borrowing的高级特性 这三者是相关的,也是循序渐进的.你必须要完全理解这个三个部分. 5.10.1 元 在我们讨论细节之前,有两个关于所有权系

Rust中文翻译21

4.7 错误处理 有时候程序会发生错误.对于不可避免的事情发生时最好有一个计划来处理.Rust有丰富的处理错误的方法. 你的程序会出现两种类型的错误:失败和崩溃.我们先讨论两者的区别,然后讨论如何处理他们.然后,我们讨论把错误升级为崩溃. Page 107 4.7.1 失败和崩溃 Rust使用两种错误的类型:失败和崩溃.失败是一种可以被挽回的错误.崩溃却不行. "挽回"是什么意思呢?在多数情况下,很有可能会发生错误.例如,一个parse函数: "5".parse()

Rust中文翻译12

Page 63 我们已经学习了如何写一些Rust代码了.但是能写Rust代码和能写好的Rust代码又很大区别. 这一章讲述一些相对独立的指南,告诉你如何把的Rust代码更进一步.一些常用的模式和标准库会被提到.你可以随意安排阅读本章的顺序. 4.1 栈和堆 作为一个系统级别的语言,Rust可以在底层进行操作.如果你来自于高层语言,有一些系统编程概念你可能不太熟悉.最重要的就是内存中的栈和堆是如何工作的.如果你了解类C语言中栈的分配,这一章就是一个回顾.如果你不了解,你可以在本章学习这些概念了,但

Rust中文翻译28

5.9 引用和借用 本节是Rust三处描述所有权系统的其中之一.所有权是Rust最独特和引人注目的特性,这也是Rust程序员必须熟悉的一个特性.所有权使Rust得以实现它最大的设计目标,内存安全.这里有一些不同的概念,每一个都有自己的章节: 所有权,你正在读的 借用(borrowing, 5.9), 以及它的关联特性'引用' 生命期(5.10),以及borrowing的高级特性 这三者是相关的,也是循序渐进的.你必须要完全理解这个三个部分. 5.9.1 元 在我们讨论细节之前,有两个关于所有权系

Rust中文翻译17

4.2.4 文档测试 没有什么比带有示例的文档更好的了.也没有什么比不能工作的例子更糟的了,因为有可能文档中的代码已经修改了.为此,Rust支持自动测试我们示例代码.让我们看一个富有血肉的src/lib.rs的例子: //! The àdder` crate provides functions that add numbers to other numbers. //! //! # Examples //! //! ``` //! assert_eq!(4, adder::add_two(2)

Rust中文翻译14

Page 71 我们给j,i,h分配了内存.i在堆上,所以是一个指向堆的指针保存在i里.然后再main()函数的结尾,foo()函数被调用: 地址 名字 值 230   20 ... ... ... 5 z 4 4 y 10 3 x 0 2 j 0 1 i 230 0 h 3 x,y,z都得到了各自的内存.参数x拥有和j一样的值,那是因为我们就是这样传参的.它其实是一个指向0地址的指针,因为j指向的是h. 下面,foo()函数调用了baz(),传递了z: 地址 名字 值 230   20 ...