Rust介绍
由来
“Rust”最初是Mozilla公司的 Graydon Hoare的私人项目。
2009年Mozilla开始赞助此项目,并有若干 Mozilla 员工参与 Rust 语言的设计和研发。
2013年8月,Graydon Hoare卸任 Rust 技术负责人职位,由Brian Anderson接任。
2015年5月15日,Rust 1.0版本正式发布。
2017年9月,Brian Anderson离开Mozilla,项目核心团队由 Aaron Turon和 Niko Matsakis接管共同领导,另外,Aaron Turon是 Mozilla的Rust团队的负责人。
Rust的目标是打造运行快且可靠的语言。
Rust连续5年,在Stack Overflow开发者「最受喜爱编程语言」评选中获得第一名。
语言特性
特别注重安全和稳定性的语言
高性能
是指语言本身提供的高性能。除了语言外还会有很多因素营销运行和响应速度,比如服务器配置,网络带宽,架构设计。
它是没有运行时的。运行时是指在运行时才将源代码或中间码,通过解释器翻译成机器码执行。Rust的是编译型语言,编译成机器码,运行时直接运行。C/C++编译型,Java,Python,PHP等属于运行时。Java也有编译过程,但生成的是中间码。Python和PHP没有编译过程,但实际上在运行时也会生成中间码,减少解释时间。拥有解释器的最大优点就在于跨平台,一份源代码,可以在各种平台上运行,只要解释器支持就可以。那Rust怎么解决这个问题?编译器跨平台,代码还是一份,可以编译成不同平台机器码。Go语言是这种解决方案。C/C++也是如此,但比较麻烦的是代码层面可能需要做兼容性处理。编译型语言执行时,就不要需要系统安装相对应的语言解释环境啦,运行速度也快一大截。
它是无GC的。早期的语言都是无GC的,在内存管理方面,完全是靠人为去申请和释放。比如C/C++。但这暴露了一个问题,由于开发人员素质良莠不齐,以及相互协作的不充分,经常出现内存处理不当,导致程序内存溢出,出现安全漏洞、程序崩溃等问题,虽然现在已经很很多好的经验和工程方法避免这类事情发生,但依然会时长发生。在后来的高级语言、解释性语言中,都加入了GC垃圾回收机制,比如Java,Go,Python,PHP。开发人员不需要关注内存的释放,会由系统来进行处理,将判定不在使用的内存进行回收,交还给操作系统。但由于交给解释器去处理,导致影响了程序运行速度。那Rust没有GC机制,运行速度是会加快,那如何解决内存回收的问题?Rust把这个问题再编译阶段进行了解决,在语言层面增加所有权的概念,使用类型的生命周期和引用借用进行约束,解决了这个问题。这个是与其它语言很大不同的地方,是Rust解决安全问题的一个最重要的设计思想。
可靠性
这里也是指语言方面的可靠性。除了语言方面,还会有其他方面影响程序运行的稳定性。比如框架的设计,架构的设计,是否有好的扩展性,监控是否合理,能够及时预警。出现异常情况,如何保证对外的服务正常。比如线路出现问题,如何切换;服务器出问题如何处理;第三方出问题如何解决。
丰富的类型和所有权机制,保证内存方面是安全的,保证多线程方面是安全的。在编译时,进行检查,保证生成的机器码在运行时不会出现内存访问、泄漏和竞争的问题。
类型包括基础类型和集合数据类型,以及自定义的数据类型。通过泛型和trait特性,对类型进行抽象,保证了类型是Rust语言的基础,同时也可以进行任何概念的抽象。
所有权机制是类型实例的所有权,因此整个语言也是安全的,可靠的。
生产力
开发效率。开发效率有很多影响因素,语言的语法、包管理、丰富的第三方库,规范,框架,测试,出色的文档,友好的编译器和清晰的错误提示信息,构建工具,社区支持等。
语言语法来看,是综合了现代比较流行语言的使用特点,尤其是函数式编程方面。在表达语义和使用方面,还是非常清晰和简洁的。但学习的时候,还是要抛开原有语言的经验,去学习Rust语言类型,表达式,分支,循环这些基础的设计思路,才能更好的理解,灵活运用。
包管理和构建工具方面,Rust使用了Cargo工具来进行管理。非常方便好用。从开发调式、编译构建,到单元集成测试,再到依赖包管理,包发布,都可以用Cargo进行,不仅提升开发效率,工程上也更加规范。
出色的文档
包括官方的语言入门文档,包括标准库文档,都非常易读和理解。
第三方库也非常丰富
由于Rust语言的流行,吸引了众多开发者,https://crates.io/ 中已经有4W多个crate,涉及类比包括有命令行、非标准库、开发工具、API绑定、网络编程、web编程、数据结构、嵌入式开发、异步、算法等。
社区支持也尤其重要
遇到一些未知问题,可以及时反馈和修正。
https://users.rust-lang.org/
Rust语言本身就是在社区基础上发展起来的,每个语言的特点、发展方便,都可以在社区进行讨论。寻求帮助或者提出建议都可以在社区发帖讨论。
应用领域
Rust应用在很多领域。由于它是高性能和可靠的,因此可以用在基础设施上,比如我们现在经常见到的一些C/C++编写的软件,Nginx,MySQL,也可以写计算密集型的处理,比如图片、音视频的处理、编解码的处理,也可以写web、游戏等方面的应用,也可以写网络方面的应用,也可以写嵌入式方面的应用,也可以写区块链这样的应用。
命令行
ripgrep
Database
noria tikv
Cryptocurrencies
libra Polkadot
web
Plume lemmy
游戏
zemeroth Veloren
社区的重点发展方向
命令行 WebAssembly 网络(web) 嵌入式