-
Notifications
You must be signed in to change notification settings - Fork 13k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add release notes for 1.0.0-beta #23959
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,102 @@ | ||
Version 1.0.0-beta (April 2015) | ||
------------------------------------- | ||
|
||
* ~1100 changes, numerous bugfixes | ||
|
||
* Highlights | ||
|
||
* The big news is that the vast majority of the standard library | ||
is now `#[stable]` -- 75% of the non-deprecated API surface at | ||
last count. Numerous crates are now running on stable | ||
Rust. Starting with this release, it is not possible to use | ||
unstable features on a stable build. | ||
* Arithmetic on basic integer types now | ||
[checks for overflow in debug builds][overflow]. | ||
|
||
* Language | ||
|
||
* [`Send` no longer implies `'static`][send-rfc], which made | ||
possible the [`thread::scoped` API][scoped]. Scoped threads can | ||
borrow data from their parent's stack frame -- safely! | ||
* [UFCS now supports trait-less associated paths][moar-ufcs] like | ||
`MyType::default()`. | ||
* Primitive types [now have inherent methods][prim-inherent], | ||
obviating the need for extension traits like `SliceExt`. | ||
* Methods with `Self: Sized` in their `where` clause are | ||
[considered object-safe][self-sized], allowing many extension | ||
traits like `IteratorExt` to be merged into the traits they | ||
extended. | ||
* You can now [refer to associated types][assoc-where] whose | ||
corresponding trait bounds appear only in a `where` clause. | ||
* The final bits of [OIBIT landed][oibit-final], meaning that | ||
traits like `Send` and `Sync` are now library-defined. | ||
* A [Reflect trait][reflect] was introduced, which means that | ||
downcasting via the `Any` trait is effectively limited to | ||
concrete types. This helps retain the potentially-important | ||
"parametricity" property: generic code cannot behave differently | ||
for different type arguments. | ||
* The `unsafe_destructor` feature is now deprecated in favor of | ||
the [new `dropck`][dropck]. This change is a major reduction in | ||
unsafe code. | ||
* Trait coherence was [revised again][fundamental], this time with | ||
an eye toward API evolution over time. | ||
|
||
* Libraries | ||
|
||
* The new path and IO modules are complete and `#[stable]`. This | ||
was the major library focus for this cycle. | ||
* The path API was [revised][path-normalize] to normalize `.`, | ||
adjusting the tradeoffs in favor of the most common usage. | ||
* A large number of remaining APIs in `std` were also stabilized | ||
during this cycle; about 75% of the non-deprecated API surface | ||
is now stable. | ||
* The new [string pattern API][string-pattern] landed, which makes | ||
the string slice API much more internally consistent and flexible. | ||
* A shiny [framework for Debug implementations][debug-builder] landed. | ||
This makes it possible to opt in to "pretty-printed" debugging output. | ||
* A new set of [generic conversion traits][conversion] replaced | ||
many existing ad hoc traits. | ||
* Generic numeric traits were | ||
[completely removed][num-traits]. This was made possible thanks | ||
to inherent methods for primitive types, and the removal gives | ||
maximal flexibility for designing a numeric hierarchy in the future. | ||
* The `Fn` traits are now related via [inheritance][fn-inherit] | ||
and provide ergonomic [blanket implementations][fn-blanket]. | ||
* The `Index` and `IndexMut` traits were changed to | ||
[take the index by value][index-value], enabling code like | ||
`hash_map["string"]` to work. | ||
* `Copy` now [inherits][copy-clone] from `Clone`, meaning that all | ||
`Copy` data is known to be `Clone` as well. | ||
|
||
* Infrastructure | ||
|
||
* Metadata was tuned, shrinking binaries [by 27%][metadata-shrink]. | ||
* Much headway was made on ecosystem-wide CI, making it possible | ||
to [compare builds for breakage][ci-compare]. | ||
|
||
[send-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0458-send-improvements.md | ||
[scoped]: http://static.rust-lang.org/doc/master/std/thread/fn.scoped.html | ||
[moar-ufcs]: https://github.com/rust-lang/rust/pull/22172 | ||
[prim-inherent]: https://github.com/rust-lang/rust/pull/23104 | ||
[overflow]: https://github.com/rust-lang/rust/pull/22532 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. should this point instead at the integer overflow RFC? Or did you want to keep focus on what was actually implemented, versus what pieces still may remain unimplemented from the RFC? (Or is the RFC PR itself not a useful document to point to ... in which case I would suggest pointing to the text of the merged RFC itself?) I'm just not sure the implementation PR is itself the most useful pointer to provide for this document. |
||
[metadata-shrink]: https://github.com/rust-lang/rust/pull/22971 | ||
[self-sized]: https://github.com/rust-lang/rust/pull/22301 | ||
[assoc-where]: https://github.com/rust-lang/rust/pull/22512 | ||
[string-pattern]: https://github.com/rust-lang/rust/pull/22466 | ||
[oibit-final]: https://github.com/rust-lang/rust/pull/21689 | ||
[reflect]: https://github.com/rust-lang/rust/pull/23712 | ||
[debug-builder]: https://github.com/rust-lang/rfcs/blob/master/text/0640-debug-improvements.md | ||
[conversion]: https://github.com/rust-lang/rfcs/pull/529 | ||
[num-traits]: https://github.com/rust-lang/rust/pull/23549 | ||
[index-value]: https://github.com/rust-lang/rust/pull/23601 | ||
[dropck]: https://github.com/rust-lang/rfcs/pull/769 | ||
[fundamental]: https://github.com/rust-lang/rfcs/pull/1023 | ||
[ci-compare]: https://gist.github.com/brson/a30a77836fbec057cbee | ||
[fn-inherit]: https://github.com/rust-lang/rust/pull/23282 | ||
[fn-blanket]: https://github.com/rust-lang/rust/pull/23895 | ||
[copy-clone]: https://github.com/rust-lang/rust/pull/23860 | ||
[path-normalize]: https://github.com/rust-lang/rust/pull/23229 | ||
|
||
Version 1.0.0-alpha.2 (February 2015) | ||
------------------------------------- | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You may want to weaken this claim slightly. For example, there's still the option of different behavior based on the value of
mem::size_of::<T>()
, among other options. Up to you.