Rust语言是一个极其讲究精致的系统级别语言,它瞄准的是取代C/C++,语言的发展和变化很快, 本文介绍Rust语言的优缺点以及与其他语言的大概比较。 优点 首先是没有GC的内存安全型,对于低级系统级的编程语言,直接内存操作是允许的,在运行时出现内存错误如use-after-free或内存泄漏的代价是昂贵的,虽然C++提供很好的工具来处理它,但是这还是需要工程师的纪律,在大型系统中就不难很好解决这个问题。垃圾回收GC是解决内存安全的最普通方式,但是Rust系统并不依靠GC,而是在编译时通过RAII(Resource Acquisition Is Initialization)实现资源自动释放,这样不但能提供内存安全,还提供数据和资源安全。这样能降低开发者手工管理内存的必要,能够自动确保清理工作总是在运行,甚至当任务出现崩溃恐慌时。 动态语言如Python和Ruby也提供类似能力,但是没有Rust这样强大。 第二个优点是无需竞争的并发,Rust能够确保在并发编程中的数据安全,某个时间点同时只能有多个读操作或一个写操作被允许访问共享数据。 第三个优点是提供代数数据类型,除了tuple struct类型以外,Rust还提供enum和模式匹配,这些都是高级类型系统才拥有的功能如今出现在系统级的编程语言中。 第三个优点是基于继承的组合,Rust能基于继承实现组合,Trait是Rust泛型中重要角色。 缺点 水至清则无鱼,对于Rust编译器,每件事都必须得清清楚楚,当遇到灰色情况它会拒绝编译,直至你搞清楚它,这对于代码质量是一个好事情,但是对于讲究开发效率的项目来说就是有点苛刻了。 第二个缺点是GC是二等公民,Rust提供基本的GC(RC),如引用计数 自动计数(Arc),并没有循环检测,它们并不是语言中第一等公民,你最终只能使用Rust的内存管理(stack 和Box)。 第三个缺点是富有表现力不是其目标,充满像动态语言那样富有表现力和优雅不是Rust的目标。 第四个缺点是门槛高,Rust并不是你能在几周内捡起学习马上就精通的那种语言,Rust也许小于C++,但是它的定义比很多语言要大,它不一定适合大多数人群,从另外方面看,门槛高也是过滤器,可以保证代码高质量。 与其他语言比较 与动态语言或脚本语言比较,它们的目标是不同的,动态语言适合快速原型或立即完成实现的任务,而Rust适合大型团队,需要很长的产品周期,长期不断进行维护重构的项目。 动态语言让你起步很快,代价会在后期偿还,而Rust编译器一开始就强迫你正确细节地做事,时间长了效率会不断提高。 与Go语言比较,Go语言相比Rust太简单,太小型化了,Go适合企业软件开发,类似以前的java,另外Go语言是由Google推动的,如果以后公司利益与社区利益冲突如何处理?而Rust则是由非营利组织Mozilla 推动的。 与Nim (正式名称 Nimrod)比较,Nim能编译到C,这样它的性能很好,它非常酷似Python,它是GC语言,但是实时提供对GC行为更多预测,最大的问题是生态系统和成熟度,有待发展和健全。 与 Julia 和D语言比较,Julia是一个拥有好的性能的动态语言,提供REPL和平滑的C调用,它在数字和科学领域比较受欢迎,不是一个通用目标的语言。D语言目标是一个更好的C++,但是其实使用范围不广,几个原因: 早期的Phobos/Tango分离,内存安全完全依赖垃圾回收GC,只不过是一个更好的C++。 Rust语言是一个系统级的语言,未来也许发展对Web的支持。
|