Title: This Week in Rust 62 Date: 2014-12-22 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). 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? 149 pull requests were [merged in the last week][1]. [1]: https://github.com/rust-lang/rust/pulls?q=is%3Apr+is%3Amerged+updated%3A2014-12-15..2014-12-22 Now you can follow breaking changes *[as they happen][BitRust]*! [BitRust]: http://bitrust.octarineparrot.com/ ## Breaking Changes * Macros using parens and square brackets (`macro!()`, `macro![]`) are [parsed as expressions][mac] if not followed by a semicolon. This makes expressions like `vec![1i, 2, 3].len();` work as expected. [RFC][mac-rfc]. * [Binops take their arguments by value][binops], including `Add`, `Sub`, `Mul`, `Div` `Rem`, `BitAnd`, `BitOr`, `BitXor`, `Shl`, `Shr`. This breaks all existing implementations! `String` and `Vec` addition now reuse the LHS buffer. [RFC][binops-rfc]. * The `Neg` and `Not` unary ops [also take their arguments by value][unops]. * [A number of changes to the runtime appeared][rt], including renaming `std::task` to `std::thread`, that maps more directly to OS threads. * The in-tree `getopts`, `log`, `regex`, and `regex_macros` crates are [deprecated][crates] in favor of the ones from `crates.io`. Nearly everything that isn't std is moving to the registry. * Command-line flags to `rustc` are [being adjusted][rustcflags] with an eye towards stabilizing and futureproofing. See PR for details. * `TreeMap`, `TreeSet`, `TrieMap`, `TrieSet`, `LruCache` and `EnumSet` have all been [removed from the `collections` crate][rmcoll], and can for now live in [collect-rs]. [RFC][rmcoll-rfc]. * The `VecMap` iterators are now [newtypes instead of type aliases][vecmap] to encapsulate the implementation. * The `BTreeMap`, `BTreeSet`, `HashMap`, and `HashSet` iterators are [also newtypes][morenewtypes].. * [`is_power_of_two` no longer incorrectly considers 0 to be a power of 2][two]. * `regex::Captures::at` and `Captures::name` [return `Option`][regex]. * Many, many public reexports of enum variants [have been removed][enums]. * The `HashSet` iterators [have been renamed](https://github.com/rust-lang/rust/pull/19993). [binops]: https://github.com/rust-lang/rust/pull/19448 [binops-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0439-cmp-ops-reform.md [unops]: https://github.com/rust-lang/rust/pull/19899 [rt]: https://github.com/rust-lang/rust/pull/19654 [two]: https://github.com/rust-lang/rust/pull/19640 [vecmap]: https://github.com/rust-lang/rust/pull/19720 [morenewtypes]: https://github.com/rust-lang/rust/pull/19770 [regex]: https://github.com/rust-lang/rust/pull/19818 [crates]: https://github.com/rust-lang/rust/pull/19820 [rustcflags]: https://github.com/rust-lang/rust/pull/19900 [rmcoll]: https://github.com/rust-lang/rust/pull/19955 [collect-rs]: https://github.com/Gankro/collect-rs/ [rmcoll-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0509-collections-reform-part-2.md [mac]: https://github.com/rust-lang/rust/pull/19984 [mac-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0378-expr-macros.md [enums]: https://github.com/rust-lang/rust/pull/19842 ## Other Changes * Backtraces are [demangled correctly on Windows][bt]. * `RingBuf` now exposes its buffers via the [`as_slices` method][as_slices]. * A number of collections implement [a new method called `drain`][drain] which removes all members of the collection without deallocating the underlying buffers. * Work is progressing on [generalized where clauses][where] which is necessary for associated types to be fully useful. [RFC][where-rfc]. [bt]: https://github.com/rust-lang/rust/pull/19819 [as_slices]: https://github.com/rust-lang/rust/pull/19903 [drain]: https://github.com/rust-lang/rust/pull/19946 [where]: https://github.com/rust-lang/rust/pull/20073 [where-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0135-where.md ## New Contributors * Aaron Friel * Akos Kiss * Andrew Wagner * Eric Kidd * Jacob Edelman * Jake Goulding * Jared Roesch * Ken Tossell * Kevin Yap * Martin Pool * Mathieu Poumeyrol * Mike Pedersen * Niels Egberts * Pedro Larroy * Sean Collins * Seth Pollack * mchaput # Approved RFC's - [503: prelude stabilization][503]. Removes a ton of stuff from the prelude, and moves what remains to a `std::prelude::v1` module. - [474: path reform][474]. Tightens up the `Path` API, and makes some changes around their internal representation. - [504: `Show` stabilization][504]. Splits `Show` into `Show` and `String`, with `Show` being tied to the re-introduced `{:?}` format string specifier for debugging purposes. - [453: macro reform][453]. Tightens up how macro import/export "works", and solves the "curious inner module" problem with a `$crate` meta-variable. - [486: `std::ascii` reform][486]. Removes the `Ascii` newtype and implements the old functionality on various forms of arrays of `u8` instead. - [509: collections reform part 2][509]. Finalizes the fate of `std::collections`, marking some as stable and moving some to the external `collect-rs` crate. - [520: new array repeat syntax][520]. Due to an ambiguity with range notation, the fixed-length array syntax has changed to `[T; N]` for the type and `[expr; N]` for the constructor. - [522: Allow `Self` to be used in impls][522]. As it sounds. Reduces verbosity. [520]: https://github.com/rust-lang/rfcs/blob/master/text/0520-new-array-repeat-syntax.md [522]: https://github.com/rust-lang/rfcs/blob/master/text/0522-self-impl.md [509]: https://github.com/rust-lang/rfcs/blob/master/text/0509-collections-reform-part-2.md [486]: https://github.com/rust-lang/rfcs/blob/master/text/0486-std-ascii-reform.md [504]: https://github.com/rust-lang/rfcs/blob/master/text/0504-show-stabilization.md [503]: https://github.com/rust-lang/rfcs/blob/master/text/0503-prelude-stabilization.md [474]: https://github.com/rust-lang/rfcs/blob/master/text/0474-path-reform.md [453]: https://github.com/rust-lang/rfcs/blob/master/text/0453-macro-reform.md # New RFC's - [Mark `std::mem::drop` as unstable until negative bounds are implemented](https://github.com/rust-lang/rfcs/pull/536). - [Rename `std::mem::drop`](https://github.com/rust-lang/rfcs/pull/535). - [Rename the `deriving` syntax extension to `derive`](https://github.com/rust-lang/rfcs/pull/534). - [Remove certain array elem moves to prepare for non-zeroing drop](https://github.com/rust-lang/rfcs/pull/533). - [`self` in `use`](https://github.com/rust-lang/rfcs/pull/532). - [Amend RFC process with a defined scope](https://github.com/rust-lang/rfcs/pull/531). - [Generic conversion traits](https://github.com/rust-lang/rfcs/pull/529). - [Generic string pattern matching API](https://github.com/rust-lang/rfcs/pull/528). - [Statically enforce Unicode in `std::fmt`](https://github.com/rust-lang/rfcs/pull/526). # Community The [video from the Thursday's SF Meetup][meetup] about crypto has several interesting presentations. [meetup]: https://air.mozilla.org/bay-area-rust-meetup-december-2014/ ## From the Team * [Weekly-meetings/2014-12-16][mtg]: [Reddit][mtg-reddit]. [mtg]: https://github.com/rust-lang/meeting-minutes/blob/master/weekly-meetings/2014-12-16.md [mtg-reddit]: http://www.reddit.com/r/rust/comments/2pjmve/weekly_meeting_20141216/ ## Blog Posts * [Diving into concurrency][jvns]: trying out mutexes and atomics (in Rust and C). [Reddit][jvns-reddit]. * [Comparing Rust and C++][kuku]. [Reddit][kuku-reddit]. Note that this appears to be a translation of an [older post in Russian](http://habrahabr.ru/post/225003/). * [Updating Github Pages with Travis CI](http://words.steveklabnik.com/update-github-pages-with-travis-ci). [Reddit](http://www.reddit.com/r/rust/comments/2phrge/updating_github_pages_with_travis_ci/) * [This Week in Servo 15](http://blog.servo.org/2014/12/15/twis-15/). [Reddit](http://www.reddit.com/r/rust/comments/2pj6bv/this_week_in_servo_15/). * [Columnarization in Rust](http://www.frankmcsherry.org/columnarization/serialization/rust/2014/12/15/Columnarization-in-Rust.html). [Reddit](http://www.reddit.com/r/rust/comments/2pozxt/columnarization_in_rust/). * [Introducing Hyper](http://seanmonstar.com/post/105541782562/hyper). [Reddit](http://www.reddit.com/r/rust/comments/2pqnjn/hyper_intro/). * [Rewriting Rust Serialization, Part 3.1: Another Performance Digression](http://erickt.github.io/blog/2014/12/13/performance-digression/). [Reddit](http://www.reddit.com/r/rust/comments/2pxx52/rewriting_serialization_part_31_another/). [jvns]: http://jvns.ca/blog/2014/12/14/fun-with-threads/ [jvns-reddit]: http://www.reddit.com/r/rust/comments/2pabnd/diving_into_concurrency_trying_out_mutexes_and/ [kuku]: http://kukuruku.co/hub/rust/comparing-rust-and-cpp [kuku-reddit]: http://www.reddit.com/r/rust/comments/2pbzug/comparing_rust_and_c/ ## 24 Days of Rust continues! * [nalgebra](https://siciarz.net/24-days-of-rust-nalgebra/). [Reddit](http://www.reddit.com/r/rust/comments/2pa7md/24_days_of_rust_nalgebra/) * [FUSE filesystems, part 1](https://siciarz.net/24-days-of-rust-fuse-filesystems-part-1/). [Reddit](http://www.reddit.com/r/rust/comments/2pdxbe/24_days_of_rust_fuse_filesystems_part_1/). * [FUSE filesystems, part 2](https://siciarz.net/24-days-of-rust-fuse-filesystems-part-2/). * [`from_fn`](https://siciarz.net/24-days-of-rust-from_fn/). [Reddit](http://www.reddit.com/r/rust/comments/2pljk9/24_days_of_rust_from_fn/). * [redis](https://siciarz.net/24-days-of-rust-redis/). [Reddit](http://www.reddit.com/r/rust/comments/2ppltp/24_days_of_rust_redis/). * [zeromq](https://siciarz.net/24-days-of-rust-zeromq/). [Reddit](http://www.reddit.com/r/rust/comments/2pwt70/24_days_of_rust_zeromq/). * [rusti](https://siciarz.net/24-days-of-rust-rusti/) * [rust-crypto](https://siciarz.net/24-days-of-rust-rust-crypto/). [Reddit](http://www.reddit.com/r/rust/comments/2q07jv/24_days_of_rust_rustcrypto/). ## Discussions * [Anyone working on C/C++ to Rust transpilers?](http://www.reddit.com/r/rust/comments/2pyg8f/anyone_working_on_cc_to_rust_transpilers/) * [Rust ruined C++ for me](http://www.reddit.com/r/rust/comments/2pi3ju/rust_ruined_c_for_me/) * [Well written rust code to read and learn from?](http://www.reddit.com/r/rust/comments/2pmaqz/well_written_rust_code_to_read_and_learn_from/) ## New Projects * [rusql](https://github.com/mttr/rusql), "A naive, SQL based RDBMS written in Rust." * [Rusthon](https://github.com/rusthon/Rusthon), "a python-like language that converts and compiles into: Rust, C++, and JavaScript." * [rbencode](https://github.com/asamy45/rbencode), a Bencode implementation. * [wtftw](https://github.com/Kintaro/wtftw), "Window Tiling For The Win. A tiling window manager written in Rust." * [Custom Logger with time-stamp, file name and line number](http://joshitech.blogspot.com/2014/12/rust-customer-logger.html). * [cpal](https://crates.io/crates/cpal), pure Rust audio renderer. * [rusti reborn](https://github.com/murarth/rusti), a REPL for Rust * [nadeko](https://github.com/klutzy/nadeko), "an experimental syntax extension which converts functions into amd64 assembly code." * [traverse](https://github.com/reem/rust-traverse), "proof-of-concept trait for internal iterators called traversals." ## Upcoming Events Nothing on the calendar for the next two weeks!