|
| 1 | +Title: This Week in Rust 57 |
| 2 | +Date: 2014-11-17 |
| 3 | +Category: This Week in Rust |
| 4 | + |
| 5 | +Hello and welcome to another issue of *This Week in Rust*! |
| 6 | +[Rust](http://rust-lang.org) is a systems language pursuing the trifecta: |
| 7 | +safe, concurrent, and fast. This is a weekly summary of its progress and |
| 8 | +community. Want something mentioned? [Send me an |
| 9 | +email! ](mailto:[email protected]?subject=This%20Week%20in%20Rust%20Suggestion) |
| 10 | +Want to get involved? [We love |
| 11 | +contributions](https://github.com/mozilla/rust/wiki/Note-guide-for-new-contributors). |
| 12 | + |
| 13 | +# What's cooking on master? |
| 14 | + |
| 15 | +55 pull requests were [merged in the last week][1]. |
| 16 | + |
| 17 | +[1]: https://github.com/rust-lang/rust/pulls?q=is%3Apr+is%3Amerged+updated%3A2014-11-10..2014-11-17 |
| 18 | + |
| 19 | +## Breaking Changes |
| 20 | + |
| 21 | +* Struct variants are [no longer feature-gated][structvars]. At the |
| 22 | + same time, struct variants no longer support visibility modifiers, |
| 23 | + for consistency with other variants. [RFC][structvars-rfc]. |
| 24 | +* The `time` crate, which is widely considered to be of poor quality, |
| 25 | + has been [moved out of the distribution][time], but can still be |
| 26 | + accessed via cargo. |
| 27 | +* The new task pool that [reem announced on reddit][tp-reddit] earlier |
| 28 | + in the week was speedily [merged into the tree][tp], replacing the |
| 29 | + old `TaskPool`. It includes some breaking API changes. |
| 30 | +* The compiler now treats `()` not as a distinct 'unit' type but as a |
| 31 | + [zero-length tuple][unit] (though the docs continue to allow that |
| 32 | + `()` may be referred to as 'unit'). This may cause breakage for |
| 33 | + macros that expect `()` to be a literal, whereas now it is an |
| 34 | + expression. |
| 35 | +* `io::Buffer` has been [refactored to be object-safe][buffer], moving |
| 36 | + some methods into other traits. |
| 37 | +* The `Extendable` trait for extending a collection via an `Iterator` |
| 38 | + has been [renamed][extend] to `Extend`, and can now be used with |
| 39 | + `EnumSet` and `LruCache`. |
| 40 | +* The old 'once_fns' feature gate has been [removed][once] (everybody |
| 41 | + thought it had been removed long ago). This is unrelated to the |
| 42 | + modern `FnOnce` type. |
| 43 | + |
| 44 | +[extend]: https://github.com/rust-lang/rust/pull/18475 |
| 45 | +[once]: https://github.com/rust-lang/rust/pull/18743 |
| 46 | +[time]: https://github.com/rust-lang/rust/pull/18858 |
| 47 | +[unit]: https://github.com/rust-lang/rust/pull/18752 |
| 48 | +[buffer]: https://github.com/rust-lang/rust/pull/18788 |
| 49 | +[tp]: https://github.com/rust-lang/rust/pull/18941 |
| 50 | +[tp-reddit]: https://www.reddit.com/r/rust/comments/2ltjwm/a_loadbalancing_taskpool_resistant_to_child_panics/ |
| 51 | +[structvars]: https://github.com/rust-lang/rust/pull/18994 |
| 52 | +[structvars-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0418-struct-variants.md |
| 53 | + |
| 54 | +## Other Changes |
| 55 | + |
| 56 | +* BTree [implements][btree] the [collection views][view-rfc] API. |
| 57 | +* The `#[stable]` attribute is [no longer inherited][stable] by child |
| 58 | + AST elements. This is intended to reduce the risk of accidentally |
| 59 | + marking things stable. |
| 60 | +* `AsRefReader` and `AsRefWriter` have been [renamed][asref] to |
| 61 | + `ByRefReader` and `ByRefWriter` for consistency with their method |
| 62 | + names. The original types remain and are deprecated. |
| 63 | +* Performance of `RingBuf` has [improved][ringbuf]. Some subsequent |
| 64 | + [reddit discussion][ringbuf-reddit] lamented the introduction of |
| 65 | + unsafe code. |
| 66 | +* On Windows, rustc [once again prefers the bundled MinGW linker][win] |
| 67 | + over any system-installed MinGW linker in an attempt to make Rust on |
| 68 | + Windows cause the fewest surprises. |
| 69 | + |
| 70 | +[btree]: https://github.com/rust-lang/rust/pull/18287 |
| 71 | +[view-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0216-collection-views.md |
| 72 | +[stable]: https://github.com/rust-lang/rust/pull/18887 |
| 73 | +[asref]: https://github.com/rust-lang/rust/pull/18891 |
| 74 | +[ringbuf]: https://github.com/rust-lang/rust/pull/18747 |
| 75 | +[ringbuf-reddit]: https://www.reddit.com/r/rust/comments/2mfcuk/ringbuf_remove_optiont/ |
| 76 | +[win]: https://github.com/rust-lang/rust/pull/18797 |
| 77 | + |
| 78 | +## New Contributors |
| 79 | + |
| 80 | +* Adam Szkoda |
| 81 | +* Artem |
| 82 | +* Barosl Lee |
| 83 | +* Ian Connolly |
| 84 | +* Jeff Parsons |
| 85 | +* Josh Haberman |
| 86 | +* Josh Stone |
| 87 | +* Murarth |
| 88 | +* Ricky Taylor |
| 89 | + |
| 90 | +# Approved RFC's |
| 91 | + |
| 92 | +* [RFC 369: Numerics reform][num]. Conservatively dismantle the |
| 93 | + numeric trait heirarchy for later reconsideration. [PR][num-pr]. |
| 94 | +* [RFC 380: Stabilize std::fmt][fmt]. Primarily stabilizes the user-facing |
| 95 | + formatting syntax, while leaving the library APIs |
| 96 | + unstable. [PR][fmt-pr]. |
| 97 | + |
| 98 | +[num]: https://github.com/rust-lang/rfcs/blob/master/text/0369-num-reform.md |
| 99 | +[num-pr]: https://github.com/rust-lang/rfcs/pull/369 |
| 100 | +[fmt]: https://github.com/rust-lang/rfcs/blob/master/text/0380-stabilize-std-fmt.md |
| 101 | +[fmt-pr]: https://github.com/rust-lang/rfcs/pull/380 |
| 102 | + |
| 103 | +# New RFC's |
| 104 | + |
| 105 | +* [RFC 457: Version attribute][457]. Provides a mechanism for |
| 106 | + identifying which version of the language a given source corresponds |
| 107 | + to. |
| 108 | +* [RFC 458: Improve the `Send` trait][458]. This RFC proposes |
| 109 | + extending the Send trait in some relatively small but backwards |
| 110 | + incompatible ways, to allow more safe behaviors to be exposed in |
| 111 | + Rust's type system. In particular, this involves removing the |
| 112 | + 'static bound from Send in a way that preserves thread safety. |
| 113 | +* [RFC 459: Disallow type/lifetime parameter shadowing][459]. Source |
| 114 | + of confusing bugs. |
| 115 | +* [RFC 461: Add a thread-local storage module][461]. Another TLS |
| 116 | + design. |
| 117 | +* [RFC 462: Future-proof `box` and `&` patterns][462]. Futureproof box |
| 118 | + patterns by renaming them to deref. In an effort to consolidate box |
| 119 | + and & patterns, change the latter to use the deref syntax as well, |
| 120 | + in recognition of them being semantically equivalent to box |
| 121 | + patterns. Make the newly introduced deref keyword a non-strict |
| 122 | + keyword. |
| 123 | +* [RFC 463: Restrict identifiers after literals][463]. Futureproofing. |
| 124 | +* [RFC 464: Rename uint/int][464]. Latest in a series of RFC's to |
| 125 | + discourage use of pointer-sized integers as the 'default' type. |
| 126 | + |
| 127 | +[457]: https://github.com/rust-lang/rfcs/pull/457 |
| 128 | +[458]: https://github.com/rust-lang/rfcs/pull/458 |
| 129 | +[459]: https://github.com/rust-lang/rfcs/pull/459 |
| 130 | +[461]: https://github.com/rust-lang/rfcs/pull/461 |
| 131 | +[462]: https://github.com/rust-lang/rfcs/pull/462 |
| 132 | +[463]: https://github.com/rust-lang/rfcs/pull/463 |
| 133 | +[464]: https://github.com/rust-lang/rfcs/pull/464 |
| 134 | + |
| 135 | +# Community |
| 136 | + |
| 137 | +## From the Team |
| 138 | + |
| 139 | +* [Weekly-meetings/2014-11-11][mtg]: fott; std::fmt; default typarams; rfc authors; 'coerce' vs. 'view', etc.; precent of + in type grammar; jemalloc. [Reddit][mtg-reddit]. |
| 140 | +* [Brian Koropoff (unwound) is a friend of the tree!][fott] |
| 141 | +* [Allocators in Rust][alloc]: Niko attempts to lay out the tradeoffs |
| 142 | + involved in integrating jemalloc with |
| 143 | + Rust. [Reddit][alloc-reddit]. [HN][alloc-hn]. |
| 144 | + |
| 145 | + |
| 146 | +[mtg]: https://github.com/rust-lang/meeting-minutes/blob/master/weekly-meetings/2014-11-11.md |
| 147 | +[mtg-reddit]: https://www.reddit.com/r/rust/comments/2me6r7/rustupps1_a_rustupsh_equivalent_for_windows/ |
| 148 | +[alloc]: http://smallcultfollowing.com/babysteps/blog/2014/11/14/allocators-in-rust/ |
| 149 | +[alloc-reddit]: https://www.reddit.com/r/rust/comments/2mcew2/allocators_in_rust_from_nmatsakiss_blog/ |
| 150 | +[alloc-hn]: https://news.ycombinator.com/item?id=8612430 |
| 151 | +[fott]: https://github.com/rust-lang/rust/wiki/Doc-friends-of-the-tree#2014-11-11-brian-koropoff-unwound |
| 152 | + |
| 153 | +## Blog Posts |
| 154 | + |
| 155 | +* [Two hours after Rust][two]. Reports from a new Rust user. [Reddit][two-reddit]. |
| 156 | +* [Rust Serialization part 2.1: now with more benchmarks: Cap'n Proto, MessagePack, and Protobuf][bench]. [Reddit][bench-reddit]. |
| 157 | +* [Serialization part 2.2: Everything's faster (especially capn proto)][bench2]. [Reddit][bench2-reddit]. |
| 158 | +* [Go vs. Rust: Productivity vs. Performance][govr]. [Reddit][govr-reddit]. |
| 159 | + |
| 160 | +[two]: http://jbowles.github.io/lambda-bowles/programs/two-hours-after-rust/ |
| 161 | +[two-reddit]: https://www.reddit.com/r/rust/comments/2ly7q8/two_hours_after_rust/ |
| 162 | +[bench]: http://erickt.github.io/blog/2014/11/11/benchmarks/ |
| 163 | +[bench-reddit]: https://www.reddit.com/r/rust/comments/2lzc9n/rust_serialization_part_21_now_with_more/ |
| 164 | +[bench2]: http://erickt.github.io/blog/2014/11/13/benchmarks-2/ |
| 165 | +[bench2-reddit]: https://www.reddit.com/r/rust/comments/2m72br/serialization_part_22_everythings_faster/ |
| 166 | +[govr]: http://joshitech.blogspot.com/2014/11/go-vs-rust-productivity-vs-performance.html |
| 167 | +[govr-reddit]: https://www.reddit.com/r/rust/comments/2maqi7/go_vs_rust_productivity_vs_performance/ |
| 168 | + |
| 169 | +## Discussions |
| 170 | + |
| 171 | +* [Closures vs. Unboxed Closures][cl]. Useful explanation for the uninitiated. |
| 172 | +* [Where is artithmetic (signed) right-shift][sh]. (A: `>>` is either arithmetic or logical based on type). |
| 173 | +* `Foo::new()` vs. `Foo()`, both on [discuss][ctor-discuss] and [Reddit][ctor-reddit]. |
| 174 | +* ["Hello, world" on a PSP via Rust!][psp]. Another supreme hack from Luqman. Nice use of [target specs]. |
| 175 | +* [Does Rust have anything like C# async await][await]. Take 20. |
| 176 | +* [`std::sync::Future` is almost useless for async processing][future]. (`Future` is ancient and unloved). |
| 177 | +* [Single-source GPU support][gpu]. An inquiry about the prospects of compiling Rust to GPUs. |
| 178 | +* [Experienced users: how easy is Rust's memory management system to use?][mm]. Mostly gushing about how awsome Rust is (seconded!). |
| 179 | +* [Pre RFC: Remove `FromError` trait, add `From` trait][from] |
| 180 | + |
| 181 | +[cl]: https://www.reddit.com/r/rust/comments/2lo6yt/closures_vs_unboxed_closures/ |
| 182 | +[sh]: https://www.reddit.com/r/rust/comments/2lp3il/where_is_arithmetic_signed_rightshift/ |
| 183 | +[ctor-discuss]: http://discuss.rust-lang.org/t/poll-foo-new-vs-foo-as-the-default-constructor/758 |
| 184 | +[ctor-reddit]: https://www.reddit.com/r/rust/comments/2lvrf5/foonew_vs_foo_as_the_default_constructor/ |
| 185 | +[psp]: https://www.reddit.com/r/rust/comments/2m10id/hello_world_on_a_psp_via_rust/ |
| 186 | +[target specs]: https://github.com/rust-lang/rfcs/blob/master/text/0131-target-specification.md |
| 187 | +[await]: https://www.reddit.com/r/rust/comments/2m5rin/does_rust_have_something_like_c_async_wait/ |
| 188 | +[future]: https://www.reddit.com/r/rust/comments/2m64o5/stdsyncfuture_is_almost_useless_for_async/ |
| 189 | +[gpu]: http://discuss.rust-lang.org/t/single-source-gpu-support/898 |
| 190 | +[mm]: https://www.reddit.com/r/rust/comments/2m9qw9/experienced_users_how_easy_is_rusts_memory/ |
| 191 | +[from]: http://discuss.rust-lang.org/t/pre-rfc-remove-fromerror-trait-add-from-trait/783 |
| 192 | + |
| 193 | +## New Projects |
| 194 | + |
| 195 | +* [rust-id3 and rust-metaflac][id3]. Reading and writing audio file metadata. |
| 196 | +* [rust-resistant-taskpool][taskpool]. A load-balancing task pool. |
| 197 | +* [Rust-Welder]. Experiments with error interop. [Second discussion][Rust-Welder2]. |
| 198 | +* [json_macros]. Create JSON via Rust syntax. |
| 199 | +* [rust-bitfield]. A macro to generate bitfields. |
| 200 | +* [rust-smtp]. SMTP client. |
| 201 | +* [yaglw]. Yet another high-level OpenGL wrapper. |
| 202 | +* [rustup.ps1]. A rustup.sh equivalent for Windows, installs Cargo |
| 203 | + alongside Rust, which the Rust installer currently fails to do. |
| 204 | + |
| 205 | +[id3]: https://www.reddit.com/r/rust/comments/2lsfrd/rustid3_and_rustmetaflac_libraries_to_read_and/ |
| 206 | +[taskpool]: https://www.reddit.com/r/rust/comments/2ltjwm/a_loadbalancing_taskpool_resistant_to_child_panics/ |
| 207 | +[Rust-Welder]: https://www.reddit.com/r/rust/comments/2lwciy/feedback_and_discussion_wanted_rustwelder_a_crate/ |
| 208 | +[Rust-Welder2]: https://www.reddit.com/r/rust/comments/2m84s1/updated_rustwelder_errorresult_handling/ |
| 209 | +[json_macros]: https://www.reddit.com/r/rust/comments/2m3bjj/json_macros_construct_json_objects_in_rust_from/ |
| 210 | +[rust-bitfield]: https://www.reddit.com/r/rust/comments/2m82o9/a_procedural_macro_to_generate_bitfieldlike_stuct/ |
| 211 | +[rust-smtp]: https://www.reddit.com/r/rust/comments/2m8nla/rust_smtp_client_looking_for_feedback/ |
| 212 | +[yaglw]: https://www.reddit.com/r/rust_gamedev/comments/2m7l9a/yaglw_yet_another_opengl_wrapper/ |
| 213 | +[rustup.ps1]: https://www.reddit.com/r/rust/comments/2me6r7/rustupps1_a_rustupsh_equivalent_for_windows/ |
| 214 | + |
| 215 | +## Project Updates |
| 216 | + |
| 217 | +* [This Week in Servo 11][twis]. |
| 218 | +* Piston has [seen some refactoring][pist] to how it handles event loops and windows. |
| 219 | + |
| 220 | +[twis]: http://blog.servo.org/2014/11/11/twis-11/ |
| 221 | +[pist]: https://www.reddit.com/r/rust_gamedev/comments/2m7k6v/piston_update_glutin_loop/ |
| 222 | + |
| 223 | +## Upcoming Meetups |
| 224 | + |
| 225 | +* [Rust Paris, Nov 17](http://www.meetup.com/Rust-Paris/events/185461312/) |
| 226 | +* [Rust Bay Area: Cryptography and Rust, December 18th](http://www.meetup.com/Rust-Bay-Area/events/210632582/) |
0 commit comments