为什么你需要近距离接触 Rust 1.0

在不背离安全或抽象的情况下,拥有极高的运行效率,能预防几乎所有的错误,提供优越的底层控制和性能——这些都是Rust1.0版本做出的承诺,而这仅仅是个开始。

经过几年的迭代改进,Rust编程语言日前发布1.0版本。作为一种现代系统语言,Rust从大量语言(如C/C++)中取其精髓,去其糟粕,同时具备底层控制、高性能和强大的并发性。为了做到这一点,Rust打破了许多传统的取舍,它提供:

内存安全却没有垃圾收集

具有并发性却没有数据竞争

零开销抽象

稳定且没有停滞

没有垃圾收集

软件工程中,垃圾回收是一个强大的工具,让你从手动跟踪内存的烦恼中解脱,而专注于写出更好的代码。虽然有垃圾回收器很不错的,但是它在一些领域却不那么合适,诸如操作系统、嵌入式库和(软)实时应用,它们通常需要更大程度的控制和可预测性,而垃圾回收不能提供这些。

Rust允许开发人员完全放弃垃圾收集器,且不会面临忘记释放资源、悬挂指针、段错误的风险。所有权(ownership)和借用 (borrowing)是Rust实现这些的关键概念,这个想法在编程中无处不在,也是现代C++的一个重要组成部分。但与其他语言不同的是,Rust把 他们放在了核心地带,静态地检查和利用它们,来保证没有垃圾回收器情况下内存的安全,这是之前不能想象的东西。

关于所有权(Ownership),Rust的理念是每一个值只能有一个所有者(parent)对其完全控制。随着这些值被重新分配、放在数据结 构中或传递给函数,它们的所有权会转移,且不能再通过原来的路径访问。如果超出它的作用域(scope),所有权还未被转移,它就会被自动销毁。为了使所 有权在一定范围内运作,Rust提供了一种在值的作用域范围内临时借用(指针指向值)的方法。

所有权不仅替代了垃圾回收,对保证并发性也至关重要,甚至避免诸如迭代器失效这类型的bug。Rust还适用于内存以外的其他资源,例如当你关闭套接字或者文件时,可以将你从管理中解放出来。

并发性

如前所述,所有权也保证了你的并发程序不会陷入数据竞争(data races)的隐患之中。所有权会使之保持不牢固的内存模型,通过硬件来接近它。

用Rust开始一个并发程序很简单,通过标准库将闭包传递给函数:

Java代码

use std::thread;
fn main() {
    let some_string = "from the parent";
    thread::spawn(move || {
        // run on a new thread
        println!("printing a string {}", some_string);
    });
}

许多并发程序设计语言的原则之一就是共享状态应该最小化或者甚至完全禁止,取而代之的是通过消息传递,所有权意味着Rust语言中的值默认只有一个所有者,所以通过通道将一个值发送给新的线程时保证原始线程不能访问它——静态禁止共享。
然而,消息传递仅仅是工具箱中的一个工具,共享内存可能也非常有用。类型系统确保只有线程安全的数据才可以在线程之间进行共享。例如,标准库提供 了两种类型的引用计数:Arc提供线程安全的A共享内存(默认不可变),而Rc类型则可以放弃那些需要保证线程安全的同步,在Arc上提供一个性能提升。 这种类型的系统静态地确保不会不小心从一个线程向另一个线程发送Rc值。

当你想确实想改变内存时,所有权提供了进一步的帮助。标准库Mutex类型为数据提供了一个类型参量,可以受到锁的保护。之后所有权确保这个数据只有在持有锁的时候才能访问,但你不能刻意提前开锁。这种访问控制贯穿了Rust类型系统,并被广泛的用于它的标准库。

零成本抽象性能和可预测性是Rust的目标之一,达到这个目标很重要的一步就是不但要保证安全,还要提供比C++更强大的零成本抽象。Rust允许你构建高层次抽象,编译为特定代码的范型库,避免为各种情况编写代码。

为了做到这点,Rust精确控制内存布局,数据可以直接放置于堆栈或内联在其他数据结构之间,而堆分配要比大多数托管语言少,有助于获得更好的缓存局部性,而这是现代硬件中提升性能到重要因素。

这个简单的、直接的数据布局意味着优化器可以可靠地消除函数调用和类型的层,将高层代码编译为高效和可预测的机器码。迭代器是其中一个主要的例子,下面的代码是对一个32位整数序列平方求和的惯用方法:

Java代码

fn sum_squares(nums: &[i32]) -> i32 {
    nums.iter()
        .map(|&x| x * x)
        .fold(0, |a, b| a + b)
}

在整数切片上一次运算完成,当优化开启时,甚至编译为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虽然对后者有所帮助)。尽管如此,语言本身是强大的,也是一个没有传统危险的,去做底层开发很好的方式。

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-10-07 09:31:12

为什么你需要近距离接触 Rust 1.0的相关文章

淘宝鬼脚七:一个“技术屌丝”与马云的近距离接触

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 马云现在已经是偶像,很神秘.很 多人喜欢他,也很多人不喜欢他.但这两类人都不得不佩服马云的能力和智慧.我加入阿里快9年,今天刚好很有些感触,回顾了一下过去,给大家讲讲印象中我和马云近距离接触. 2005年,我在雅虎中国做搜索技术研发,当时阿里并购雅虎中国,我当时也在犹豫是不是要离开雅虎,外部确实开了很不错的条件.当时马云一身黑西服,到一个大会议室演讲,时间不长,记得

报名 | 想在硅谷近距离接触蚂蚁金服的CTO和一众技术高管?这个机会一定不能错过!

​想了解蚂蚁金服?想和蚂蚁金服成为合作伙伴?想在蚂蚁金服找到工作?来这场大会就对了! 去年,包含支付宝业务的蚂蚁金服完成了 45 亿美元融资,创造了当时全球互联网行业单笔私募融资的记录,也成为了全球估值最高的金融科技公司. 但蚂蚁金服就是支付宝?是也不是.它有着比后者更大的愿景.到现在为止,它旗下已经包括了支付宝.蚂蚁财富.芝麻信用.网商银行等多项业务. ​目前,蚂蚁金服已经在金融级云计算技术.生物识别.深度学习等领域实现突破,并且希望在全球范围内寻找更多合作伙伴和高科技人才一起探索.突破技术的

藏剑山庄与偶像谢霆锋的近距离接触(独家组图)

     前天受好友简简之约参加了她们公司与海润合作拍<剑侠情缘之藏剑山庄>的现场发布会.发布现场的明星有谢霆锋.阿sa.郑希怡等等.别的倒不是很稀罕,小谢和阿sa我们还是一直很关注的,虽然我俩都快年近三十,也早已过了追星的年纪,但是因为想近距离看着昔日心中的偶象所以发布会4点开始.我们2点多就赶到了现场,等待他们的到来.         然后陆续的从3点开始北京电视台.央视.btv.香港文汇报.四大门户等一线二线媒体都到了.接着陆陆续续进来很多小谢的粉丝,都穿一水儿的黑色T恤,就小谢的粉丝多

近距离接触高科技走进帝度洗衣机变频电机厂

"采用变频电机的洗衣机,可降低至少10分贝噪音,每年减少碳排放14亿千克,洗净比也远超国家一级能效".在近日合肥荣事达三洋股份有限公司举办的帝度"透明工厂"深度体验行活动上,记者一行走进了保密最为严格的"核心"厂房--帝度变频电机工厂,与高科技来了一次亲密接触.转速跨度小噪音降低10分贝走进变频电机厂,相关技术人员告诉记者,电机就好比洗衣机的心脏,但这颗心脏也有好有坏.普通电机运行时电刷摩擦噪音大,能耗损失也大.特别在洗衣机脱水时,普通电机转速是

近距离接触类脑计算,看脑机接口如何走向脑机融合|CCF-ADL 新课报名中

雷锋网(公众号:雷锋网)AI科技评论按:7月28日~7月30日,由中国计算机学会主办的第81期 ADL(Advanced Disciplines Lectures)学科前沿讲习班将在京召开.本期主题为<类脑计算>,旨在帮助学员快速入门类脑计算原理和技术,了解学科热点以及应用方法,开阔科研视野,增进学术交流和增强实践能力.雷锋网作为独家合作媒体将进行全程报道,同时AI慕课学院已获本次讲习班独家线上视频版权,不能来现场听课的同学请猛戳右侧超链接:www.mooc.ai  . 课程链接:类脑计算线上

近距离接触Cognos express

     前几天笔者和朋友聊到国内外软件界的几家公司,其中谈到了关于中小企业信息化的话题.恰好最近也参加了一次IBM Cognos express在京的媒体见面会.其中就谈到关于中小国内企业信息化应用的一些关键问题.所以小康今天想在博客中,谈谈个人对于IBM Cognos express的一些感受.      说起世界五百强的蓝色巨人IBM,我想国人首先想起的也肯定是其服务器,PC等传统硬件产品.而对于其高端的软件服务来说,我想大部分人虽然知道一些,但要让人说起他到底有什么软件,我想80%以上的

Rust 的 2016 年规划,1.0 之后会如何发展?

这周以来 Rust1.0 发布已经三个月了.随着开始向着下一个 1.0 版本迈进,我们很乐意地回顾 1.0 版本,并且讨论一下明年 Rust 的发展. 关于1.0版本 Rust 1.0 专注于稳定性,社区性和明确性. 稳定性,我们已经在先前的说明文档中对于发布渠道和稳定化过程作了不少的讨论. 社区性 这已经成为 Rust 语言的强项之一. 但在 1.0 版本发布之前,我们介绍并改善了 RFC 过程,最后与子团队管理 RFC 过程的每个特别的部分.社区规模的讨论对于高品质 1.0 版本的发布必不可

SwiftStack迎来v5.0,向混合IT规则张开怀抱

SwiftStack v5的Cloud Sync提供双向复制通道,用于加快内部数据中心与Google Cloud Storage.Amazon S3以及Glacier之间的数据传输. SwiftStack迎来v5.0,向混合IT规则张开怀抱 作为其开源对象存储方案,SwiftStack软件能够在单一命名空间内实现对PB级别非结构化数据的访问,且提供按使用资源付费的计费方式.该公司最初于去年11月开始公布其Cloud Sync方案,如今这一产品已经正式推出. 这种双向数据分流机制配合策略管理,意味

在社区3.0面前,BAT三巨头也要颤抖?

我想有人第一眼看到这话题,肯定会认为作者疯了.而且还疯得不轻,想必是已经到了癫狂的地步了.BAT,只会让大中小的创业公司,甚至是中联通.中移动.中电信颤抖,社区3.0又算什么东西,也配让BAT颤抖? 话说,BAT我想大家不会不知道.那是互联网.移动互联网的三大巨无霸:百度.阿里巴巴.腾讯.它们分别控制着电商领域.搜索领域.即时通讯还有社交领域.可以说,在BAT很多情况下,已经成为了中小创业者不得不回避的巨人."要么你臣服,要么你倒下". 那么,社区3.0到底算是个什么东西呢?我想我得先