第1章 | 系统程序员也能享受美好

简介: 第1章 | 系统程序员也能享受美好

1.1 Rust 为你负重前行

Rust 语言给了我们一个简单的承诺:只要程序通过了编译器的检查,就不会存在未定义行为。悬空指针、双重释放和空指针解引用都能在编译期捕获。数组引用则会受到编译期检查和运行期检查的双重保护,因此不会存在缓冲区溢出:想想那个不幸的 C 语言程序,它的 Rust 版代码会安全地退出并给出一条错误消息。

Rust 的目标是既安全易用。为了更好地保障程序的行为,Rust 对代码施加了比 C 和 C++ 更多的限制,而只有靠实践和经验,我们才能逐渐适应这种限制。但就整体而言,这门语言还是灵活且富有表现力的。用 Rust 编写的代码范围之宽、应用领域之广就是证明。

安全好用,应用广

1.2 高效并行编程

事实证明,Rust 用来确保内存安全的那些限制同样能确保 Rust 程序避免产生数据竞争(data race)。只要数据不可变,你就可以在线程之间自由地共享这些数据。会发生变化的数据则只能使用同步原语访问。所有传统的并发工具仍然可用:互斥锁、条件变量、通道、原子等。Rust 只负责检查你是否正确地使用了它们。

这就让 Rust 成了一门能充分发挥现代多核机器能力的优秀语言。Rust 的生态系统提供了一些超乎于常规并发原语的库,可帮助你在处理器池之间均匀分布复杂负载、使用无锁同步机制(如读取-复制-更新)等。

很好的支持并发

1.3 性能毫不妥协

通常,C++ 的各种实现会遵循零开销原则:没用到的,就没有开销;要用到的,你也无法手写出更好的代码。

系统编程通常会涉及极限压榨机器性能。对电子游戏来说,整台机器应该极力为玩家创造最佳体验。对浏览器来说,浏览器的效率决定了内容作者可用能力的上限。在机器的固有限制下,必须将尽可能多的内存和处理器能力留给内容本身。同样的原则也适用于操作系统:内核应该尽可能把机器资源留给用户程序,而不是自己来消耗它们。

但是当我们说 Rust“快”的时候,到底意味着什么呢?毕竟人们可以用任何通用语言来写出慢速代码。更准确一点儿说,如果你准备让程序充分发挥底层机器的能力,那么 Rust 就会为你提供支持。这门语言设计了一些“高性能”的默认选项,并赋予你自主控制内存使用和处理器算力分配方式的能力。

直接操作底层机器的能力,自主控制机器,更强大的能力,更自由的控制

协作无边界

“系统程序员也能享受美好”。这是指 Rust 对代码共享和复用的支持。

作为 Rust 的包管理器和构建工具,Cargo 能让你轻松使用别人在 Rust 的公共包存储库 crates.io 网站上发布的各种库。只需将库的名称和所需的版本号添加到文件中,Cargo 就会负责下载这个库以及它所用到的任何其他库,并将所有内容链接在一起。你可以将 Cargo 视为 Rust 下的 NPM 或 RubyGems,其侧重于实现健全的版本管理和可重现的构建。一些广为流行的 Rust 库提供了包括开箱即用的序列化功能、HTTP 客户端和服务器功能以及现代图形 API 功能在内的一切。

Cargo类似于前端包管理器,安装依赖和库简单方便

再进一步说,Rust 这门语言本身也旨在支持协作:借助 Rust 的特型(trait)2和泛型,我们可以创建具有灵活接口的库,将其用在许多不同的上下文中。Rust 的标准库提供了一组最核心的基本类型,这些类型为一些常见的情况建立了共享规约,以方便不同的库彼此协作。

2特型

表示一组具有指定特点的类型。这里之所以把 trait 译为“特型”,是因为特型和泛型是紧密相关的,我们希望读者顾名思义就能在两者之间建立联系;而其他中文译法,或者缺乏特异性,或者难以望文生义,因此并未采纳。关于 trait 翻译与否及译法是个非常有争议的话题,我们在审读群曾经进行过至少 3 次深度讨论,但并未形成共识。对于一个常用专有名词,有一个合适的中文表述是非常必要的。但对于一个词的新译法,一开始,大家可能还不太习惯,不妨试着给新词些时间。——译者注

这里想到了前端圣经《JavaScript高级程序设计 第4版》 中的翻译情况,把 promise 翻译成 期约

Rust 圈为这个词的翻译吵翻了天!技术图书翻译真不简单......_trait_特性_can (sohu.com)

目录
相关文章
|
7月前
|
安全 开发者
这些职场潜规则帮你做高效技术人
作者是一个从一线技术人摸爬滚打一步步成长起来的技术管理者,也算是慢慢积累了一些做事和管理的经验心得,三年的管理者快照能侧面佐证作者通过学习和实践从管理小白到逐渐摸到了一些管理门道的自我修炼之路是怎么走过来的。
|
7月前
人生没有捷径,专注做好一件事就是捷径——《元智慧》读后
人生没有捷径,专注做好一件事就是捷径——《元智慧》读后
54 0
|
小程序 程序员 开发工具
程序员业余变现之路-咸鱼接单实操(一)
程序员业余变现之路-咸鱼接单实操(一)
857 0
|
消息中间件 搜索推荐 Java
新人如何顺利度过试用期,让你受益终身的几个技能
新人如何顺利度过试用期,让你受益终身的几个技能
440 1
新人如何顺利度过试用期,让你受益终身的几个技能
|
程序员 开发者
十年老友记 | @王子亭:编程让我享受创造和解决问题的过程
十年老友记 | @王子亭:编程让我享受创造和解决问题的过程
201 0
|
程序员 测试技术 数据库
做程序媛这几年,感受?体验?
首先,感受,和男程序员一个样……(真不是废话) BUG是修不完的,但是不能放过它,因为你的内心会遭受煎熬。。。。 直接进入体验,就不用重复的文字去啰嗦了,直接上图哈 以下的这几种情况,在我的生活中,是真的不断出现,连样式都没变过; first:修电脑AND重装系统,就在今天,历史总是不断的重复上演: 此人是我大学同学,都是学计算机专业的,为什么要这样对我? second:P图,这个是我一个算是闺蜜群吧,平时各种问题,接踵而至,我就这么值的相信吗? 我真的太难了…… third:电脑异常,以及office办公软件的使用,excel……身边这样的人太多了,已无力吐槽,因为已成日常
147 0
|
程序员
支付宝程序员眼中的极致代码和卓越程序员是什么样的?
敬畏每一行代码,时刻为之保持思考,支付宝的技术同学们狂奔在追求卓越代码的路上。
676 0
支付宝程序员眼中的极致代码和卓越程序员是什么样的?
|
程序员
那么问题来了,有一个程序员男朋友是什么样的体验?
对于程序员而言,往往是面向对象编程的时间多,陪女朋友的时间少,然而,程序员往往都有一个特点,那就是专一,因为对于程序员而言,根本没时间去花心...就像是那句话“探索宇宙的真理已经很累了,没必要再去说假话”,所以你的程序员男友可能虽然木讷,但是绝对是真心的。对吧,程序员顶起来!
5739 0
|
程序员 双11 Android开发
作为一名有追求的程序员,你双11最舍得花钱买的东西有哪些?
在下是一名90后程序猿,平常周末没什么事,都是在家宅着,很多人觉得程序员的最大特点就是宅,大多数时间和电脑在一起,根本不会在意自己的衣着和生活品质,所以大家一说到程序员,给人的印象就是邋遢、性格内向、不爱说话、宅、加班。
1138 0
|
程序员
软技能:开启程序员的职场“破冰之旅”
在我们聊“软技能”之前,先来区分下“软技能”和“硬实力”。通常我们将自己专业方向的技能定义为 “硬技能”,以程序员为例的话,我们的算法、计算机知识和编程能力等就属于“硬技能”,是我们吃饭的家伙,大多数人等着靠他赚钱买车买房娶妻生子,但生活质量的好坏往往由“软技能”决定的,从两类技能的关系来看,“软技能”是“硬技能”的催化剂。
1100 0