Title: This Week in Rust 60 Date: 2014-12-08 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? 58 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-01..2014-12-08 Now you can follow breaking changes *[as they happen][BitRust]*! [BitRust]: http://bitrust.octarineparrot.com/ ## Breaking Changes * The [definitions of operators have changed][ops] to be more flexible. [RFC][ops-rfc]. * `std::sync` has been [redesigned and rewritten][sync] for the nth time as a result of the ongoing runtime decimation. * `HashMap` [no longer shrinks automatically][shrink], and some methods for managing the capacity have changed. [shrink]: https://github.com/rust-lang/rust/pull/18770 [ops]: https://github.com/rust-lang/rust/pull/19167 [ops-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0439-cmp-ops-reform.md [sync]: https://github.com/rust-lang/rust/pull/19274 ## Other Changes * `if let`, `while let`, and tuple indexing are [no longer feature-gated][ungate]. [RFC][ungate-rfc]. * There's [a new syntax for escaping unicode characters][es6]. The old will be deprecated briefly. [RFC][es6-rfc]. * [`&[u8]` implements `Reader`][sliceio]. * [Typechecking has been moved into its own crate][typeck]. * Many `match` expressions in the compiler were [replaced by `if let`][iflet], which appears to be a nice improvement in readability. * The 'expected foo, found bar' parse errors are [much more accurate about what they actually expect][parse]. [sliceio]: https://github.com/rust-lang/rust/pull/18980 [typeck]: https://github.com/rust-lang/rust/pull/19362 [iflet]: https://github.com/rust-lang/rust/pull/19405/files [ungate]: https://github.com/rust-lang/rust/pull/19472 [ungate-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0450-un-feature-gate-some-more-gates.md [es6]: https://github.com/rust-lang/rust/pull/19480 [es6-rfc]: https://github.com/rust-lang/rfcs/pull/446 [parse]: https://github.com/rust-lang/rust/pull/19494 ## New Contributors * Aaron Liblong * jbranchaud * jfager * Jim Apple * kulakowski * Mukilan Thiyagarajan * Oliver Schneider * Paul Collier * Victor van den Elzen # Approved RFC's * [450: Un-feature-gate `if let`, `while let` and tuple indexing][rfc450]. * [490: Change `Sized?` syntax][rfc490]. From `Sized? T` to `T: Sized?`. [rfc450]: https://github.com/rust-lang/rfcs/pull/450 [rfc490]: https://github.com/rust-lang/rfcs/pull/490 # New RFC's * [495: Array pattern adjustments][rfc495]. Fixes several limitations. * [Ammendment to RFC 439 for grammar ambiguity][rfc498]. There's an ambiguity with `..foo` in the previously-accepted slicing RFC. * [499: NonZero lang item][rfc499]. A way to tell the compiler that a value is not 0. * [501: Consistent no-prelude attribute][rfc501]. Reworks the mechanism for opting out of the prelude. * [502: Remove blanket extension impls][rfc502]. Blanket implementations make it impossible to override default methods. * [503: Stabilize std::prelude][rfc503]. Scrutinizes what is included in the prelude, removing many traits. * [504: Split `Show` into `String` and `Show`][rfc504]. Repurposes `{:?}`. [rfc495]: https://github.com/rust-lang/rfcs/pull/495 [rfc498]: https://github.com/rust-lang/rfcs/pull/498 [rfc499]: https://github.com/rust-lang/rfcs/pull/499 [rfc501]: https://github.com/rust-lang/rfcs/pull/501 [rfc502]: https://github.com/rust-lang/rfcs/pull/502 [rfc503]: https://github.com/rust-lang/rfcs/pull/503 [rfc504]: https://github.com/rust-lang/rfcs/pull/504 # Community Get your (unofficial) [rustacean t-shirts][tshirts]! [tshirts]: https://www.reddit.com/r/rust/comments/2o01sd/rustacean_tshirts/ ## From the Team There was no weekly meeting as the team was at a workweek in Portland. There weren't a lot of coherent minutes taken this time, but any discussions of substance will result in RFCs. Topics were largely around stabilization in preparation for 1.0, and this workweek featured a greater ratio of hacking to talking than previous ones. ## Blog Posts Zbigniew Siciarz has been writing an informative (and ambitious) series called "24 Days of Rust". Nice work, Zbigniew! * [24 Days of Rust - Cargo and crates.io][24days1]. [Reddit][24days1-reddit]. * [24 Days of Rust - slow_primes][24days2]. [Reddit][24days2-reddit]. * [24 Days of Rust - CSV][24days3]. [Reddit][24days3-reddit]. * [24 Days of Rust - docopt][24days4]. [Reddit][24days4-reddit]. * [24 Days of Rust - hyper][24days5]. [Reddit][24days5-reddit]. * [24 Days of Rust - working with JSON][24days6]. [Reddit][24days6-reddit]. * [24 Days of Rust - itertools][24days7]. [Reddit][24days7-reddit]. [24days1]: https://siciarz.net/24-days-rust-cargo-and-cratesio/ [24days1-reddit]: https://www.reddit.com/r/rust/comments/2nybtm/24_days_of_rust_cargo_and_cratesio/ [24days2]: https://siciarz.net/24-days-rust-slow_primes/ [24days2-reddit]: https://www.reddit.com/r/rust/comments/2o296i/24_days_of_rust_slow_primes/ [24days3]: https://siciarz.net/24-days-of-rust-csv/ [24days3-reddit]: https://www.reddit.com/r/rust/comments/2o69pc/24_days_of_rust_csv/ [24days4]: https://siciarz.net/24-days-of-rust-docopt/ [24days4-reddit]: https://www.reddit.com/r/rust/comments/2oa78k/24_days_of_rust_docopt/ [24days5]: https://siciarz.net/24-days-of-rust-hyper/ [24days5-reddit]: https://www.reddit.com/r/rust/comments/2oe0yg/24_days_of_rust_hyper/ [24days6]: https://siciarz.net/24-days-of-rust-working-json/ [24days6-reddit]: https://www.reddit.com/r/rust/comments/2oh6ue/24_days_of_rust_working_with_json/ [24days7]: https://siciarz.net/24-days-of-rust-itertools/ [24days7-reddit]: https://www.reddit.com/r/rust/comments/2okqey/24_days_of_rust_itertools/ But that's not all that's going on! * [The story of my childhood, or: Rust on the PSP][psp]. [Reddit][psp-reddit]. * [Progress on Rustdoc source link problems][rustdoc]. lifthrasiir spreads the love of rustc metadata. [Reddit][rustdoc-reddit]. * [A Beginner's Thoughts on Programming Languages (Part 1)][beg]. Some mentions of Rust. [psp]: http://fnordig.de/2014/12/03/a-story-of-hacking-or-rust-on-the-psp/ [psp-reddit]: https://www.reddit.com/r/rust/comments/2o903j/the_story_of_my_childhood_or_rust_on_the_psp/ [rustdoc]: https://lifthrasiir.github.io/rustlog/worklog-2014-12-06.html [rustdoc-reddit]: https://www.reddit.com/r/rust/comments/2ojnnh/worklog_20141206_progress_on_rustdoc_source_link/ [beg]: https://medium.com/@chcokr/a-beginners-thoughts-on-programming-languages-part-1-e1ad124db3cd ## Discussions * [Reading Rust aloud][aloud]. * [Clarification on standard library stability and the push to 1.0][clar]. * [Brainf*uck in Rust's type system (aka type system is Turing complete)][brainfuck]. Rust is serious business now. * [How does `Cow` work][cow]. * [Package naming and grouped packages][pkg]. * [D's proposal for escape-proof references, with some similarities to Rust's borrowed references][d]. In which Walter Bright graces our subreddit and we totally fail to capitalize. * [Aren't exceptions mostly implemented for dtors][ex]? * [C++'s rvalue `&&` references correspond to `&mut`][cxx]. "But then life is pain, and C++ doubly so." * [Why Rust started rather than Ada][ada]? No authoritative answers here but some interesting discussion. * [PSA: Copy is becoming opt-in][copy]. [Reddit][copy-reddit]. * [Could the GC case be made noise-free by default][gc]? * [Rustdoc: reStructuredText vs. Markdown][rest]. Another round of the age-old debate. * [Repr formatter with ShowRepr trait][repr]. [aloud]: https://www.reddit.com/r/rust/comments/2o5tin/reading_rust_aloud/ [clar]: https://www.reddit.com/r/rust/comments/2o5d9d/clarification_on_standard_library_stability_and/ [brainfuck]: https://www.reddit.com/r/rust/comments/2o6yp8/brainfck_in_rusts_type_system_aka_type_system_is/ [cow]: https://www.reddit.com/r/rust/comments/2oebm5/how_does_cow_work/ [pkg]: https://www.reddit.com/r/rust/comments/2ocz69/package_naming_and_grouped_packages_cratesio_and/ [d]: https://www.reddit.com/r/rust/comments/2od8a8/ds_proposal_for_escapeproof_references_with_some/ [ex]: https://www.reddit.com/r/rust/comments/2of8ox/apologies_in_advance_arent_exceptions_mostly/ [cxx]: https://www.reddit.com/r/rust/comments/2oes6s/cs_rvalue_references_correspond_to_rusts_mut/ [ada]: https://www.reddit.com/r/rust/comments/2og8xf/why_rust_started_rather_than_ada/ [copy]: http://internals.rust-lang.org/t/psa-copy-is-becoming-opt-in/982 [copy-reddit]: https://www.reddit.com/r/rust/comments/2ogqaj/psa_copy_is_becoming_optin/ [gc]: http://internals.rust-lang.org/t/could-the-gc-case-be-made-noise-free-by-default/924 [rest]: http://internals.rust-lang.org/t/rustdoc-restructuredtext-vs-markdown/356 [repr]: http://internals.rust-lang.org/t/repr-formatter-with-showrepr-trait/926/5 ## New Projects * [BitRust]. A live breaking changes log! * [Sea Birds' Breakfast][birds]. long_void's Ludum Dare 31 entry. * [speedtest-rust]. Command-line tool for testing Internet speed. [Reddit][speedtest-rust-reddit]. * [rust-once-mutex]. A mutex providing one-time lock and subsequent fast access. [Reddit][rust-once-mutex-reddit]. * [osmpbfreader-rs]. OpenStreetMap BPF file reader. [Reddit][osmpbfreader-rs-reddit]. * [rust-promise]. A basic promise type. [Reddit][rust-promise-reddit]. * [rust-buildbot]. The scripts running Rust's buildbot instance. * [matches]. The `matches!` macro is on crates.io. * [time_calc]. Music and DSP time conversion. [Reddit][time_calc-reddit]. * [rust-jwt]. JSON Web Token. [Reddit][rust-jwt-reddit]. * [rust-beanstalkd]. A beanstalkd client. [Reddit][rust-beanstalkd-reddit]. * [rusty-tags]. tags generator for cargo projects. [Reddit][rusty-tags-reddit]. * [acacia]. Generic spatial tree library. [Reddit][acacia-reddit]. * [doc_file]. Write crate documentation in an external file. [Reddit][doc_file-reddit]. [BitRust]: http://bitrust.octarineparrot.com/ [birds]: http://ludumdare.com/compo/ludum-dare-31/?action=preview&uid=19918 [speedtest-rust]: https://github.com/gkbrk/speedtest-rust [speedtest-rust-reddit]: https://www.reddit.com/r/rust/comments/2nz8eh/wip_commandline_tool_to_test_your_internet_speed/ [rust-once-mutex]: https://github.com/reem/rust-once-mutex [rust-once-mutex-reddit]: https://www.reddit.com/r/rust/comments/2o0tm8/a_mutex_providing_a_onetime_lock_then_fast/ [osmpbfreader-rs]: https://github.com/TeXitoi/osmpbfreader-rs [osmpbfreader-rs-reddit]: https://www.reddit.com/r/rust/comments/2o5506/osmpbfreaderrs_read_openstreetmap_pbf_files_with/ [rust-promise]: https://github.com/viperscape/rust-promise [rust-promise-reddit]: https://www.reddit.com/r/rust/comments/2o6iz4/promise_sync_object/ [rust-buildbot]: https://github.com/rust-lang/rust-buildbot [matches]: https://www.reddit.com/r/rust/comments/2obpqv/the_matches_macro_is_on_cratesio/ [time_calc]: https://github.com/RustAudio/time_calc [time_calc-reddit]: https://www.reddit.com/r/rust/comments/2ogden/time_calc_a_crate_for_music_and_dsp_time/ [rust-jwt]: https://github.com/GildedHonour/rust-jwt [rust-jwt-reddit]: https://www.reddit.com/r/rust/comments/2ohueq/json_web_token_jwt_in_rust/ [rust-beanstalkd]: https://github.com/schickling/rust-beanstalkd [rust-beanstalkd-reddit]: https://www.reddit.com/r/rust/comments/2ol9cg/beanstalkd_client_my_first_very_basic_library_in/ [rusty-tags]: https://github.com/dan-t/rusty-tags [rusty-tags-reddit]: https://www.reddit.com/r/rust/comments/2ol09b/ann_rustytags_create_tags_for_a_cargo_project_and/ [acacia]: https://github.com/aepsil0n/acacia [acacia-reddit]: https://www.reddit.com/r/rust_gamedev/comments/2oasrs/acacia_a_generic_spatial_tree_library/ [doc_file]: https://github.com/tomjakubowski/doc_file [doc_file-reddit]: https://www.reddit.com/r/rust/comments/2omey2/doc_file_write_crate_documentation_in_external/ ## Project Updates * [New graphics library design - Piston][piston]. * The Rust implementation of docopt now offers [tab completion][docopt]. [piston]: http://blog.piston.rs/2014/12/02/new-graphics-design/ [docopt]: https://github.com/docopt/docopt.rs#tab-completion-support ## Upcoming Meetups * [2014-12-08 Seattle Rust Meetup](https://www.eventbrite.com/e/mozilla-rust-seattle-meetup-tickets-12222326307?aff=erelexporg) * [2014-12-15 Rust Paris](http://www.meetup.com/Rust-Paris) * [2014-12-18 Bay Area Rust - Crypto](http://www.meetup.com/Rust-Bay-Area/events/210632582/)