mirror of
https://github.com/rust-lang/rust
synced 2024-09-15 22:50:55 +00:00
1.3 release notes
This commit is contained in:
parent
ec3ec1073b
commit
f57bb9df28
208
RELEASES.md
208
RELEASES.md
|
@ -1,5 +1,211 @@
|
||||||
|
Version 1.3.0 (September 2015)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
* ~900 changes, numerous bugfixes
|
||||||
|
|
||||||
|
Highlights
|
||||||
|
----------
|
||||||
|
|
||||||
|
* The [new object lifetime defaults][nold] have been [turned
|
||||||
|
on][nold2] 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][nom] is a new book in the official documentation
|
||||||
|
that dives into writing unsafe Rust.
|
||||||
|
* The [`Duration`] API, [has been stabilized][ds]. 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][nold] have been [turned
|
||||||
|
on][nold2] after a cycle of warnings about the change.
|
||||||
|
* There is a known [regression][lr] 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][pi]. This change is
|
||||||
|
believed to break no existing code.
|
||||||
|
* The behavior of [`size_of_val`][dst1] and [`align_of_val`][dst2] is
|
||||||
|
[more sane for dynamically sized types][dst3]. 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][dropck] to match the
|
||||||
|
[RFC][dropckrfc]. This fixes some soundness holes, and as such will
|
||||||
|
cause some previously-compiling code to no longer build.
|
||||||
|
|
||||||
|
Language
|
||||||
|
--------
|
||||||
|
|
||||||
|
* The [new object lifetime defaults][nold] have been [turned
|
||||||
|
on][nold2] after a cycle of warnings about the change.
|
||||||
|
* Semicolons may [now follow types and paths in
|
||||||
|
macros](https://github.com/rust-lang/rust/pull/27000).
|
||||||
|
* The behavior of [`size_of_val`][dst1] and [`align_of_val`][dst2] is
|
||||||
|
[more sane for dynamically sized types][dst3]. Code that relied on
|
||||||
|
the previous behavior is not known to exist, and suspected to be
|
||||||
|
broken.
|
||||||
|
* `'static` variables [may now be recursive][st].
|
||||||
|
* `ref` bindings choose between [`Deref`] and [`DerefMut`]
|
||||||
|
implementations correctly.
|
||||||
|
* The `dropck` rules, which checks that destructors can't access
|
||||||
|
destroyed values, [have been updated][dropck] to match the
|
||||||
|
[RFC][dropckrfc].
|
||||||
|
|
||||||
|
Libraries
|
||||||
|
---------
|
||||||
|
|
||||||
|
* The [`Duration`] API, [has been stabilized][ds], 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][e]
|
||||||
|
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][search]
|
||||||
|
instead of doing a naive search. This gives major speedups to a
|
||||||
|
number of methods, including [`contains`][sc], [`find`][sf],
|
||||||
|
[`rfind`][srf], [`split`][ss]. [`starts_with`][ssw] and
|
||||||
|
[`ends_with`][sew] are also faster.
|
||||||
|
* The performance of `PartialEq` for slices is [much faster][ps].
|
||||||
|
* 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`][ie], gained a set of
|
||||||
|
methods for accessing the 'inner error', if any: [`get_ref`][iegr],
|
||||||
|
[`get_mut`][iegm], [`into_inner`][ieii]. As well, the implementation
|
||||||
|
of [`std::error::Error::cause`][iec] also delegates to the inner
|
||||||
|
error.
|
||||||
|
* [`process::Child`][pc] 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`][dms].
|
||||||
|
* Performance of SipHash (the default hasher for `HashMap`) is
|
||||||
|
[better for long data][sh].
|
||||||
|
* [`AtomicPtr`] implements [`Send`].
|
||||||
|
* The [`read_to_end`] implementations for [`Stdin`] and [`File`]
|
||||||
|
are now [specialized to use uninitalized buffers for increased
|
||||||
|
performance][rte].
|
||||||
|
* Lifetime parameters of foreign functions [are now resolved
|
||||||
|
properly][f].
|
||||||
|
|
||||||
|
Misc
|
||||||
|
----
|
||||||
|
|
||||||
|
* Rust can now, with some coercion, [produce programs that run on
|
||||||
|
Windows XP][xp], though XP is not considered a supported platform.
|
||||||
|
* Porting Rust on Windows from the GNU toolchain to MSVC continues
|
||||||
|
([1][win1], [2][win2], [3][win3], [4][win4]). It is still not
|
||||||
|
recommended for use in 1.3, though should be fully-functional
|
||||||
|
in the [64-bit 1.4 beta][b14].
|
||||||
|
* On Fedora-based systems installation will [properly configure the
|
||||||
|
dynamic linker][fl].
|
||||||
|
* 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][dropck]. 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][ar].
|
||||||
|
Eventually this will eliminate the compiler's dependency on the ar
|
||||||
|
utility.
|
||||||
|
* Rust has [preliminary support for i686 FreeBSD][fb] (it has long
|
||||||
|
supported FreeBSD on x86_64).
|
||||||
|
* The [`unused_mut`][lum], [`unconditional_recursion`][lur],
|
||||||
|
[`improper_ctypes`][lic], and [`negate_unsigned`][lnu] lints are
|
||||||
|
more strict.
|
||||||
|
* If landing pads are disabled (with `-Z no-landing-pads`), [`panic!`
|
||||||
|
will kill the process instead of leaking][nlp].
|
||||||
|
|
||||||
|
[`Any`]: http://doc.rust-lang.org/nightly/std/any/trait.Any.html
|
||||||
|
[`AtomicPtr`]: http://doc.rust-lang.org/nightly/std/sync/atomic/struct.AtomicPtr.html
|
||||||
|
[`Borrow`]: http://doc.rust-lang.org/nightly/std/borrow/trait.Borrow.html
|
||||||
|
[`CStr`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html
|
||||||
|
[`CString`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html
|
||||||
|
[`Debug`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Debug.html
|
||||||
|
[`DerefMut`]: http://doc.rust-lang.org/nightly/std/ops/trait.DerefMut.html
|
||||||
|
[`Deref`]: http://doc.rust-lang.org/nightly/std/ops/trait.Deref.html
|
||||||
|
[`Div`]: http://doc.rust-lang.org/nightly/std/ops/trait.Div.html
|
||||||
|
[`Duration`]: http://doc.rust-lang.org/nightly/std/time/struct.Duration.html
|
||||||
|
[`Error`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html
|
||||||
|
[`File`]: http://doc.rust-lang.org/nightly/std/fs/struct.File.html
|
||||||
|
[`Hash`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html
|
||||||
|
[`Hasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html
|
||||||
|
[`Send`]: http://doc.rust-lang.org/nightly/std/marker/trait.Send.html
|
||||||
|
[`SliceConcatExt`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html
|
||||||
|
[`Stdin`]: http://doc.rust-lang.org/nightly/std/io/struct.Stdin.html
|
||||||
|
[`ToOwned`]: http://doc.rust-lang.org/nightly/std/borrow/trait.ToOwned.html
|
||||||
|
[`Wrapping`]: http://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html
|
||||||
|
[`connect`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html#method.connect
|
||||||
|
[`downcast_mut`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast_mut
|
||||||
|
[`downcast_ref`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast_ref
|
||||||
|
[`downcast`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast
|
||||||
|
[`hash_slice`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html#method.hash_slice
|
||||||
|
[`id`]: http://doc.rust-lang.org/nightly/std/process/struct.Child.html#method.id
|
||||||
|
[`is`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.is
|
||||||
|
[`join`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html#method.join
|
||||||
|
[`read_to_end`]: http://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_to_end
|
||||||
|
[ar]: https://github.com/rust-lang/rust/pull/26926
|
||||||
|
[b14]: https://static.rust-lang.org/dist/rust-beta-x86_64-pc-windows-msvc.msi
|
||||||
|
[dms]: https://github.com/rust-lang/rust/pull/26241
|
||||||
|
[dropck]: https://github.com/rust-lang/rust/pull/27261
|
||||||
|
[dropckrfc]: https://github.com/rust-lang/rfcs/blob/master/text/0769-sound-generic-drop.md
|
||||||
|
[ds]: https://github.com/rust-lang/rust/pull/26818
|
||||||
|
[dst1]: http://doc.rust-lang.org/nightly/std/mem/fn.size_of_val.html
|
||||||
|
[dst2]: http://doc.rust-lang.org/nightly/std/mem/fn.align_of_val.html
|
||||||
|
[dst3]: https://github.com/rust-lang/rust/pull/27351
|
||||||
|
[e]: https://github.com/rust-lang/rust/pull/24793
|
||||||
|
[f]: https://github.com/rust-lang/rust/pull/26588
|
||||||
|
[fb]: https://github.com/rust-lang/rust/pull/26959
|
||||||
|
[fl]: https://github.com/rust-lang/rust-installer/pull/41
|
||||||
|
[hs]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html#method.hash_slice
|
||||||
|
[ie]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html
|
||||||
|
[iec]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.cause
|
||||||
|
[iegm]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.get_mut
|
||||||
|
[iegr]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.get_ref
|
||||||
|
[ieii]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.into_inner
|
||||||
|
[lic]: https://github.com/rust-lang/rust/pull/26583
|
||||||
|
[lnu]: https://github.com/rust-lang/rust/pull/27026
|
||||||
|
[lr]: https://github.com/rust-lang/rust/issues/27248
|
||||||
|
[lum]: https://github.com/rust-lang/rust/pull/26378
|
||||||
|
[lur]: https://github.com/rust-lang/rust/pull/26783
|
||||||
|
[nlp]: https://github.com/rust-lang/rust/pull/27176
|
||||||
|
[nold2]: https://github.com/rust-lang/rust/pull/27045
|
||||||
|
[nold]: https://github.com/rust-lang/rfcs/blob/master/text/1156-adjust-default-object-bounds.md
|
||||||
|
[nom]: http://doc.rust-lang.org/nightly/nomicon/
|
||||||
|
[pc]: http://doc.rust-lang.org/nightly/std/process/struct.Child.html
|
||||||
|
[pi]: https://github.com/rust-lang/rust/pull/26699
|
||||||
|
[ps]: https://github.com/rust-lang/rust/pull/26884
|
||||||
|
[rte]: https://github.com/rust-lang/rust/pull/26950
|
||||||
|
[sc]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.contains
|
||||||
|
[search]: https://github.com/rust-lang/rust/pull/26327
|
||||||
|
[sew]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.ends_with
|
||||||
|
[sf]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.find
|
||||||
|
[sh]: https://github.com/rust-lang/rust/pull/27280
|
||||||
|
[srf]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rfind
|
||||||
|
[ss]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split
|
||||||
|
[ssw]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.starts_with
|
||||||
|
[st]: https://github.com/rust-lang/rust/pull/26630
|
||||||
|
[win1]: https://github.com/rust-lang/rust/pull/26569
|
||||||
|
[win2]: https://github.com/rust-lang/rust/pull/26741
|
||||||
|
[win3]: https://github.com/rust-lang/rust/pull/26741
|
||||||
|
[win4]: https://github.com/rust-lang/rust/pull/27210
|
||||||
|
[xp]: https://github.com/rust-lang/rust/pull/26569
|
||||||
|
|
||||||
Version 1.2.0 (2015-08-07)
|
Version 1.2.0 (2015-08-07)
|
||||||
===========================
|
==========================
|
||||||
|
|
||||||
* ~1200 changes, numerous bugfixes
|
* ~1200 changes, numerous bugfixes
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue