Title: This Week in Rust 33 Date: 2014-01-18 20:21 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 was a big week. rvalue lifetimes and external syntax extensions landed, as well as a bunch of codegen optimization. # What's cooking in master? 69 pull requests were merged this week. As of writing, [bors](http://buildbot.rust-lang.org/bors/bors.html) has 14 approved pull requests waiting. ## Breaking Changes - `std::num`'s ongoing overhaul continues. It's going to be drastically simplified, and not try to be a general-purpose numeric library. [num-rs](https://github.com/bjz/num-rs) is intended to provide some base algebraic types. [#11504](https://github.com/mozilla/rust/pull/11504) removes gamma/bessel and does some cleanup of cmath. [#11548](https://github.com/mozilla/rust/pull/11548) merges Bitwise and BitCount and removes Bounded and Bitwise from the prelude. [#11622](https://github.com/mozilla/rust/pull/11622) simplifies Primitive. - Destructuring `@` patterns are [no longer supported](https://github.com/mozilla/rust/pull/11305). - The return type of `Chan::try_recv` has been extended to [indicate why it did not return a value](https://github.com/mozilla/rust/pull/11112). That is, whether there was legitimately no value, or if the other end had hung up. - Disk-relative paths on Windows [are now properly generated](https://github.com/mozilla/rust/pull/11579) when joining two paths. - FromBase64 and FromHex [now use error enums](https://github.com/mozilla/rust/pull/11597). - `std::io` [has been shuffled around a bit](https://github.com/mozilla/rust/pull/11598). - (Almost?) all iterator types [have been renamed](https://github.com/mozilla/rust/pull/11001). - unsafe functions can [no longer be coerced to closures](https://github.com/mozilla/rust/pull/11605). - Unnecessary (useless) visibility modifiers on `use` and `extern mod` [are now forbidden](https://github.com/mozilla/rust/pull/11607). - Building on last week's per-task stdout/stderr, [rustc's error reporting has been cleaned up significantly](https://github.com/mozilla/rust/pull/11620). ## Other Changes - Externally loadable syntax extensions [have landed](https://github.com/mozilla/rust/pull/11151)! We can now write syntax extensions outside of the compiler, and export macros. - The "rvalue lifetime" issue has seen some [significant work put into it](https://github.com/mozilla/rust/pull/11585). Notably, `for x in [1, 2, 3, 4].iter() { .. }` should now work, among many other papercut annoyances with rvalues. - Error messages involving inferred integer types [are now much more sane](https://github.com/mozilla/rust/pull/11513). Rather than `` or ``, it now prints `` etc. - Accidentally including a semicolon on the last line of a function [now has a better error message](https://github.com/mozilla/rust/pull/11482), if the types line up. - Some bugs with trait object coercion [have been fixed](https://github.com/mozilla/rust/pull/11525). - The runtime [now has its own documentation](https://github.com/mozilla/rust/pull/11501), viewable [here](http://static.rust-lang.org/doc/master/guide-runtime.html). - rustdoc's search is now [more forgiving](https://github.com/mozilla/rust/pull/11438) on the input it accepts. - Inserting into tries has been optimized significantly, [with no unsafe code](https://github.com/mozilla/rust/pull/11546). Its iterator has [also been optimized](https://github.com/mozilla/rust/pull/11497), albeit with unsafe code. - [The reference-counting headers have been removed](https://github.com/mozilla/rust/pull/11535). The associated "managed-unique" concept [has also been removed](https://github.com/mozilla/rust/pull/11565). - The recent OS X 10.9 breakage [should be fixed](https://github.com/mozilla/rust/pull/11604), as we will no longer use `ar s` on that platform. ## New Contributors - Clinton Ryan - Derek Guenther - Lucy - Petter Remen - Shamir Khodzha - Yehuda Katz # Weekly Meeting The [weekly meeting](https://github.com/mozilla/rust/wiki/Meeting-weekly-2014-01-14) discussed associated function resolution, changes to our calling convention (specifically the fate of the ubiquitous environment pointer), how we want to handle feature freeze, static items with destructors, and documentation on primitives. # Quotes of the Week {% blockquote tjc on the Rust-the-game/Rust-the-language confusion %} who says you can't make money selling a compiler? You can, as long as you convince people it's a video game {% endblockquote %} {% blockquote eddyb %} who needs pure functional when you have pure cool? {% endblockquote %} # This Week in Servo Servo is a web browser engine written in Rust and is one of the primary test cases for the Rust language. This week, we landed 22 PRs. There will be a Servo workweek in the Mozilla San Francisco office next week, Tuesday through Friday. ## Notable additions - Jack Moffitt landed the huge Rust upgrade [#1473](https://github.com/mozilla/servo/pull/1473), bringing us very close to the 0.9 release. Hooray! - Lars Bergstrom got NVidia-on-Linux working in [#1487](https://github.com/mozilla/servo/pull/1487) and fixed the content test reliability in [#1500](https://github.com/mozilla/servo/pull/1500). - Tetsuharu Ohzeki implemented `removeAttribute` on Element in [#1448](https://github.com/mozilla/servo/pull/1448). - jgraham landed innerHTML support [#1450](https://github.com/mozilla/servo/pull/1450). - Bruno Abinader implemented several fixes related to DOMImplementation: [#1497](https://github.com/mozilla/servo/pull/1497), [#1488](https://github.com/mozilla/servo/pull/1488). - Corey Richardson fixed up an error case in startup on Linux in [#1502](https://github.com/mozilla/servo/pull/1502). - Isabelle Carter landed the initial work for handling `position:fixed` in [#1440](https://github.com/mozilla/servo/pull/1440). ## New Contributors - Corey Richardson ## Meetings In this week's [meeting](https://github.com/mozilla/servo/wiki/Meeting-2014-01-13), we discussed the need to clean up our test harnesses, the removal of `@` in support of the next Rust upgrade, and the workweek.. # Announcements, etc - [The first pure-Rust AES implementation](https://github.com/DaGenix/rust-crypto/pull/21). According to enix in IRC, this is also the first bit slicing implementation in a high level language (ie, not assembly or a port of assembly). - [rust-re2](https://github.com/nickdesaulniers/rust-re2), re2 bindings - [A 30 Minute Introduction to Rust](http://words.steveklabnik.com/a-30-minute-introduction-to-rust) - [ObjCrust](https://github.com/shilgapira/ObjCrust), building an iOS static library with Rust.A - [The Periodic Table of Rust Types](http://cosmic.mearie.org/2014/01/periodic-table-of-rust-types/) - [Sodium Oxide](https://github.com/dnaq/sodiumoxide), NaCl bindings, updated to 0.9 - [capnproto-rust benchmark update](http://dwrensha.github.io/capnproto-rust/2014/01/15/benchmark-update.html) - [rust-phf](https://github.com/sfackler/rust-phf), compile-time hash maps. It also serves as a demonstration of loadable syntax extensions! - [Rust has do-while loops](http://www.reddit.com/r/rust/comments/1v9rgp/rust_has_dowhile_loops/), a dirty hack no one should use. - [Understanding Pointers, Ownership, and Lifetimes in Rust](http://paulkoerbitz.de/posts/Understanding-Pointers-Ownership-and-Lifetimes-in-Rust.html) - [A Just-in-time Compiler (Written) In Rust](http://hydrocodedesign.com/2014/01/17/jit-just-in-time-compiler-rust/) - [jba](https://github.com/alexcrichton/jba/tree/rust), a GameBoy emulator written in Rust.