Rust一直都在不断在前进与快速的发展中:我们迎来了Rust 1.3稳定版。(完整的版本发布详情参见本文下半部分)
1.3稳定版中重大改进
这是带有 Rustonomicon 的第一个先行发布版本,加入了Rust编程指南电子书《The Dark Arts of Advanced and Unsafe Rust Programming》,虽然它还只是草案形式,但是这本书已经覆盖了Rust的很多方面。
在Rust 1.3的库中,很多API被稳定下来,包括新的Duration API和Hash/Hasher。未来的1.5版本中将对std::time模块进行功能改进并稳定。
Rust 1.3对性能进行了改进,主要集中在标准库这一块:
- 子串匹配使用了 更高效的算法 ;
- 更快的 零填充方法 ,更快的Read::read_to_end 实现;
- Read::read_to_end 的实现专门针对标准输入和文件,从而在速度上有一个额外的提升;
- 在切片上的PartialEq操作 更快速 。
Rust已经初步支持 Windows XP ,我们将继续在Windows系统上进行投入,但并不打算将Windows XP 作为"第一梯队"的平台,现在可以在XP上构建Rust代码,但是要避免使用一些尚未支持XP的标准库。关于MSVC工具链的集成工作正在进行中,现在在1.4测试版中已经可以完全支持在64位的Windows系统中运行。
Cargo已经支持 早期的RFC 中所指定的规则。我们的想法是,依赖约束不要影响纯编译的能力,这反过来又使得它更容易调整在生态系统中的一些不必要的麻烦处理方式。
以下为Rust 1.3的完整特性:
1.3.0 版本(2015-09-17)
新特性
- 新的 对象生命周期 ,&'a Box<Trait>将由原来的释意&'a Box<Trait+'a>变成&'a Box<Trait+'static>;
- 新增电子书 Rustonomicon 作为指导编写unsafe rust 模块的官方文档;
- Duration API已经被 稳定下来 ,并被其它标准库和第三方模块使用。
非兼容性的修改
- 新的 对象生命周期 :对于对象生命周期省略的解释已经回归,但是最合适的解释方案还没有结论;
- #[prelude_import]属性的内部实现细节先前已经被稳定下来,新版中对其的改动将打破已有的代码;
- size_of_value 和 align_of_val 对于大小可调节的类型的处理更智能,依赖之前实现的代码将可能无法运行;
- dropck规则将确保析构函数不能访问已经销毁的值,它已经被更新并符合RFC标准,修复了一些稳定性方面的bug,这些将导致以前能够编译的代码无法构建。
语言
- 新的对象生命周期:对于对象生命周期省略的解释已经回归,但是最合适的解释方案还没有结论;
- 分号现在可以出现类型与宏定义中;
- size_of_value 和 align_of_val 对于大小可调节的类型的处理更智能,依赖之前实现的代码将可能无法运行;
- 'static变量现在能够是 递归 的;
- ref绑定能够正确地在 Deref 和 DerefMut 之间做出选择;
- dropck规则将确保析构函数不能访问已经销毁的值,它已经被更新并符合 RFC 标准,修复了一些稳定性方面的bug,这些将导致以前能够编译的代码无法构建。
库
- Duration API已经 稳定 ,std::time模块其目前仅包含Duration;
- Box<str>和Box<[T]>都实现了Clone;
- 拥有所有权的C字符串 CString 实现了 Borrow ,借来的C字符串 CStr ,实现了 ToOwned ,Borrow和ToOwned的实现使得在范型代码中可以对C字符串进行Borrow和Clone操作;
- CStr实现了 Debug ;
- AtomicPtr实现了Debug;
- Error接口对象能够被降阶到它所指向的具体类型,可以像使用Any接口一样地去使用它的is、downcast、downcast_ref和downcast_mut方法;
- 字串搜索现在采用更高效的“two-way”算法取代单纯的进行一次搜索操作的实现方式,这给对包括contain、find、split、starts_with和ends_with等方法带来了极大的速度提升;
- 切片的PartialEq操作速度更快;
- 散列接口提供了默认的方法hash_slice,通过重载和优化hash_slice的实现对对标量进行了优化;
- 散列器接口现在有一些专门为基本类型提供的WRITE_*系列方法,目的是为了提高效率;
- I/O错误类型增加了一个方法集合用于访问内部的错误代码,std::error::Error::casuse的实现也是通过代理到内部错误代码来实现;
- process::Child新增加id方法用于返回平台独立的进程标志符;
- 切片上的connect方法已被弃用,取而代之的是新的join方法(注意,这两个方法都在不稳定SliceConcatExt);
- Wrapper类型实现了Div运算符号;
- String实现了DerefMut;
- SipHash对于长数据能够获得更好的性能;
- AtomicPtr实现了Send;
- Stdin和File实现的read_to_end现在使用未初始化的缓存以提高性能;
- 外界函数的生命周期参数被移除了。
其它
- 现在Rust在定程序可以生成在Windows XP上运行的程序,尽管XP不在被支持的平台列表之中;
- 现在移植GNU工具链到MSVC的工作还在继续,但仍不推荐在1.3中使用,即使在1.4 beta版中将对64位系统中提供完整的功能支持;
- 在基于Fedora的发行版的系统中,安装将正确的配置动态链接器;
- 编译器增加了许多新的扩展错误描述,可以通过--explain选项访问;
- 用于约束析构函数不能访问已销毁值的dropck已经被重写,修改了一些稳健性的漏洞,这是非向后兼容的;
- rustc现在在可能情况下使用LLVM写归档文件,最终目标是消除对于ar工具的依赖;
- Rust开始提供对于i686平台上FreeBSD的初步支持(它长期支持x86-64平台上的FreeBSD);
- unused_mut、unconditional_recursion、improper_ctypes和negate_unsigned lints更严格;
- 如果着陆垫被禁止(使用-Z无着陆垫),异常将杀死泄漏的进程。
Rust 1.3的贡献者
Rust是一个社区驱动的语言,我们真诚的感谢Rust1.3版中的131位贡献者:
- Aaron Turon
- Adam Heins
- Agoston Szepessy
- Aidan Hobson Sayers
- Akos Kiss
- Alex Crichton
- Alex Newman
- Alexis Beingessner
- Alisdair Owens
- Andreas Tolfsen
- ……
原文链接: Announcing Rust 1.3 和 Version 1.3.0 (2015-09-17) (译者/再多一度 责编/钱曙光)
CSDN Rust 学习交流群拥有多位Rust资深研究者,如果你想零距离接触大牛和贡献者,请加群主微信 qshuguang2008 或扫描下方二维码申请入群,备注:实名+公司名+Rust。
编辑推荐本站 Rust 资源:
- 【专家极力推荐】Rust开发技术学习路线(你想要的都在这里!)
- 【在线视频分享】 以coroutine-rs为例深入浅出Rust协程库
- 【微信群分享】 冯耀明:Java和Rust在实现多线程编程时的异同
- 【微信群分享】 王川:Rust与异步并发的那些事儿
- 【微信群分享】 唐刚:Rust是近15年最佳工程实践的集大成者
- 【技术文章】 批判Rust语言,以及C/C++为什么永远不会死
- 【技术文章】 为什么你需要近距离接触Rust 1.0
- 【技术文章】 使用Nickel开发Web应用:从第一行代码到Heroku部署
- 【技术文章】 我眼中的编程语言Rust和GO
- 【专访】 专访冯耀明:Rust具有C的速度且不用担心内存泄露
- 【专访】 专访Elton:浅谈C++、Go的挑战者Rust
- 【专访】 专访Liigo:我为什么要选择Rust?
- 【Rust一周集锦】(一)、(二)、(三)