this-week-in-rust/content/2015-02-02-this-week-in-rus...

237 lines
10 KiB
Markdown

Title: This Week in Rust 68
Date: 2015-02-02
Category: This Week in Rust
Hello and welcome to another issue of *This Week in Rust*!
[Rust](http://rust-lang.org) is a systems language pursuing the trifecta:
safety, concurrency, and speed. This is a weekly summary of its progress and
community. Want something mentioned? [Send me an
email!](mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion)
Want to get involved? [We love
contributions](https://github.com/rust-lang/rust/wiki/Note-guide-for-new-contributors).
*This Week in Rust* is openly developed [on GitHub](https://github.com/cmr/this-week-in-rust).
If you find any errors or omissions in this week's issue, [please submit a PR](https://github.com/cmr/this-week-in-rust/pulls).
# What's cooking on master?
86 pull requests were [merged in the last week][merged], and 1 [RFCs][rfcs].
[merged]: https://github.com/rust-lang/rust/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-26..2015-02-01
[rfcs]: https://github.com/rust-lang/rfcs/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-26..2015-02-01
Now you can follow breaking changes *[as they happen][BitRust]*!
[BitRust]: http://bitrust.octarineparrot.com/
## Breaking Changes
* `for` loops [now operate on the `IntoIterator` trait][into], which
eliminates the need to call `.iter()`, etc. to iterate over
collections. There are some new subtleties to remember though
regarding what sort of iterators various types yield, in particular
that `for foo in bar { }` yields values from a move iterator,
destroying the original collection. [RFC][into-rfc].
* `std::io` was [renamed][oldio] to `std::old_io` in preparation
for implementing the [I/O overhaul RFC][oldio-rfc].
* The return type of `Fn`, `FnMut`, and `FnOnce` [are associated
types][fnassoc]. The unsugared forms of these traits are unstable
so this shouldn't break stable code. [RFC][fnassoc-rfc].
* `FullRange`, the type that represents a slice over a complete
collection, has been [renamed to `RangeFull`][fullrange], and
removed from the prelude.
[into]: https://github.com/rust-lang/rust/pull/20790
[into-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0235-collections-conventions.md#intoiterator-and-iterable
[fnassoc]: https://github.com/rust-lang/rust/pull/21019
[fnassoc-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0587-fn-return-should-be-an-associated-type.md
[oldio]: https://github.com/rust-lang/rust/pull/21543
[oldio-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
[fullrange]: https://github.com/rust-lang/rust/pull/21717
## Other Changes
* The standard library now [partipates in feature gating][feat], so
use of unstable libraries now requires a `#![feature(...)]`
attribute. The impact of this change is [described on the
forum][feat-forum]. [RFC][feat-rfc].
* References to types that implement `Deref<U>` now [automatically
coerce to references][deref] to the dereferenced type `U`, e.g. `&T
where T: Deref<U>` automatically coerces to `&U`. This should
eliminate many unsightly uses of `&*`, as when converting from
references to vectors into references to slices. [RFC][deref-rfc].
* The `private_no_mangle_fns` lint [warns about functions that are
`#[no_mangle]` but not exported][nomang].
[feat]: https://github.com/rust-lang/rust/pull/21248
[feat-forum]: http://users.rust-lang.org/t/psa-important-info-about-rustcs-new-feature-staging/82/5
[feat-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0507-release-channels.md
[deref]: https://github.com/rust-lang/rust/pull/21351
[deref-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0241-deref-conversions.md
[nomang]: https://github.com/rust-lang/rust/pull/21495
## New Contributors
* Carl Lerche
* Dominik Inführ
* emanueLczirai
* jatinn
* John Hodge
* Loïc Damien
* Luke Steensen
* Nelson Chen
* Orpheus Lummis
* Pyfisch
* Sébastien Marie
* Tyler Thrailkill
* Victory
* Vojtech Kral
# Approved RFC's
* [RFC 517][rfc-517] on I/O has been [updated with material on
`std::env`][env].
[rfc-517]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
[env]: https://github.com/rust-lang/rfcs/pull/578
# New RFC's
* [Allow closure expressions to expand to a `&` or `&mut`
temporary][rfc-756-pr]. Make it so you don't have to write `&` or
`&mut` in front of closure literals in some circumstances.
* [Extensible enums][rfc-757-pr]. Adds a type of enum that can be
extended to new variants without breaking downstream users by
disabling exhaustiveness checks.
* [Sound generic drop][rfc-769-pr]. Makes `Drop` safely implementable
on more types, eliminating `#[unsafe_destructor]`.
* [io error handling design][rfc-770-pr]. Deals with the semantics of
closing I/O types.
* [std::iter::once][rfc-771-pr]. Adds a fn `once` that returns an
iterator yielding a single element.
* [Add linear type facility][rfc-776-pr]. Adds a type that requires
explicit drop.
[rfc-756-pr]: https://github.com/rust-lang/rfcs/pull/756
[rfc-757-pr]: https://github.com/rust-lang/rfcs/pull/757
[rfc-769-pr]: https://github.com/rust-lang/rfcs/pull/769
[rfc-770-pr]: https://github.com/rust-lang/rfcs/pull/770
[rfc-771-pr]: https://github.com/rust-lang/rfcs/pull/771
[rfc-776-pr]: https://github.com/rust-lang/rfcs/pull/776
# Community
## Announcements
* [Welcome to the new Rust forum][users]. There's a new user forum.
* [Weekly-meetings/2015-01-27][mtg]: Slow meeting.
[mtg]: https://github.com/rust-lang/meeting-minutes/blob/master/weekly-meetings/2015-01-27.md
[users]: http://users.rust-lang.org/t/welcome-to-the-new-rust-forum/21
## Blog Posts
* [Heartbleed in Rust][heartbleed]. It is possible to write
Heartbleed-style bugs in Rust, though there is nothing to be alarmed
about - Rust still rules.
[HN][heartbleed-hn]. [/r/rust][heartbleed-r-rust]. [/r/programming][heartbleed-r-programming].
* [Some notes on Rust, the language][rtl]. First thread about Rust at
LtU in a while.
[HN][rtl-hn]. [/r/rust][rtl-r-rust]. [/r/programming][rtl-r-programming].
* [An Adventure in API Design and Concurrency in Rust][adv].
* [On Rust and Nim][nim]. Similar but
different. [/r/rust][nim-r-rust]. [/r/programming][nim-r-programming].
* [updated crates.io dependency graph][deps]. The registry is growing
fast. Thanks /u/corevette.
[heartbleed]: http://www.tedunangst.com/flak/post/heartbleed-in-rust
[heartbleed-hn]: https://news.ycombinator.com/item?id=8983771
[heartbleed-r-rust]: https://www.reddit.com/r/rust/comments/2uii0u/heartbleed_in_rust/
[heartbleed-r-programming]: https://www.reddit.com/r/programming/comments/2uinge/heartbleed_in_rust/
[rtl]: http://lambda-the-ultimate.org/node/5113
[rtl-hn]: http://news.ycombinator.com/item?id=8979620
[rtl-r-programming]: https://www.reddit.com/r/programming/comments/2uedrz/some_notes_on_rust_the_language/
[rtl-r-rust]: https://www.reddit.com/r/rust/comments/2uef23/some_notes_on_rust_the_language/
[nim]: https://andreaferretti.github.io/on-rust-and-nim/
[nim-r-rust]: https://www.reddit.com/r/rust/comments/2u6hvs/on_rust_and_nim/
[nim-r-programming]: https://www.reddit.com/r/programming/comments/2u8tih/on_rust_and_nim/
[deps]: http://froosky.rwell.org/crates-2015-01-31.svg
[adv]: http://damienradtke.com/adventures-in-concurrency-1/
## Discussions
* [Pre-RFC: resolve support for hyphens in crate names][hyph]. People
love the aesthetics of hyphens-between-words, but hyphens are not
valid identifiers.
* [Crates.io and namespacing][namespace].
* [Testing Rust's I/O Speed vs. C][iospeed]. Not such a good showing.
* There was bigtime [drama] after strcat stopped [maintaining his Arch
packages][arch].
[hyph]: http://internals.rust-lang.org/t/pre-rfc-resolve-support-for-hyphens-in-crate-names/1459
[namespace]: https://www.reddit.com/r/rust/comments/2ud8uf/cratesio_and_namespacing/
[drama]: https://www.reddit.com/r/rust/comments/2u7p8e/i_have_archived_the_thread_from_yesterday_please/
[arch]: https://www.reddit.com/r/rust/comments/2tx7vj/psa_thestingers_rust_packages_for_arch_linux_are/
[iospeed]: https://www.reddit.com/r/rust/comments/2u057m/testing_rusts_io_speed_vs_c/
## Videos
* [SHA1 Performance Quest][sha1]. Implementing SHA1 in Rust.
* [Trace Quest 5][tq5]. A raytracer in Rust.
[sha1]: https://www.youtube.com/playlist?list=PLMHbQxe1e9MnDKy7FKXZwMJ6t_RCxpHqD
[tq5]: http://youtu.be/uhYRveqF27U?list=PLMHbQxe1e9MlR80JVZCa0uJf9cz_PxlCY
## New Projects
* [soa]. Struct-of-array types, a sometimes more efficient version of
`Vec<(A, B)>` from cgaebel. [/r/rust][soa-r-rust].
* [valico]. JSON schema validator, from the [rustless] RESTful
micro-framework project.
* [FFI-Platypus-Lang-Rust][perl]. Call Rust from Perl.
* [glassful]. kmc strikes again with a syntax extension that translates
from Rust syntax to OpenGL Shader Language. [/r/rust][glassful-r-rust].
* [secretshare]. Shamir's secret sharing.
* [chip8-rust]. A emulator for the Chip-8 VM used to implement some
old video games. Uses Piston for graphics.
* [snowflake]. Library for generating process-unique IDs.
* [rust-dev-box]. A Vagrantfile for working on Rust.
* [rust-roller]. A simple console dice-rolling app using the sweet
[rustbox] termbox clone.
[soa]: https://github.com/cgaebel/soa
[soa-r-rust]: https://www.reddit.com/r/rust/comments/2uiu0e/soa_structofarray_types_in_rust/
[valico]: https://github.com/rustless/valico
[rustless]: https://github.com/rustless
[perl]: https://github.com/plicease/FFI-Platypus-Lang-Rust
[glassful]: https://github.com/kmcallister/glassful
[glassful-r-rust]: https://www.reddit.com/r/rust/comments/2ufeqf/rustlike_syntax_for_opengl_shading_language/
[secretshare]: https://github.com/sellibitze/secretshare
[chip8-rust]: https://github.com/jakerr/chip8-rust
[snowflake]: https://crates.io/crates/snowflake
[rust-dev-box]: https://github.com/estsauver/rust-dev-box
[rust-roller]: https://github.com/freiguy1/rust-roller
[rustbox]: https://github.com/gchp/rustbox
## Project Updates
* [Glium project update][glium]. Glium is a safe wrapper for OpenGL
that is making a lot of progress.
* [This Week in Servo 21][twis].
[glium]: https://www.reddit.com/r/rust/comments/2ty8ag/glium_project_update/
[twis]: http://blog.servo.org/2015/01/21/twis-21/
## Upcoming Events
* [Feb 3. N Languages in N Months NY][n]. John Barker is giving an
intro to Rust.
* [Feb 9. Sydney Meetup][syd]. Huon Wilson and Steve Klabnik will be
in attendance.
* [Feb 9. Seattle Meetup][seattle].
[n]: http://www.meetup.com/N-Languages-in-N-Months-NYC/events/218757056/
[syd]: http://www.meetup.com/Rust-Sydney/events/220100853/
[seattle]: https://www.eventbrite.com/e/mozilla-rust-seattle-meetup-tickets-12222326307?aff=erelexporg