summaryrefslogtreecommitdiffstats
path: root/content/2014-12-08-this-week-in-rust.md
blob: 88d6375d93853a72670442048df996e79f7c1abc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
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/)