summaryrefslogtreecommitdiffstats
path: root/content/2013-08-04-this-week-in-rust.markdown
blob: 37636b829efcfc58aeb82d1d45d7c13f5321a5d2 (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
Title: This Week in Rust 9
Date: 2013-08-04 18:40
Category: This Week in Rust

Hello and welcome to the ninth issue of *This Week in Rust*. This week brings
the new `for` loop, which is very exciting, as well as a bunch of runtime
changes and cleanup.

<!-- more -->

# What's cooking on `master`?

Issue churn was +4 this week. A total of 63 PRs were merged (again).

## Breaking Changes

- **The `for` loop now uses external iterators.** This means any code written
  to use the old internal iterator protocol will no longer work. See the
  [iterator tutorial](http://static.rust-lang.org/doc/tutorial-container.html)
  for more information on how to use it. Related pull requests:
  [#8141](https://github.com/mozilla/rust/pull/8141),
  [#8184](https://github.com/mozilla/rust/pull/8184),
  [#8190](https://github.com/mozilla/rust/pull/8190),
  [#8244](https://github.com/mozilla/rust/pull/8244). A few uses now
  require `do` rather than `for` because they cannot/have not been
  implemented in terms of external iterators.
- `unsafe` is [no longer allowed](https://github.com/mozilla/rust/pull/8235)
  for functions in `extern` blocks: they are all unsafe.
- The [`extra::dbg` module](https://github.com/mozilla/rust/pull/8175) has
  been removed.
- `uint::range` and all its friends have been replaced with an [external
  iterator](https://github.com/mozilla/rust/pull/8216), that is in the
  prelude. Code like the following now works:
  ```
  for x in range(0, 10) {
	  println(x.to_str());
  }
  ```
- The pipes compiler (the thing driving `proto!`) [has been
  removed](https://github.com/mozilla/rust/pull/8170), as it saw limited
  use, was very old, and was a significant maintenance burden.
- `PortSet` [has been removed](https://github.com/mozilla/rust/pull/8164) from
  std, as the new scheduler does not support it.
- A bunch of old task APIs [have been
  removed](https://github.com/mozilla/rust/pull/8139), aslo in preparation for
  the new schduler.
- `is_utf8` now [rejects overlong
  encodings](https://github.com/mozilla/rust/pull/8133).
- The iterator adaptors [no longer have the Iterator
  suffix](https://github.com/mozilla/rust/pull/8090), same with [str and vec
  iterators](https://github.com/mozilla/rust/pull/8095) as well.

## newrt changes

A bunch of newrt things landed this week, so it gets its own section.

- Some [bugs preventing the arc and sync tests from
  passing](https://github.com/mozilla/rust/pull/8234) have been fixed.
- The new scheduler now supports [the `SingleThreaded` spawn
  mode](https://github.com/mozilla/rust/pull/8221).
- A bunch of work with task killing [has
  landed](https://github.com/mozilla/rust/pull/8195).
- Some [major TLS changes](https://github.com/mozilla/rust/pull/8116) also
  landed.
- Tasks can [now be named](https://github.com/mozilla/rust/pull/8158).
- [`select` on newrt pipes](https://github.com/mozilla/rust/pull/8008) has
  been implemented.

## Notable library additions, bugfixes, and cleanup

- `Map::contains_key` is [now a default
  method](https://github.com/mozilla/rust/pull/8246) implemented in terms of
  `Map::find`
- A `dynamic_lib` segfault [has been
  fixed](https://github.com/mozilla/rust/pull/8219).
- A keyed `HashMap` constructor is [now
  exposed](https://github.com/mozilla/rust/pull/8186) for runtimeless programs
  that want to use it.
- The `Str` trait now has an [`into_owned`
  method](https://github.com/mozilla/rust/pull/8204) to avoid copies when you
  already have a `~str`.
- A bunch of [SHA1 and SHA2
  cleanup/optimizations](https://github.com/mozilla/rust/pull/8174) landed. I
  hear that the speed is almost optimal, only a few cycles/byte short of
  Intel's optimized implementation.
- Errno coverage has been [significantly expanded for
  Linux](https://github.com/mozilla/rust/pull/8193). I added all of the ones
  that were missing, at least the ones that were present on my system.
- `assert!()` without a message [now does less
  allocation](https://github.com/mozilla/rust/pull/8150).
- '\' is [no longer treated as a path
  separater](https://github.com/mozilla/rust/pull/8138) on POSIX system.
- `getopt`'s `opts_str` [has been corrected to use more than just the first
  element of the vector](https://github.com/mozilla/rust/pull/8135).
- Some more methods [were added](https://github.com/mozilla/rust/pull/8115) in
  `std::num`.
- An iterator over the offsets of each character in a string [was
  added](https://github.com/mozilla/rust/pull/8082).
- A bunch of `RandomAccessIterator` implementations [have been
  added](https://github.com/mozilla/rust/pull/8120).
- `Clone` and `DeepClone` are [now
  implemented](https://github.com/mozilla/rust/pull/8109) for `extern "Rust"
  fn`.

## Notable compiler additions, bugfixes, and cleanup

- A `cfg!` syntax extension [has been
  added](https://github.com/mozilla/rust/pull/8188) for conditionally running
  code based on crate configuration, similar to what `#[cfg]` does for
  conditional compilation. It expands into a true/false constant, so LLVM
  should optimize out the dead branches.
- Some more codegen tests [have been
  added](https://github.com/mozilla/rust/pull/8165).
- `copy` [has been removed as a
  keyword](https://github.com/mozilla/rust/pull/8162).
- Static struct initializers [can now contain
  `..base`](https://github.com/mozilla/rust/pull/8091) for functional update.
- Take glue [has been unified](https://github.com/mozilla/rust/pull/8146) for
  unique pointer type.
- Pointer arithmetic is [now implemented with
  GEP](https://github.com/mozilla/rust/pull/8121) rather than casting to int
  and back to the pointer.
- Some more AST types [were
  renamed](https://github.com/mozilla/rust/pull/8107).
- Cross-crate conditions [now
  work](https://github.com/mozilla/rust/pull/8185).

## Documentation, tools, and other stuff

- LLVM assertions [can now be
  disabled](https://github.com/mozilla/rust/pull/8147) with a configure
  option.
- Benchmarking can [now be
  disabled](https://github.com/mozilla/rust/pull/8111) by passing `NO_BENCH=1`
  to make.
- `NO_REBUILD` [no longer requires a
  re-boostrap](https://github.com/mozilla/rust/pull/8110), which should make
  debug cycles on libstd much shorter.
- `vec` [now has module
  documentation](https://github.com/mozilla/rust/pull/7223).
- rustpkg [now handles tags](https://github.com/mozilla/rust/pull/8032), and
  not just version numbers, in the package ID.

# Meetings

The [Tuesday
meeting](https://github.com/mozilla/rust/wiki/Meeting-weekly-2013-07-30) this
week was quite meaty. I'm not going to try to summarize it, as it seems no
real decisions were made.

# Discussion + Blog posts

- [Visibility scopes in Rust Debug
  Info](http://michaelwoerister.github.io/2013/08/03/visibility-scopes.html).
- [Architecting Servo: Pipelines and
  Parallelism](https://air.mozilla.org/2013-intern-kuehn/), a talk by Tim
  Kuehn.
- [Runtimeless
  sprocketnes](http://www.reddit.com/r/rust/comments/1jo431/runtimeless_sprocketnes/).
- [Porting machine learning algorithms to
  Rust](http://www.reddit.com/r/rust/comments/1joy7f/porting_machine_learning_algorithms_to_rust/).
- [RFC: Overloadable dereference
  operator](https://mail.mozilla.org/pipermail/rust-dev/2013-July/005039.html).

# External projects

- [RustGnuplot](https://github.com/SiegeLord/RustGnuplot) was updated to
  latest Rust.
- A [protobuf implementation](https://github.com/stepancheg/rust-protobuf) has
  been started.
- [rustsqlite](https://github.com/linuxfood/rustsqlite) has
  been updated to latest Rust.
- A [library for HTML escaping](https://github.com/veddan/rust-htmlescape) has
  been created.
- A [library for procedurally generating
  noise](https://github.com/bjz/noise-rs) has been created.
- A [pure-Rust implementation of
  Keccak](https://github.com/MarkJr94/rust-keccak) has been created.
- [rust-zmq](https://github.com/erickt/rust-zmq) has been updated to latest
  Rust, as well as cleaner error/constant interface.
- [q3](https://github.com/Jeaye/q3) now does multithreaded rendering.