第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)

目录
相关文章
|
5月前
|
存储 Java 开发工具
探索安卓应用开发:从新手到专家的旅程
【8月更文挑战第30天】在数字时代,掌握安卓应用开发的技能不仅是职业发展的利器,也是个人技术成长的象征。本文将带你了解如何从零基础开始,逐步深入安卓开发的奥秘,最终成为一名能够独立开发高质量应用的专家。通过实际的代码示例和清晰的步骤指导,我们将一起构建你的第一个安卓应用程序,并探讨如何提升至更高水平。无论你是编程新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启发。
|
2月前
|
存储 Java 数据处理
探索安卓开发:从新手到专家的旅程
【10月更文挑战第42天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从安卓开发的基础知识开始,逐步深入到高级概念。我们将通过实际的代码示例和清晰的解释,帮助你理解安卓开发的核心原理,并学会如何构建你自己的应用程序。无论你是刚刚入门的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起开始吧!
|
2月前
|
存储 JavaScript Java
后端开发的艺术:从新手到专家的旅程
在数字化时代,后端开发是构建现代应用程序不可或缺的一部分。本文将探讨后端开发的核心概念、技术栈选择、最佳实践以及如何从初学者成长为专家。我们将通过一系列实用的建议和策略,帮助读者理解并掌握后端开发的精髓,从而在这个充满挑战和机遇的领域中取得成功。
|
4月前
|
前端开发 Java Android开发
探索移动应用开发之旅:从新手到专家的蜕变之路
【9月更文挑战第20天】在数字化时代的浪潮中,移动应用已成为我们日常生活和工作不可或缺的一部分。本文将带领读者踏上一场精彩的旅程,从移动应用开发的基础知识出发,逐步深入到高级技巧和最佳实践。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供宝贵的信息和启发,帮助你在移动应用开发领域实现自我超越。
85 12
|
3月前
|
开发框架 开发工具 Android开发
移动应用开发之旅:从新手到专家的蜕变之路
【10月更文挑战第15天】在数字化时代,移动应用已经成为我们生活中不可或缺的一部分。本文将带你走进移动应用开发的世界,从基础概念到高级技术,从开发工具到实战案例,一步步揭示移动应用开发的奥秘。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到有价值的信息和启示。让我们一起探索移动应用开发的精彩旅程吧!
|
5月前
|
开发工具 Android开发 开发者
移动应用开发之旅:从新手到专家的蜕变
【8月更文挑战第30天】在数字时代的浪潮中,移动应用已成为我们日常生活的一部分。本文将引导你了解移动应用开发的核心概念、操作系统的选择以及如何通过实践和学习成长为一名移动应用开发专家。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的建议,帮助你在移动应用开发的道路上迈出坚实的一步。让我们一起探索这个充满创意和技术挑战的世界吧!
58 15
|
5月前
|
敏捷开发 测试技术 持续交付
软件测试的艺术:从新手到高手的蜕变之旅
在数字化时代的浪潮中,软件测试不再是一个单一的技术环节,而是一种艺术,它要求从业者具备深厚的技术功底与敏锐的洞察力。本文将通过深入浅出的方式,带领读者了解软件测试的核心概念、方法论以及如何从一名新手成长为行业内的高手。我们将探索自动化测试的奇妙世界,讨论持续集成的重要性,并分享一些实用的技巧和最佳实践,旨在帮助每一位软件测试工程师提升自己的技术水平,最终实现职业生涯的飞跃。
|
7月前
|
设计模式 存储 Swift
探索iOS应用开发:从新手到专家
【6月更文挑战第28天】在这篇文章中,我们将深入探讨iOS应用开发的各个方面。无论你是刚开始学习iOS开发的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的信息和指导。我们将从基础知识开始,逐步深入到更复杂的主题,包括设计模式、性能优化和最新的iOS技术趋势。通过这篇文章,你将获得从新手到专家的全面指导。
|
消息中间件 分布式计算 Kubernetes
爆款阿里P5到P7晋升之路,九大源码文档助我超神果然努力幸运并存
前言 相信有许多的程序员,工作了这么多年;但是依然不知道自己掌握的技术栈+项目,究竟达到了阿里的什么职级,还有薪资水平是什么样的;
|
JavaScript 前端开发 安全
“高校学生在家实践”活动的绝妙体验
初识阿里云,经过了阿里云提供的服务器教程学习和考试,自己搭建了Nodejs文件传输后端,以及挂载自己写的前端网页,体会了前后端交互的痛苦以及乐趣!
“高校学生在家实践”活动的绝妙体验

热门文章

最新文章