Rust实战
上QQ阅读APP看书,第一时间看更新

1.8 Rust的缺点

人们在谈论这门语言时,很容易会给人一种“这是所有软件工程的灵丹妙药”的感觉。举例来说:

“高级语言的语法,低级语言的性能!”

“并发而不会崩溃!”

“具有完美安全性的C!”

这些宣传口号(有些夸大其词)真的很棒。但是,即便兼具所有的这些优点,Rust也确实有一些缺点。

1.8.1 循环数据结构

在Rust中,我们很难对循环数据(比如任意一个图结构)进行建模。实现双向链表是一个大学本科生就能解决的计算机科学问题,然而,Rust的安全性检查确实妨碍了类似结构的代码编写。如果你正在学习Rust语言,在对它有足够的了解之前,你应该尽量避免去实现这类数据结构。

1.8.2 编译速度

Rust的代码编译速度比同等语言慢。Rust的编译器工具链很复杂,其中有多种中间表示形式,并且会发送大量的代码给低级虚拟机(Low Level Virtual Machine,LLVM)编译器。Rust程序的“编译单元”不是一个单独的文件,而是一个完整的程序包(昵称为crate)。Rust程序包有可能包含众多模块,因此可能会是非常大的编译单元。虽然这样可以针对整个程序包进行优化,但同样地,也必须针对程序包的整体进行编译。

1.8.3 严格

使用Rust编程时,是不可能——好吧,是很难偷懒的。在所有代码都正确之前,程序不能通过编译。编译器很严格,但是也很有帮助。

随着时间的推移,你可能会逐渐喜欢上这个特点。如果你使用过动态语言编程,那么肯定遇到过因为变量名错误而使程序崩溃的情况,并由此体会到挫败感。Rust把出现这种挫败感的时间给提前了,至少使用你的程序的用户不必经历有某些东西崩溃了的挫败感。

1.8.4 语言的大小

Rust语言的规模很大!它有一个丰富的类型系统、几十个关键字,并包含一些其他语言所没有的特性。这些因素叠加起来,就形成了一个陡峭的学习曲线。为了让学习的过程易于管理,我建议逐步地学习Rust。从语言的最小子集开始,当你需要进一步学习某些细节时,再给自己留出时间来学习。这就是本书所采取的方法。高级的概念将会被推迟到比较靠后的、合适的章节中再来讲解。

1.8.5 炒作

对于发展得过快和被夸张的宣传过度消费的情况,Rust社区秉持非常谨慎的态度。然而,有不少软件项目都遇到过一个问题,在项目相关的邮件中会出现类似这样的建议:“你考虑过用Rust来重写这个程序吗?”不幸的是,用Rust编写的软件仍然是软件。Rust语言并不能避免所有的安全性(security)问题,而且它也没有能够解决软件工程中所有弊病的灵丹妙药。