转载

Rust 1.3 发布,新的子字符串匹配算法

Rust 1.3 发布,该版本最显著的变化是 announcement API 的稳定性及性能的提升。此外,还有新的子字符串匹配算法,一个快速的 zero-filling 方法用于初始化和调整向量,提升了 Read::read_to_end 函数的速度(via lwn.net )  。

Rust 1.3 发行日志 的更新列表如下:

Highlights

  • The new object lifetime defaults have been turned on after a cycle of warnings about the change. Now types like &'a Box<Trait> (or &'a Rc<Trait> , etc) will change from being interpreted as &'a Box<Trait+'a> to &'a Box<Trait+'static> .

  • The Rustonomicon is a new book in the official documentation that dives into writing unsafe Rust.

  • The Duration API, has been stabilized . This basic unit of timekeeping is employed by other std APIs, as well as out-of-tree time crates.

Breaking Changes

  • The new object lifetime defaults have been turned on after a cycle of warnings about the change.

  • There is a known regression in how object lifetime elision is interpreted, the proper solution for which is undetermined.

  • The #[prelude_import] attribute, an internal implementation detail, was accidentally stabilized previously. It has been put behind the prelude_import feature gate . This change is believed to break no existing code.

  • The behavior of size_of_val and align_of_val is more sane for dynamically sized types . Code that relied on the previous behavior is thought to be broken.

  • The dropck rules, which checks that destructors can't access destroyed values, have been updated to match the RFC . This fixes some soundness holes, and as such will cause some previously-compiling code to no longer build.

Language

  • The new object lifetime defaults have been turned on after a cycle of warnings about the change.

  • Semicolons may now follow types and paths in macros .

  • The behavior of size_of_val and align_of_val is more sane for dynamically sized types . Code that relied on the previous behavior is not known to exist, and suspected to be broken.

  • 'static variables may now be recursive .

  • ref bindings choose between Deref and DerefMut implementations correctly.

  • The dropck rules, which checks that destructors can't access destroyed values, have been updated to match the RFC .

Libraries

  • The Duration API, has been stabilized , as well as the std::time module, which presently contains only Duration .

  • Box<str> and Box<[T]> both implement Clone .

  • The owned C string, CString , implements Borrow and the borrowed C string, CStr , implements ToOwned . The two of these allow C strings to be borrowed and cloned in generic code.

  • CStr implements Debug .

  • AtomicPtr implements Debug .

  • Error trait objects can be downcast to their concrete types in many common configurations, using the is , downcast , downcast_ref and downcast_mut methods, similarly to the Any trait.

  • Searching for substrings now employs the two-way algorithm instead of doing a naive search. This gives major speedups to a number of methods, including contains , find , rfind , split . starts_with and ends_with are also faster.

  • The performance of PartialEq for slices is much faster .

  • The Hash trait offers the default method, hash_slice , which is overridden and optimized by the implementations for scalars.

  • The Hasher trait now has a number of specialized write_* methods for primitive types, for efficiency.

  • The I/O-specific error type, std::io::Error , gained a set of methods for accessing the 'inner error', if any: get_ref , get_mut , into_inner . As well, the implementation of std::error::Error::cause also delegates to the inner error.

  • process::Child gained the id method, which returns a u32 representing the platform-specific process identifier.

  • The connect method on slices is deprecated, replaced by the new join method (note that both of these are on the unstable SliceConcatExt trait, but through the magic of the prelude are available to stable code anyway).

  • The Div operator is implemented for Wrapping types.

  • DerefMut is implemented for String .

  • Performance of SipHash (the default hasher for HashMap ) is better for long data .

  • AtomicPtr implements Send .

  • The read_to_end implementations for Stdin and File are now specialized to use uninitalized buffers for increased performance .

  • Lifetime parameters of foreign functions are now resolved properly .

Misc

  • Rust can now, with some coercion, produce programs that run on Windows XP , though XP is not considered a supported platform.

  • Porting Rust on Windows from the GNU toolchain to MSVC continues ( 1 , 2 , 3 , 4 ). It is still not recommended for use in 1.3, though should be fully-functional in the 64-bit 1.4 beta .

  • On Fedora-based systems installation will properly configure the dynamic linker .

  • The compiler gained many new extended error descriptions, which can be accessed with the --explain flag.

  • The dropck pass, which checks that destructors can't access destroyed values, has been rewritten . This fixes some soundness holes, and as such will cause some previously-compiling code to no longer build.

  • rustc now uses LLVM to write archive files where possible . Eventually this will eliminate the compiler's dependency on the ar utility.

  • Rust has preliminary support for i686 FreeBSD (it has long supported FreeBSD on x86_64).

  • The unused_mut , unconditional_recursion , improper_ctypes , and negate_unsigned lints are more strict.

  • If landing pads are disabled (with -Z no-landing-pads ), panic! will kill the process instead of leaking .

更多内容可查看: Rust-1.3

Rust 是 Mozilla 的一个新的编程语言,由web语言的领军人物Brendan Eich(js之父),Dave Herman以及Mozilla公司的Graydon Hoare 合力开发。

文章转载自: 开源中国社区 [ http://www.oschina.net

]

本文标题:Rust 1.3 发布,新的子字符串匹配算法

本文地址:

http://www.oschina.net/news/66299/rust-1-3
正文到此结束
Loading...