summaryrefslogtreecommitdiffstats
path: root/content/2015-01-26-this-week-in-rust.md
blob: 7a7ad0f2a55852bb597bc1af3a428cbf471daabd (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
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
Title: This Week in Rust 67
Date: 2015-01-26
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).

This week the [mailing list was closed][ml], `std::io` was [renamed
`std::old_io`][oldio]. There were many pull requests merged, but not a
lot of churn.

[ml]: https://mail.mozilla.org/pipermail/rust-dev/2015-January/011558.html
[oldio]: http://internals.rust-lang.org/t/psa-io-old-io/1403

# What's cooking on master?

143 pull requests were [merged in the last week][merged], and 6 [RFCs][rfcs].

[merged]: https://github.com/rust-lang/rust/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-19..2015-01-25
[rfcs]: https://github.com/rust-lang/rfcs/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-19..2015-01-25

Flavio, Steve and Alex all made rollups. Thanks!

Now you can follow breaking changes *[as they happen][BitRust]*!

[BitRust]: http://bitrust.octarineparrot.com/

## Breaking Changes

* The `Show` and `String` formatting traits [have been renamed][fmt]
  to `Debug` and `Display` to more clearly reflect their related
  purposes. Automatically getting a string conversion to use with
  `format!("{:?}", something_to_debug)` is now written `#[derive(Debug)]`.
* Both the `#[start]` and `#[main]` attributes are [feature
  gated][gatemain] as a precaution. Use `#![feature(start)]` and
  `#![feature(main)]` to get them back.

[fmt]: https://github.com/rust-lang/rust/pull/21457
[gatemain]: https://github.com/rust-lang/rust/pull/21257

## Other Changes

* Abstract [OS-specific string types][osstr], `std::ff::{OsString,
  OsStr}`, provide strings in platform-specific encodings for easier
  interop with system APIs. [RFC][osstr-rfc].
* `extern crate` and `use` [no longer have to be written only at the
  top of a module][viewitems], but can be intermixed with other item
  definitions.
* Brian Leibig [added his LALR grammar][lalr], which parses almost all
  the Rust files that rustc can.
* The (oft-neglected) grammar from the manual was [extracted to its
  own file][grammar].
* The [`unconditional_recursion`][recur] lint detects basic
  infinite recursion scenarios that are probably not intended.

[osstr]: https://github.com/rust-lang/rust/pull/21488
[osstr-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
[viewitems]: https://github.com/rust-lang/rust/pull/20179
[grammar]: https://github.com/rust-lang/rust/pull/19353
[recur]: https://github.com/rust-lang/rust/pull/20373
[lalr]: https://github.com/rust-lang/rust/pull/21452

## New Contributors

* Adam Roben
* Alexis
* Barosl LEE
* blackbeam
* Chris Thorn
* Daniel Griffen
* Daniel Raloff
* Eunji Jeong
* Flavio Percoco Premoli
* GuillaumeGomez
* Ignacio Corderi
* Jay True
* JP Sugarbroad
* KernelJ
* Kim Røen
* Logan Chien
* Luke Francl
* Michael Pankov
* Ryan Levick
* Sean Patrick Santos
* Steven Allen
* Tim Parenti
* Toby Scrace
* Tristan Storch
* visualfc
* Wangshan Lu
* Willson Mock

# Approved RFC's

* [242: Deref conversions][rfc-242]. [PR][rfc-242-pr]. Adds coercions
  from `&T` to `&U` when `T: Deref<U>`.
* [550: Macro future proofing][rfc-550]. Places limits on the grammar
  of macro matchers to avoid potential problems with adding more
  syntax to Rust. The implementation has already
  landed. [PR][rfc-550-pr].
* [565: `fmt::Show` and `fmt::String` guidelines][rfc-565]. Renames
  `Show` to `Debug`, `String` to `Display` and establishes conventions
  for when to use and implement each. [PR][rfc-565-pr].
* [Amendment to 517 for string handling][rfc-517]. [rfc-517-pr]. Defines
  the `OsString` and `OsStr` platform-specific string types.
* [587: Make return type of `Fn` traits an associated type][rfc-587]. Allows
  calls to be overloaded based on return type.

[rfc-242]: https://github.com/rust-lang/rfcs/blob/master/text/0241-deref-conversions.md
[rfc-242-pr]: https://github.com/rust-lang/rfcs/pull/241
[rfc-550]: https://github.com/rust-lang/rfcs/blob/master/text/0550-macro-future-proofing.md
[rfc-550-pr]: https://github.com/rust-lang/rfcs/pull/550
[rfc-565]: https://github.com/rust-lang/rfcs/blob/master/text/0565-show-string-guidelines.md
[rfc-565-pr]: https://github.com/rust-lang/rfcs/pull/565
[rfc-517]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md#string-handling
[rfc-517-pr]: https://github.com/rust-lang/rfcs/pull/575
[rfc-587]: https://github.com/rust-lang/rfcs/blob/master/text/0587-fn-return-should-be-an-associated-type.md
[rfc-587-pr]: https://github.com/rust-lang/rfcs/pull/587

# New RFC's

* [Introduce a default object lifetime bound][rfc-599-pr].
* [Replace `be` with `become`][rfc-601-pr].
* [Specify unwinding][rfc-638-pr].
* [Implement a `discriminant_value` intrinsic][rfc-639-pr].
* [Debug improvements][rfc-640-pr].
* [Disallow omitting the ABI in `extern` declarations][rfc-697-pr].
* [Syntax for `FullRange`][rfc-702-pr].
* [Add a new macro for 'unreachable' whose meaning differs in release
  builds][rfc-706-pr].
* [Truly unsized types][rfc-709-pr].
* [Reseeding `std::rand`][rfc-722-pr].
* [Unsafe enums][rfc-724-pr].
* [Amend macro future proofing RFC][rfc-733-pr].
* [Revert RFC to require impls to be near structs][rfc-735-pr].
* [Privacy-respecting FRU][rfc-736-pr].
* [Support variance for type parameters][rfc-738-pr].
* [Amend RFC 517 with material on `std::fs`][rfc-739-pr].
* [Integer guidelines RFC][rfc-741-pr].
* [Replace `ref` by `*` in patterns][rfc-742-pr].

[rfc-599-pr]: https://github.com/rust-lang/rfcs/pull/599
[rfc-601-pr]: https://github.com/rust-lang/rfcs/pull/601
[rfc-638-pr]: https://github.com/rust-lang/rfcs/pull/638
[rfc-639-pr]: https://github.com/rust-lang/rfcs/pull/639
[rfc-640-pr]: https://github.com/rust-lang/rfcs/pull/640
[rfc-697-pr]: https://github.com/rust-lang/rfcs/pull/697
[rfc-702-pr]: https://github.com/rust-lang/rfcs/pull/702
[rfc-706-pr]: https://github.com/rust-lang/rfcs/pull/706
[rfc-709-pr]: https://github.com/rust-lang/rfcs/pull/709
[rfc-722-pr]: https://github.com/rust-lang/rfcs/pull/722
[rfc-724-pr]: https://github.com/rust-lang/rfcs/pull/724
[rfc-733-pr]: https://github.com/rust-lang/rfcs/pull/733
[rfc-735-pr]: https://github.com/rust-lang/rfcs/pull/735
[rfc-736-pr]: https://github.com/rust-lang/rfcs/pull/736
[rfc-738-pr]: https://github.com/rust-lang/rfcs/pull/738
[rfc-739-pr]: https://github.com/rust-lang/rfcs/pull/739
[rfc-741-pr]: https://github.com/rust-lang/rfcs/pull/741
[rfc-742-pr]: https://github.com/rust-lang/rfcs/pull/742

# Community

What's [Built with Rust]?

[Built with Rust]: http://builtwithrust.com/

## Announcements

* [Weekly-meetings/2015-01-20][mtg]: goodbye view items; deref
  coercion; nounwind; discourse/ml changes; discriminant intrinsics;
  issue triage; fott. [/r/rust][mtg-r-rust].
* [PSA: io => old_io][oldio]. As part of the overhaul of `std::io` the
  existing `io` module is being renamed to move it out of the way.
* [Moving editor highlighting into their own repos][edit]. Your vim
  and emacs modes will need to be obtained elsewhere before long.
* [Issue categorization changes][iss]. Steve has been retriaging old
  issues.
* [Call for more comments on IO RFCs][iorfcs]. Now is your chance.

[mtg]: https://github.com/rust-lang/meeting-minutes/blob/master/weekly-meetings/2015-01-20.md
[mtg-r-rust]: https://www.reddit.com/r/rust/comments/2t405p/weekly_meeting_20150120_goodbye_view_items_deref/
[edit]: http://internals.rust-lang.org/t/moving-editor-highlighting-into-their-own-repos/1395
[oldio]: http://internals.rust-lang.org/t/psa-io-old-io/1403
[iss]: http://internals.rust-lang.org/t/issue-categorization-changes/1417
[iorfcs]: http://internals.rust-lang.org/t/call-for-more-comments-io-rfcs/1449

## Blog Posts

* [Functional reactive event handling][frp]. Explorations into
  functional reactive programming in Rust.
* [Mozilla's Servo Still On Track For 2015 Alpha
  Release][servo]. Phoronix picks up Jack's linux.conf.au
  talk. [/r/rust][servo-r-rust].
* [Writing Cross-Platform Games Using Rust and Piston][games]. It can
  be done.
* [Raft so far][raft-rs]. Hoverbear talks about his endeavors to
  implement the [Raft consensus algorithm][raft].
* [Graydon comments on Rust 1.0 alpha][graydon].

[frp]: http://blog.ebopp.de/blog/2015/01/26/frp-in-rust/
[servo]: http://www.phoronix.com/scan.php?page=news_item&px=Mozilla-Servo-Engine-LCA2015
[servo-r-rust]: https://www.reddit.com/r/rust/comments/2t0po8/mozillas_servo_still_on_track_for_2015_alpha/
[graydon]: http://graydon2.dreamwidth.org/195706.html
[games]: https://github.com/tedsta/getting-started-with-piston
[raft-rs]: http://www.hoverbear.org/2015/01/25/raft-so-far/
[raft]: https://raftconsensus.github.io/

## Discussions

* [Say goodbye to the mailing list][ml]. Reddit responds to the end of
  rust-dev.
* [A macro that is to `Result::or_else` what `try!` is to
  `Result::and_then`][try]. SimonSapin is trying.
* [Replace most of the collections API with ranges and
  iterators][ranges]. Gankro has a crazy far future idea.
* [Jai Demo: Data-oriented features: SOA, crazy
  'using'][jai]. Discussion on /r/rust about Jonathan Blow's latest.
* [How Rust applications and libraries fit into Debian][deb]. Making
  crates easy to repackage by Linux distributions is not yet solved.

[ranges]: http://internals.rust-lang.org/t/crazy-replace-most-of-the-collections-api-with-ranges-and-iterators/1375
[jai]: https://www.reddit.com/r/rust/comments/2t6xqz/jai_demo_dataoriented_features_soa_crazy_using/
[ml]: https://www.reddit.com/r/rust/comments/2tdqgc/rustdev_say_goodbye_to_the_mailing_list/
[try]: http://internals.rust-lang.org/t/a-macro-that-is-to-result-or-else-what-try-is-to-result-and-then/1416
[deb]: https://www.reddit.com/r/rust/comments/2tnql2/how_rust_applications_and_libraries_fit_into/

## Videos

* [Jim Blandy - Programming in Rust][blandy]. Mozilla's Jim Blandy
  talking about Rust for O'Reilly. Registration required.

[blandy]: http://post.oreilly.com/rd/9z1z7bquivj2k5agpg7tuouo569mv0bkk8e4jrajhv0

## New Projects

* [Built with Rust] - A website promoting projects built with Rust.
* [cql-ffi-safe] - Safe bindings to the DataStax C++ driver for Cassandra.
* [screenshot-rs] - Capturing the screen.
* [rust-atomicwrites] - Atomic file writing for POSIX systems.
* [winapi-rs] - Windows API bindings.
* [rust-beanstalkd] - A beanstalkd client that is compatible with
  IronMQ. It's API has been recently been redesigned.
* [mm] - A multimedia library that is like a cross between SDL and GDK.
* [seqloq] - Fast locks for read-heavy workloads.
* [r6.rs] - R6RS Scheme implementation in Rust.
* [oxischeme] - A Scheme implementation in Rust, with a working GC.
* [CoatCheck] - A library for storing values and referencing them by
  ticket.
* [emojicons] - An emoji parser.
* [maud] - A macro that takes markup and Rust tokens and emits HTML.
* [ocb.rs] - OCB-AES 'authenticryption'.
* [parser-combinators] - A parser-combinator library.

[Built with Rust]: http://builtwithrust.com/
[cql-ffi-safe]: https://github.com/tupshin/cql-ffi-safe
[screenshot-rs]: https://github.com/alexchandel/screenshot-rs
[rust-atomicwrites]: https://github.com/untitaker/rust-atomicwrites
[winapi-rs]: https://github.com/retep998/winapi-rs
[rust-beanstalkd]: https://github.com/schickling/rust-beanstalkd
[mm]: https://github.com/Daggerbot/mm
[seqloq]: https://github.com/kmcallister/seqloq
[r6.rs]: https://github.com/kimhyunkang/r6.rs
[oxischeme]: https://fitzgen.github.io/oxischeme/oxischeme/index.html
[CoatCheck]: https://www.reddit.com/r/rust/comments/2th6qf/library_coatcheck/
[emojicons]: https://github.com/sindriava/rust-emojicons
[ocb.rs]: https://github.com/kmcallister/ocb.rs
[parser-combinators]: https://github.com/Marwes/parser-combinators
[maud]: https://lambda.xyz/maud/doc/maud/

## Project Updates

* [This Week in Servo 20][twis].
* [dynamodule], kmc's experiment in dynamic OOP supports virtual
  destructors.
* [multirust] can install custom toolchains.

[twis]: http://blog.servo.org/2015/01/20/twis-20/
[dynamodule]: https://github.com/kmcallister/dynamodule/blob/561191a6d735901cb351bf6e6aa29c79f08ca43a/README.md#virtual-destructors
[multirust]: https://www.reddit.com/r/rust/comments/2tnmu2/multirust_can_also_manage_custom_local_toolchains/

## Upcoming Events

* [January 27 - Rust NY][ny].
* [January 28 - Amsterdam][amst].
* [February 1 - The Story of Rust][steve]. Steve Klabnik at FOSDEM.
* [February 1 - Servo and You][jdm]. Josh Matthews at FOSDEM.

[ny]: http://www.meetup.com/RustNY/events/219961968/
[amst]: http://www.meetup.com/Rust-Amsterdam/events/218908906/
[steve]: https://fosdem.org/2015/schedule/event/the_story_of_rust/
[jdm]: https://fosdem.org/2015/schedule/event/servo_the_parallel_web_browser_and_you!/