- 语言层面设计展望
Rust 1.0 版发布将近三年了。作为一个高度纪律性,低自由度的语言,Rust 核心规则在三年里没有本质改动,并且在可预见的时间内也没有改变的计划。在此基础上,存在一些计划把部分之前判断为非法的形式增补为合法形式的简写的计划,列在下一个epoch的发布计划之内,包括NLL等功能。
类型系统上,Rust 采用的是enum, struct 等'具体'类型与内存布局对应(一定程度上与C和其他系统编程语言的值类型构造对应),然后利用泛型约束机制,特别是特征系统,描述'抽象'类型构建高级抽象(一定程度上与Haskell和其他函数式编程语言的类型系统相对应)的办法,尽可能的将两者的优势相结合。
在具体类型方面,目前已经基本达到了C语言的水平,但存在一些少数情况如位域(由库提供)、const_fn和CTFE(解决中)、内嵌汇编等等。Rust特色功能(C语言没有的)值得期待的有显式尾递归become(相当于结构化goto)(RFC1888),非固定大小右值(RFC1909),功能转发mixin(RFC1406)、SIMD等等。一些用于改善自引用类型的功能(如?Move)也在讨论中。
在抽象类型方面,目前与这方面较先进的编程语言均在差距,但是由于Rust本身的特性和框架结构,绝不是直接照搬就可以的,还需要积极的探索与现有功能的互动和整合。值得期待的主要有 泛型实例推断impl Trait(RFC 1522, 1951, 2071)、数值泛型(RFC2000)、associated * 里的 泛型关联类型(RFC1598),可变泛型(RFC1935), 左值映射(RFC1546),特化(RFC1210)等等。
- 语言层面实现展望
目前RFC设计稿远远领先于实现,实现也远远领先于stablized feature。
目前Github上issues中,处于Open状态的语言特性Tracking issue 100项,Unstable book 中语言特性feature gate有106项。可以说即使现在开始停止批准新功能,也许需要两年甚至更长的时间让现有设计稳定化。总体来说是任重而道远。
在近期团队正在开展和即将开展的项目有编译期内部的并行化,LLVM codegen的并行化和进一步优化,MIR borrowck的实现,MIRI(MIR 解释器)的整合,基于chalk的特征推理系统的实现等等。
评论区
写评论编译时函数求值,rust里叫const_fn
CTFE是啥?
显然不是……这些不用说2018年,2019年能完成就是奇迹了……标题里不是说了FAQ嘛……
这该不会是为了 2018 年路线图的博客吧?! https://blog.rust-lang.org/2018/01/03/new-years-rust-a-call-for-community-blogposts.html