Title: This Week in Rust 59 Date: 2014-12-01 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: safe, concurrent, and fast. 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/mozilla/rust/wiki/Note-guide-for-new-contributors). # What's cooking on master? 71 pull requests were [merged in the last week][1]. [1]: https://github.com/rust-lang/rust/pulls?q=is%3Apr+is%3Amerged+updated%3A2014-11-24..2014-12-01 ## Breaking Changes * [libgetopts has had][getopts] some public re-exports removed, Fail_ renamed to Fail, and getopts::FailType has been removed. * BinarySearchResult's variants [are no longer re-exported][bstenum], and must be accessed through the enum itself. * [libsync is dead][ripsync]. Long live `std::sync` and `std::comm`. All uses of libsync should be able to cleanly migrate to these two modules. * MaybeOwned[Vector] has been deprecated [in favour of Cow][cowabunga]. See the PR for full details of all the consequences. * Non-failing `unwrap` methods [have been renamed][into-winner] to `into_inner`, as per [RFC 430][rfc430] * You can [no longer invoke Dark Magicks][never4get] and match on an enum struct variant as if it were a tuple. As a consequence, Rust is no longer a useful programming language. * non-ASCII lifetime identifiers [have been feature-gated][whatishappening]. Rust is now only of academic interest, and lacks any practical applications. [getopts]: https://github.com/rust-lang/rust/pull/19365 [bstenum]: https://github.com/rust-lang/rust/pull/19287 [ripsync]: https://github.com/rust-lang/rust/pull/19255 [cowabunga]: https://github.com/rust-lang/rust/pull/19252 [into-winner]: https://github.com/rust-lang/rust/pull/19149 [rfc430]: https://github.com/rust-lang/rfcs/pull/430 [never4get]: https://github.com/rust-lang/rust/pull/19087 [whatishappening]: https://github.com/rust-lang/rust/pull/19073 ## Other Changes * Unboxed closure captures are [now available in debuginfo][debuginfo]. * tomjakubowski has taught Rustdoc about [several][tomja1] of [rust's][tomja2] new [features][tomja3]. * Some missing collection iterators [have][iter1] [been][iter2] [added][iter3]. * The inner contents of Buffered io types [are now accessible mutably][buffers]. * Tests [now add less useless whitespace][notabs] to your terminal's output. * Statically allocated TLS keys are now [explicitly leaked][leaky]. * Fields of consts are [now transitevly interpreted as const][constmemaybe], allowing e.g. `[T, ..MY_TUPLE.0]`. * `::::` [no longer appears][nonono] in module paths in debug logs. * AtomicOption now [correctly requires `Send`][atomic] for memory safety. * japaric has DST-ified more of the standard libs * The iterator module has been [partially stabalized][iterstab]. * Platform-specific io modules `std::os::unix` and `std::os::windows` [have been added][i-oh-my] for working with lower-level `io` details like file descriptors, SOCKETS, HANDLES, etc. * Slice iterators can now [be converted to slices][sliceit] via `as_slice`. * Rng [now supports][random-floats] `next_f64` and `next_f32`. [debuginfo]: https://github.com/rust-lang/rust/pull/19363 [tomja1]: https://github.com/rust-lang/rust/pull/19349 [tomja2]: https://github.com/rust-lang/rust/pull/19272 [tomja3]: https://github.com/rust-lang/rust/pull/19174 [iter1]: https://github.com/rust-lang/rust/pull/19330 [iter2]: https://github.com/rust-lang/rust/pull/19296 [iter3]: https://github.com/rust-lang/rust/pull/19231 [buffers]: https://github.com/rust-lang/rust/pull/19328 [notabs]: https://github.com/rust-lang/rust/pull/19299 [leaky]: https://github.com/rust-lang/rust/pull/19285 [constmemaybe]: https://github.com/rust-lang/rust/pull/19266 [nonono]: https://github.com/rust-lang/rust/pull/19262 [atomic]: https://github.com/rust-lang/rust/pull/19250 [dst1]: https://github.com/rust-lang/rust/pull/19248 [iterstab]: https://github.com/rust-lang/rust/pull/19176 [i-oh-my]: https://github.com/rust-lang/rust/pull/19169 [sliceit]: https://github.com/rust-lang/rust/pull/18966 [random-floats]: https://github.com/rust-lang/rust/pull/18534 ## New Contributors * Ben S * olivren * Pascal Hertleif * Roy Crihfield * Ulysse Carion # Approved RFC's * [Disallow type/lifetime parameter shadowing][rfc459]: Rarely what you want, confusing when it happens. * [Add "function name macro"][rfc466]: This RFC proposes the addition of a function! macro that expands to the function it's used in. This will greatly help error reporting. * [extension trait conventions][rfc445]: This is a conventions RFC establishing a definition and naming convention for extension traits: `FooExt`. [rfc459]: https://github.com/rust-lang/rfcs/pull/459 [rfc466]: https://github.com/rust-lang/rfcs/pull/466 [rfc445]: https://github.com/rust-lang/rfcs/pull/445 # New RFC's * [Stabilize `std::{c_str, c_vec}`][rfc494]: Stabilize the std::{c_str, c_vec} modules by re-working their interfaces and refocusing each primitive for one particular task. * [Error Reform and Failure Box][rfc492]: This RFC proposes changes to the `Error` trait and the introduction of a `Failure` wrapper type for errors and modifications to the `Error` trait for better error interoperability and debugging support. [Reddit][red492] * [Remove the `[]` notation for taking a whole slice][rfc491]: &* has emerged as less strange and more idomatic * [Change DST syntax to `T: Sized?`][rfc490]: Change the syntax for dynamically sized type parameters from `Sized? T` to `T: Sized?`, and change the syntax for traits for dynamically sized types to `trait Foo: Sized?`. Extend this new syntax to work with `where` clauses. * [rename `lifetime` to `lifespan`][rfc487]: 'nuff said * [std::ascii reform][rfc486]: Move the `std::ascii::Ascii` type and related traits to a new Cargo package on crates.io, and instead expose its functionality for `u8`, `[u8]`, `char`, and `str` types. [Reddit][red487] * [Make brackets optional for single attributes][rfc484]: This is an alternative to #483: instead of changing attributes to `@`, just make the brackets optional for `#`. * [Change attribute syntax to @foo][rfc483]: Change attribute syntax from `#[foo]` and `#![foo]` to `@foo` and `@!foo`. [Reddit][red483] [rfc494]: https://github.com/rust-lang/rfcs/pull/494 [rfc492]: https://github.com/rust-lang/rfcs/pull/492 [rfc491]: https://github.com/rust-lang/rfcs/pull/491 [rfc490]: https://github.com/rust-lang/rfcs/pull/490 [rfc487]: https://github.com/rust-lang/rfcs/pull/487 [rfc486]: https://github.com/rust-lang/rfcs/pull/486 [rfc484]: https://github.com/rust-lang/rfcs/pull/484 [rfc483]: https://github.com/rust-lang/rfcs/pull/483 [red492]: http://www.reddit.com/r/rust/comments/2nsufx/rfc_error_reform_and_failure_box/ [red487]: http://www.reddit.com/r/rust/comments/2nlar3/rfc_rename_lifetime_to_lifespan/ [red483]: http://www.reddit.com/r/rust/comments/2nfxtf/rfc_change_attribute_syntax_to_foo/ # Community ## From the Team * [Weekly-meetings/2014-11-25][mtg]: extension trait conventions; shadowed lifetimes; problems with unused type params; es6-style string escaping; int fallback redux redux [Reddit][mtg-reddit]. [mtg]: https://github.com/rust-lang/meeting-minutes/blob/master/weekly-meetings/2014-11-25.md [mtg-reddit]: http://www.reddit.com/r/rust/comments/2nhmgj/weekly_meeting_20141125_extension_trait/ ## Blog Posts * [Rust borrow and lifetimes][rs-borrows]: Another survey of how borrows and ownership works in Rust. [Reddit][rs-borrows-red] * [Rust, Generics, and Collections][gen-col]: A look at some of the space of generic programming in Rust, and how it interacts with collections. * [Rust compiling rust: adventures with librustc][rcr]: A quick look at using librustc programmatically. [Reddit][rcr-reddit] * [Interoperating Between Objective-C and Rust][objc]: How to write FFI code for Objective-C [Reddit][objc-red] * [Purging Proc][proc]: Niko explains the present and future of unboxed closures. [Reddit][proc-red] * [Installing Rust nightly builds into your home directory][home]: A simple guide for setting up Rust in your terminal on a Mac. [Reddit][home-red] * [Procedural Generation in Rust Part 1: Setting up your Environment][generation]: Setting up Rust in Windows. (this week's author of TWiR can testify that this is sometimes harrowing) [Reddit][generation-red] * [Benchmarking is Confusing in Low Level Rust][confusing]: A dive into trying to re-implement Reader and Writer performantly, and determining if you've actually done that. [Reddit][confusing-red] [rcr]: http://jaredly.github.io/2014/11/22/rust-compiling-rust-adventures-with-librustc/ [rcr-reddit]: http://www.reddit.com/r/rust/comments/2noy0l/rust_compiling_rust_adventures_with_librustc/ [objc]: http://sasheldon.com/blog/2014/11/28/interoperating-between-objective-c-and-rust/ [objc-red]: http://www.reddit.com/r/rust/comments/2nno39/interoperating_between_objectivec_and_rust/ [proc]: http://smallcultfollowing.com/babysteps/blog/2014/11/26/purging-proc/ [proc-red]: http://www.reddit.com/r/rust/comments/2nipwp/purging_proc/ [home]: http://mpuppe.de/blog/2014/11/26/installing-rust-nightly-builds-into-your-home-directory/ [home-red]: http://www.reddit.com/r/rust/comments/2niux7/installing_rust_nightly_builds_into_your_home/ [generation]: http://brandonmhaley.com/?p=8 [generation-red]: http://www.reddit.com/r/rust/comments/2ncc4x/procedural_generation_in_rust_part_1_setting_up/ [confusing]: http://erickt.github.io/blog/2014/11/22/benchmarking-is-confusing/ [confusing-red]: http://www.reddit.com/r/rust/comments/2n8l35/benchmarking_is_confusing_in_low_level_rust/ [gen-col]: http://cglab.ca/~abeinges/blah/rust-generics-and-collections/ [gen-col-red]: http://www.reddit.com/r/rust/comments/2nwuct/rust_generics_and_collections/ [rs-borrows]: http://arthurtw.github.io/2014/11/30/rust-borrow-lifetimes.html [rs-borrows-red]: http://www.reddit.com/r/rust/comments/2nuybm/rust_borrow_and_lifetimes/ ## Discussions * [which classes of errors remain with rust?][error-classes] * [The Sad State of Zero-on-Drop][sad-state] [Reddit][sad-state-reddit] * [Are there any Rust books in the pipeline?][rust-books] * [Crates.io Package Groups Proposal][crate-names] * [Are there plans for a Rust runtime?][plans] [error-classes]: http://www.reddit.com/r/rust/comments/2nlis8/which_classes_of_errors_remain_with_rust/ [sad-state]: http://internals.rust-lang.org/t/the-sad-state-of-zero-on-drop/944 [sad-state-reddit]: http://www.reddit.com/r/rust/comments/2nef5d/the_sad_state_of_zeroondrop/ [rust-books]: http://www.reddit.com/r/rust/comments/2ne8jz/are_there_any_rust_books_in_the_pipeline/ [crate-names]: https://github.com/rust-lang/cargo/issues/975 [plans]: http://www.reddit.com/r/rust/comments/2n9pkl/are_there_plans_for_a_rust_runtime/ ## New Projects * [pitch_calc][pitch_calc]: A library for musical pitch conversions! Provides functions and traits for converting between frequency, midi-step and letter-octave. * [irc][irc]: An IRC library for Rust. * [SoundStream][SoundStream]: A simple-as-possible, fast audio I/O stream for Rust * [capture.rs][capture.rs]: A macro for explicit capture clauses * [morphism.rs][morphism.rs]: A structure for suspended closure composition * [collect-rs][collect-rs]: An experimental extension of the Rust standard library's libcollections * [confsolve][confsolve]: Command line tool for resolving Dropbox/Wuala conflicts * [enum_ns][enum_ns]: A simple compiler plugin to enable the old enum namespacing behavior for select modules and crates * [Multipart + Hyper][multipart]: An extension to Hyper that provides client- and server-side support for HTTP multipart/form-data requests * [sersve][sersve]: A directory server in Rust with Iron [pitch_calc]: https://github.com/RustAudio/pitch_calc [irc]: https://github.com/aaronweiss74/irc [SoundStream]: https://github.com/mitchmindtree/sound_stream [capture.rs]: https://crates.io/crates/capture [morphism.rs]: https://github.com/epsilonz/morphism.rs [collect-rs]: https://github.com/Gankro/collect-rs [confsolve]: https://github.com/dan-t/rust-confsolve [enum_ns]: https://github.com/cybergeek94/enum_ns [multipart]: https://github.com/cybergeek94/multipart [sersve]: http://till.hoeppner.ws/2014/11/30/Introducing-sersve-a-directory-server-in-Rust-with-Iron/ ## Project Updates * [This Week In Servo 13] [twis]: http://blog.servo.org/2014/11/25/twis-13/ ## Upcoming Meetups * [Rust Berlin Hack and Learn][rust-berlin]: December 9th * [Rust Amsterdam][rust-amsterdam]: Early 2015 [rust-berlin]: http://www.meetup.com/Rust-Berlin/events/218914766/ [rust-amsterdam]: http://www.meetup.com/Rust-Amsterdam