]>
Commit | Line | Data |
---|---|---|
83c7162d XL |
1 | # Release rayon 1.0.1 |
2 | ||
3 | - Added more documentation for `rayon::iter::split()`. | |
4 | - Corrected links and typos in documentation. | |
5 | ||
6 | ## Contributors | |
7 | ||
8 | Thanks to all of the contributors for this release! | |
9 | ||
10 | - @cuviper | |
11 | - @HadrienG2 | |
12 | - @matthiasbeyer | |
13 | - @nikomatsakis | |
14 | ||
15 | ||
2c00a5a8 XL |
16 | # Release rayon 1.0.0 / rayon-core 1.4.0 |
17 | ||
18 | - `ParallelIterator` added the `update` method which applies a function to | |
19 | mutable references, inspired by `itertools`. | |
20 | - `IndexedParallelIterator` added the `chunks` method which yields vectors of | |
21 | consecutive items from the base iterator, inspired by `itertools`. | |
22 | - `String` now implements `FromParallelIterator<Cow<str>>` and | |
23 | `ParallelExtend<Cow<str>>`, inspired by `std`. | |
24 | - `()` now implements `FromParallelIterator<()>`, inspired by `std`. | |
25 | - The new `ThreadPoolBuilder` replaces and deprecates `Configuration`. | |
26 | - Errors from initialization now have the concrete `ThreadPoolBuildError` | |
27 | type, rather than `Box<Error>`, and this type implements `Send` and `Sync`. | |
28 | - `ThreadPool::new` is deprecated in favor of `ThreadPoolBuilder::build`. | |
29 | - `initialize` is deprecated in favor of `ThreadPoolBuilder::build_global`. | |
30 | - Examples have been added to most of the parallel iterator methods. | |
31 | - A lot of the documentation has been reorganized and extended. | |
32 | ||
33 | ## Breaking changes | |
34 | ||
35 | - Rayon now requires rustc 1.13 or greater. | |
36 | - `IndexedParallelIterator::len` and `ParallelIterator::opt_len` now operate on | |
37 | `&self` instead of `&mut self`. | |
38 | - `IndexedParallelIterator::collect_into` is now `collect_into_vec`. | |
39 | - `IndexedParallelIterator::unzip_into` is now `unzip_into_vecs`. | |
40 | - Rayon no longer exports the deprecated `Configuration` and `initialize` from | |
41 | rayon-core. | |
42 | ||
43 | ## Contributors | |
44 | ||
45 | Thanks to all of the contributors for this release! | |
46 | ||
47 | - @Bilkow | |
48 | - @cuviper | |
49 | - @Enet4 | |
50 | - @ignatenkobrain | |
51 | - @iwillspeak | |
52 | - @jeehoonkang | |
53 | - @jwass | |
54 | - @Kerollmops | |
55 | - @KodrAus | |
56 | - @kornelski | |
57 | - @MaloJaffre | |
58 | - @nikomatsakis | |
59 | - @obv-mikhail | |
60 | - @oddg | |
61 | - @phimuemue | |
62 | - @stjepang | |
63 | - @tmccombs | |
64 | - bors[bot] | |
65 | ||
66 | ||
67 | # Release rayon 0.9.0 / rayon-core 1.3.0 / rayon-futures 0.1.0 | |
68 | ||
69 | - `Configuration` now has a `build` method. | |
70 | - `ParallelIterator` added `flatten` and `intersperse`, both inspired by | |
71 | itertools. | |
72 | - `IndexedParallelIterator` added `interleave`, `interleave_shortest`, and | |
73 | `zip_eq`, all inspired by itertools. | |
74 | - The new functions `iter::empty` and `once` create parallel iterators of | |
75 | exactly zero or one item, like their `std` counterparts. | |
76 | - The new functions `iter::repeat` and `repeatn` create parallel iterators | |
77 | repeating an item indefinitely or `n` times, respectively. | |
78 | - The new function `join_context` works like `join`, with an added `FnContext` | |
79 | parameter that indicates whether the job was stolen. | |
80 | - `Either` (used by `ParallelIterator::partition_map`) is now re-exported from | |
81 | the `either` crate, instead of defining our own type. | |
82 | - `Either` also now implements `ParallelIterator`, `IndexedParallelIterator`, | |
83 | and `ParallelExtend` when both of its `Left` and `Right` types do. | |
84 | - All public types now implement `Debug`. | |
85 | - Many of the parallel iterators now implement `Clone` where possible. | |
86 | - Much of the documentation has been extended. (but still could use more help!) | |
87 | - All rayon crates have improved metadata. | |
88 | - Rayon was evaluated in the Libz Blitz, leading to many of these improvements. | |
89 | - Rayon pull requests are now guarded by bors-ng. | |
90 | ||
91 | ## Futures | |
92 | ||
93 | The `spawn_future()` method has been refactored into its own `rayon-futures` | |
94 | crate, now through a `ScopeFutureExt` trait for `ThreadPool` and `Scope`. The | |
95 | supporting `rayon-core` APIs are still gated by `--cfg rayon_unstable`. | |
96 | ||
97 | ## Breaking changes | |
98 | ||
99 | - Two breaking changes have been made to `rayon-core`, but since they're fixing | |
100 | soundness bugs, we are considering these _minor_ changes for semver. | |
101 | - `Scope::spawn` now requires `Send` for the closure. | |
102 | - `ThreadPool::install` now requires `Send` for the return value. | |
103 | - The `iter::internal` module has been renamed to `iter::plumbing`, to hopefully | |
104 | indicate that while these are low-level details, they're not really internal | |
105 | or private to rayon. The contents of that module are needed for third-parties | |
106 | to implement new parallel iterators, and we'll treat them with normal semver | |
107 | stability guarantees. | |
108 | - The function `rayon::iter::split` is no longer re-exported as `rayon::split`. | |
109 | ||
110 | ## Contributors | |
111 | ||
112 | Thanks to all of the contributors for this release! | |
113 | ||
114 | - @AndyGauge | |
115 | - @ChristopherDavenport | |
116 | - @chrisvittal | |
117 | - @cuviper | |
118 | - @dns2utf8 | |
119 | - @dtolnay | |
120 | - @frewsxcv | |
121 | - @gsquire | |
122 | - @Hittherhod | |
123 | - @jdr023 | |
124 | - @laumann | |
125 | - @leodasvacas | |
126 | - @lvillani | |
127 | - @MajorBreakfast | |
128 | - @mamuleanu | |
129 | - @marmistrz | |
130 | - @mbrubeck | |
131 | - @mgattozzi | |
132 | - @nikomatsakis | |
133 | - @smt923 | |
134 | - @stjepang | |
135 | - @tmccombs | |
136 | - @vishalsodani | |
137 | - bors[bot] | |
138 | ||
139 | ||
140 | # Release rayon 0.8.2 | |
141 | ||
142 | - `ParallelSliceMut` now has six parallel sorting methods with the same | |
143 | variations as the standard library. | |
144 | - `par_sort`, `par_sort_by`, and `par_sort_by_key` perform stable sorts in | |
145 | parallel, using the default order, a custom comparator, or a key extraction | |
146 | function, respectively. | |
147 | - `par_sort_unstable`, `par_sort_unstable_by`, and `par_sort_unstable_by_key` | |
148 | perform unstable sorts with the same comparison options. | |
149 | - Thanks to @stjepang! | |
150 | ||
151 | # Release rayon 0.8.1 / rayon-core 1.2.0 | |
152 | ||
153 | - The following core APIs are being stabilized: | |
154 | - `rayon::spawn()` -- spawns a task into the Rayon threadpool; as it | |
155 | is contained in the global scope (rather than a user-created | |
156 | scope), the task cannot capture anything from the current stack | |
157 | frame. | |
158 | - `ThreadPool::join()`, `ThreadPool::spawn()`, `ThreadPool::scope()` | |
159 | -- convenience APIs for launching new work within a thread-pool. | |
160 | - The various iterator adapters are now tagged with `#[must_use]` | |
161 | - Parallel iterators now offer a `for_each_with` adapter, similar to | |
162 | `map_with`. | |
163 | - We are adopting a new approach to handling the remaining unstable | |
164 | APIs (which primarily pertain to futures integration). As awlays, | |
165 | unstable APIs are intended for experimentation, but do not come with | |
166 | any promise of compatibility (in other words, we might change them | |
167 | in arbitrary ways in any release). Previously, we designated such | |
168 | APIs using a Cargo feature "unstable". Now, we are using a regular | |
169 | `#[cfg]` flag. This means that to see the unstable APIs, you must do | |
170 | `RUSTFLAGS='--cfg rayon_unstable' cargo build`. This is | |
171 | intentionally inconvenient; in particular, if you are a library, | |
172 | then your clients must also modify their environment, signaling | |
173 | their agreement to instability. | |
174 | ||
175 | # Release rayon 0.8.0 / rayon-core 1.1.0 | |
176 | ||
177 | ## Rayon 0.8.0 | |
178 | ||
179 | - Added the `map_with` and `fold_with` combinators, which help for | |
180 | passing along state (like channels) that cannot be shared between | |
181 | threads but which can be cloned on each thread split. | |
182 | - Added the `while_some` combinator, which helps for writing short-circuiting iterators. | |
183 | - Added support for "short-circuiting" collection: e.g., collecting | |
184 | from an iterator producing `Option<T>` or `Result<T, E>` into a | |
185 | `Option<Collection<T>>` or `Result<Collection<T>, E>`. | |
186 | - Support `FromParallelIterator` for `Cow`. | |
187 | - Removed the deprecated weight APIs. | |
188 | - Simplified the parallel iterator trait hierarchy by removing the | |
189 | `BoundedParallelIterator` and `ExactParallelIterator` traits, | |
190 | which were not serving much purpose. | |
191 | - Improved documentation. | |
192 | - Added some missing `Send` impls. | |
193 | - Fixed some small bugs. | |
194 | ||
195 | ## Rayon-core 1.1.0 | |
196 | ||
197 | - We now have more documentation. | |
198 | - Renamed the (unstable) methods `spawn_async` and | |
199 | `spawn_future_async` -- which spawn tasks that cannot hold | |
200 | references -- to simply `spawn` and `spawn_future`, respectively. | |
201 | - We are now using the coco library for our deque. | |
202 | - Individual threadpools can now be configured in "breadth-first" | |
203 | mode, which causes them to execute spawned tasks in the reverse | |
204 | order that they used to. In some specific scenarios, this can be a | |
205 | win (though it is not generally the right choice). | |
206 | - Added top-level functions: | |
207 | - `current_thread_index`, for querying the index of the current worker thread within | |
208 | its thread-pool (previously available as `thread_pool.current_thread_index()`); | |
209 | - `current_thread_has_pending_tasks`, for querying whether the | |
210 | current worker that has an empty task deque or not. This can be | |
211 | useful when deciding whether to spawn a task. | |
212 | - The environment variables for controlling Rayon are now | |
213 | `RAYON_NUM_THREADS` and `RAYON_LOG`. The older variables (e.g., | |
214 | `RAYON_RS_NUM_CPUS` are still supported but deprecated). | |
215 | ||
216 | ## Rayon-demo | |
217 | ||
218 | - Added a new game-of-life benchmark. | |
219 | ||
220 | ## Contributors | |
221 | ||
222 | Thanks to the following contributors: | |
223 | ||
224 | - @ChristopherDavenport | |
225 | - @SuperFluffy | |
226 | - @antoinewdg | |
227 | - @crazymykl | |
228 | - @cuviper | |
229 | - @glandium | |
230 | - @julian-seward1 | |
231 | - @leodasvacas | |
232 | - @leshow | |
233 | - @lilianmoraru | |
234 | - @mschmo | |
235 | - @nikomatsakis | |
236 | - @stjepang | |
237 | ||
238 | # Release rayon 0.7.1 / rayon-core 1.0.2 | |
239 | ||
240 | This release is a targeted performance fix for #343, an issue where | |
241 | rayon threads could sometimes enter into a spin loop where they would | |
242 | be unable to make progress until they are pre-empted. | |
243 | ||
244 | # Release rayon 0.7 / rayon-core 1.0 | |
245 | ||
246 | This release marks the first step towards Rayon 1.0. **For best | |
247 | performance, it is important that all Rayon users update to at least | |
248 | Rayon 0.7.** This is because, as of Rayon 0.7, we have taken steps to | |
249 | ensure that, no matter how many versions of rayon are actively in use, | |
250 | there will only be a single global scheduler. This is achieved via the | |
251 | `rayon-core` crate, which is being released at version 1.0, and which | |
252 | encapsulates the core schedule APIs like `join()`. (Note: the | |
253 | `rayon-core` crate is, to some degree, an implementation detail, and | |
254 | not intended to be imported directly; it's entire API surface is | |
255 | mirrored through the rayon crate.) | |
256 | ||
257 | We have also done a lot of work reorganizing the API for Rayon 0.7 in | |
258 | preparation for 1.0. The names of iterator types have been changed and | |
259 | reorganized (but few users are expected to be naming those types | |
260 | explicitly anyhow). In addition, a number of parallel iterator methods | |
261 | have been adjusted to match those in the standard iterator traits more | |
262 | closely. See the "Breaking Changes" section below for | |
263 | details. | |
264 | ||
265 | Finally, Rayon 0.7 includes a number of new features and new parallel | |
266 | iterator methods. **As of this release, Rayon's parallel iterators | |
267 | have officially reached parity with sequential iterators** -- that is, | |
268 | every sequential iterator method that makes any sense in parallel is | |
269 | supported in some capacity. | |
270 | ||
271 | ### New features and methods | |
272 | ||
273 | - The internal `Producer` trait now features `fold_with`, which enables | |
274 | better performance for some parallel iterators. | |
275 | - Strings now support `par_split()` and `par_split_whitespace()`. | |
276 | - The `Configuration` API is expanded and simplified: | |
277 | - `num_threads(0)` no longer triggers an error | |
278 | - you can now supply a closure to name the Rayon threads that get created | |
279 | by using `Configuration::thread_name`. | |
280 | - you can now inject code when Rayon threads start up and finish | |
281 | - you can now set a custom panic handler to handle panics in various odd situations | |
282 | - Threadpools are now able to more gracefully put threads to sleep when not needed. | |
283 | - Parallel iterators now support `find_first()`, `find_last()`, `position_first()`, | |
284 | and `position_last()`. | |
285 | - Parallel iterators now support `rev()`, which primarily affects subsequent calls | |
286 | to `enumerate()`. | |
287 | - The `scope()` API is now considered stable (and part of `rayon-core`). | |
288 | - There is now a useful `rayon::split` function for creating custom | |
289 | Rayon parallel iterators. | |
290 | - Parallel iterators now allow you to customize the min/max number of | |
291 | items to be processed in a given thread. This mechanism replaces the | |
292 | older `weight` mechanism, which is deprecated. | |
293 | - `sum()` and friends now use the standard `Sum` traits | |
294 | ||
295 | ### Breaking changes | |
296 | ||
297 | In the move towards 1.0, there have been a number of minor breaking changes: | |
298 | ||
299 | - Configuration setters like `Configuration::set_num_threads()` lost the `set_` prefix, | |
300 | and hence become something like `Configuration::num_threads()`. | |
301 | - `Configuration` getters are removed | |
302 | - Iterator types have been shuffled around and exposed more consistently: | |
303 | - combinator types live in `rayon::iter`, e.g. `rayon::iter::Filter` | |
304 | - iterators over various types live in a module named after their type, | |
305 | e.g. `rayon::slice::Windows` | |
306 | - When doing a `sum()` or `product()`, type annotations are needed for the result | |
307 | since it is now possible to have the resulting sum be of a type other than the value | |
308 | you are iterating over (this mirrors sequential iterators). | |
309 | ||
310 | ### Experimental features | |
311 | ||
312 | Experimental features require the use of the `unstable` feature. Their | |
313 | APIs may change or disappear entirely in future releases (even minor | |
314 | releases) and hence they should be avoided for production code. | |
315 | ||
316 | - We now have (unstable) support for futures integration. You can use | |
317 | `Scope::spawn_future` or `rayon::spawn_future_async()`. | |
318 | - There is now a `rayon::spawn_async()` function for using the Rayon | |
319 | threadpool to run tasks that do not have references to the stack. | |
320 | ||
321 | ### Contributors | |
322 | ||
323 | Thanks to the following people for their contributions to this release: | |
324 | ||
325 | - @Aaronepower | |
326 | - @ChristopherDavenport | |
327 | - @bluss | |
328 | - @cuviper | |
329 | - @froydnj | |
330 | - @gaurikholkar | |
331 | - @hniksic | |
332 | - @leodasvacas | |
333 | - @leshow | |
334 | - @martinhath | |
335 | - @mbrubeck | |
336 | - @nikomatsakis | |
337 | - @pegomes | |
338 | - @schuster | |
339 | - @torkleyy | |
340 | ||
341 | # Release 0.6 | |
342 | ||
343 | This release includes a lot of progress towards the goal of parity | |
344 | with the sequential iterator API, though there are still a few methods | |
345 | that are not yet complete. If you'd like to help with that effort, | |
346 | [check out the milestone](https://github.com/nikomatsakis/rayon/issues?q=is%3Aopen+is%3Aissue+milestone%3A%22Parity+with+the+%60Iterator%60+trait%22) | |
347 | to see the remaining issues. | |
348 | ||
349 | **Announcement:** @cuviper has been added as a collaborator to the | |
350 | Rayon repository for all of his outstanding work on Rayon, which | |
351 | includes both internal refactoring and helping to shape the public | |
352 | API. Thanks @cuviper! Keep it up. | |
353 | ||
354 | - We now support `collect()` and not just `collect_with()`. | |
355 | You can use `collect()` to build a number of collections, | |
356 | including vectors, maps, and sets. Moreover, when building a vector | |
357 | with `collect()`, you are no longer limited to exact parallel iterators. | |
358 | Thanks @nikomatsakis, @cuviper! | |
359 | - We now support `skip()` and `take()` on parallel iterators. | |
360 | Thanks @martinhath! | |
361 | - **Breaking change:** We now match the sequential APIs for `min()` and `max()`. | |
362 | We also support `min_by_key()` and `max_by_key()`. Thanks @tapeinosyne! | |
363 | - **Breaking change:** The `mul()` method is now renamed to `product()`, | |
364 | to match sequential iterators. Thanks @jonathandturner! | |
365 | - We now support parallel iterator over ranges on `u64` values. Thanks @cuviper! | |
366 | - We now offer a `par_chars()` method on strings for iterating over characters | |
367 | in parallel. Thanks @cuviper! | |
368 | - We now have new demos: a traveling salesman problem solver as well as matrix | |
369 | multiplication. Thanks @nikomatsakis, @edre! | |
370 | - We are now documenting our minimum rustc requirement (currently | |
371 | v1.12.0). We will attempt to maintain compatibility with rustc | |
372 | stable v1.12.0 as long as it remains convenient, but if new features | |
373 | are stabilized or added that would be helpful to Rayon, or there are | |
374 | bug fixes that we need, we will bump to the most recent rustc. Thanks @cuviper! | |
375 | - The `reduce()` functionality now has better inlining. | |
376 | Thanks @bluss! | |
377 | - The `join()` function now has some documentation. Thanks @gsquire! | |
378 | - The project source has now been fully run through rustfmt. | |
379 | Thanks @ChristopherDavenport! | |
380 | - Exposed helper methods for accessing the current thread index. | |
381 | Thanks @bholley! | |
382 | ||
383 | # Release 0.5 | |
384 | ||
385 | - **Breaking change:** The `reduce` method has been vastly | |
386 | simplified, and `reduce_with_identity` has been deprecated. | |
387 | - **Breaking change:** The `fold` method has been changed. It used to | |
388 | always reduce the values, but now instead it is a combinator that | |
389 | returns a parallel iterator which can itself be reduced. See the | |
390 | docs for more information. | |
391 | - The following parallel iterator combinators are now available (thanks @cuviper!): | |
392 | - `find_any()`: similar to `find` on a sequential iterator, | |
393 | but doesn't necessarily return the *first* matching item | |
394 | - `position_any()`: similar to `position` on a sequential iterator, | |
395 | but doesn't necessarily return the index of *first* matching item | |
396 | - `any()`, `all()`: just like their sequential counterparts | |
397 | - The `count()` combinator is now available for parallel iterators. | |
398 | - We now build with older versions of rustc again (thanks @durango!), | |
399 | as we removed a stray semicolon from `thread_local!`. | |
400 | - Various improvements to the (unstable) `scope()` API implementation. | |
401 | ||
402 | # Release 0.4.3 | |
403 | ||
404 | - Parallel iterators now offer an adaptive weight scheme, | |
405 | which means that explicit weights should no longer | |
406 | be necessary in most cases! Thanks @cuviper! | |
407 | - We are considering removing weights or changing the weight mechanism | |
408 | before 1.0. Examples of scenarios where you still need weights even | |
409 | with this adaptive mechanism would be great. Join the discussion | |
410 | at <https://github.com/nikomatsakis/rayon/issues/111>. | |
411 | - New (unstable) scoped threads API, see `rayon::scope` for details. | |
412 | - You will need to supply the [cargo feature] `unstable`. | |
413 | - The various demos and benchmarks have been consolidated into one | |
414 | program, `rayon-demo`. | |
415 | - Optimizations in Rayon's inner workings. Thanks @emilio! | |
416 | - Update `num_cpus` to 1.0. Thanks @jamwt! | |
417 | - Various internal cleanup in the implementation and typo fixes. | |
418 | Thanks @cuviper, @Eh2406, and @spacejam! | |
419 | ||
420 | [cargo feature]: http://doc.crates.io/manifest.html#the-features-section | |
421 | ||
422 | # Release 0.4.2 | |
423 | ||
424 | - Updated crates.io metadata. | |
425 | ||
426 | # Release 0.4.1 | |
427 | ||
428 | - New `chain` combinator for parallel iterators. | |
429 | - `Option`, `Result`, as well as many more collection types now have | |
430 | parallel iterators. | |
431 | - New mergesort demo. | |
432 | - Misc fixes. | |
433 | ||
434 | Thanks to @cuviper, @edre, @jdanford, @frewsxcv for their contributions! | |
435 | ||
436 | # Release 0.4 | |
437 | ||
438 | - Make use of latest versions of catch-panic and various fixes to panic propagation. | |
439 | - Add new prime sieve demo. | |
440 | - Add `cloned()` and `inspect()` combinators. | |
441 | - Misc fixes for Rust RFC 1214. | |
442 | ||
443 | Thanks to @areilb1, @Amanieu, @SharplEr, and @cuviper for their contributions! | |
444 | ||
445 | # Release 0.3 | |
446 | ||
447 | - Expanded `par_iter` APIs now available: | |
448 | - `into_par_iter` is now supported on vectors (taking ownership of the elements) | |
449 | - Panic handling is much improved: | |
450 | - if you use the Nightly feature, experimental panic recovery is available | |
451 | - otherwise, panics propagate out and poision the workpool | |
452 | - New `Configuration` object to control number of threads and other details | |
453 | - New demos and benchmarks | |
454 | - try `cargo run --release -- visualize` in `demo/nbody` :) | |
455 | - Note: a nightly compiler is required for this demo due to the | |
456 | use of the `+=` syntax | |
457 | ||
458 | Thanks to @bjz, @cuviper, @Amanieu, and @willi-kappler for their contributions! | |
459 | ||
460 | # Release 0.2 and earlier | |
461 | ||
462 | No release notes were being kept at this time. |