在整数切片上一次运算完成,当优化开启时,甚至编译为SIMD向量指令。
强大的类型
传统上,函数式编程语言提供类似代数数据类型、模式匹配、闭包和灵活的类型推断的功能。Rust是许多新开发的语言之一,它并不是直接适用具有这些特性的函数模型,而是用一种方式合并它们——允许在不损耗性能的情况下适用的一个灵活的应用程序接口(APIs)。
上面的迭代器示例得益于许多这样的想法:这完全是静态类型,但类型推断意味着不必要写明那些类型。闭包也是至关重要的,它允许简洁地编写操作。
在多数主流编程语言中,代数数据类型是枚举(enums)的一个扩展,它允许一个数据类型由一组离散的选择组成,且每个选择都会附加信息:
Java代码
struct Point {
x: f64,
y: f64
}
enum Shape {
Circle {
center: Point,
radius: f64
},
Rectangle {
top_left: Point,
bottom_right: Point
},
Triangle {
a: Point,
b: Point,
c: Point
}
}
模式匹配是使操纵这些类型变得简单的关键,如果shape是一个Shape类型的值,你可以处理各种可能性:
Java代码
match shape {
Shape::Circle { radius, .. } => println!("found a circle with radius {}",
radius),
Shape::Rectangle { top_left: tl, bottom_right: br } => {
println!("found a rectangle from ({}, {}) to ({}, {})",
tl.x, tl.y,
br.x, br.y)
}
Shape::Triangle { .. } => println!("found a triangle"),
这些编译器可以确保你解决所有情况(选择性加入一个catch-all分句),并极大程度地帮助重构。
枚举(enums)也使得Rust防治所谓的“价值数十亿美元”的错误:空引用(null references)。在Rust中引用永远不会是空的,选择类型允许你以一种类型安全、本地化的方式选择nullability。
结论
Rust是一种由Mozilla赞助的语言,它在保留C++性能的同时提供零开销抽象,用于web浏览器开发,还能同时保证内存安全和缓解并发编程的压力。
Rust填充了一个也许被认为是不可能的利基:在不背离安全和抽象的情况下,提供底层控制和性能。当然,世界上没有免费的午餐,编译器作为一个要求 助理不能容忍一点点风险,而且所有权模式还有点陌生,需要一些时间学习。
1.0版本的核心语言和库已经被测试和精炼过,而且重要的是关于稳定的保证:现在编译的代码应该也可以在未来的新版本中得到编译。并且,这个版本 并不意味语言的完成,Rust正在采用火车模型,新版本每六周发布一次,新的和不稳定的特性可以通过常规的预发布版本betas和nightlies发 现。目前,一个标准的包管理器Cargo已经被用来建立一个不断增长的库系统。
正如语言一样,Rust生态还不完善,所以没有像许多老一辈的语言提供的那样宽广的工具和包(简单的FFI虽然对后者有所帮助)。尽管如此,语言本身是强大的,也是一个没有传统危险的,去做底层开发很好的方式。