|
| 1 | +# Version 1.58.0 [2025-06-05] |
| 2 | + |
| 3 | +This is the third rollout out of several towards a near-future major |
| 4 | +release that I am really excited about. This has been made possible |
| 5 | +due to a multi-year effort of internal re-designs, work with package |
| 6 | +maintainers, release, and repeat. This release fixes a few |
| 7 | +regressions introduced in future 1.40.0 (2025-04-10), despite passing |
| 8 | +[all unit, regression, and system |
| 9 | +tests](https://www.futureverse.org/quality.html). |
| 10 | + |
| 11 | +## New Features |
| 12 | + |
| 13 | + * Now futures produce a warning when they detect that the _default_ |
| 14 | + graphics device, as defined by R option `"device"`, is opened by, |
| 15 | + for instance, a `plot()` call without explicitly opening a graphics |
| 16 | + device. The reason for this check is that we rarely want to plot to |
| 17 | + the _default_ graphics device in parallel processing, which |
| 18 | + typically ends up plotting to a `Rplots.pdf` file that is local to |
| 19 | + the parallel worker. If that is truly wanted, please open a |
| 20 | + graphics devices explicitly (e.g. `pdf()` or `png()`) before |
| 21 | + plotting. Alternatively, explicitly set R option `device` inside |
| 22 | + the future expression. |
| 23 | + |
| 24 | +## Beta Features |
| 25 | + |
| 26 | + * Add `makeClusterFuture()` for creating a cluster of stateless |
| 27 | + parallel workers for processing via the future framework. This |
| 28 | + requires R (>= 4.4.0) [2024-04-24]. Please make sure to read |
| 29 | + `help("makeClusterFuture", package = "future")` to learn about |
| 30 | + potential pitfalls. The plan is to support more corner cases in |
| 31 | + future releases, and when not possible, add more mechanisms for |
| 32 | + detecting non-supported cases and given an informative error. |
| 33 | + |
| 34 | +## Bug Fixes |
| 35 | + |
| 36 | + * Setting `options(warn = 2)` on a parallel worker was ignored - |
| 37 | + warnings were not escalated to errors on the worker, and was |
| 38 | + instead relayed as-is in the parent R session, unless `options(warn |
| 39 | + = 2)` was also set in the parent. Now `options(warn = 2)` on a |
| 40 | + worker causes warnings to be escalated immediately to errors on the |
| 41 | + worker, which therefore also terminates the future. |
| 42 | + |
| 43 | + * `future()` arguments `stdout` and `conditions` were not applied |
| 44 | + when packages that were specified via argument `packages` were |
| 45 | + loaded and attached. This prevented us from excluding, for |
| 46 | + instance, `packageStartupMessage`:s, causing them to be displayed |
| 47 | + in sequential and multicore processing. |
| 48 | + |
| 49 | + * When the using `cluster` and `multisession` backends, one could, in |
| 50 | + some cases, end up with warnings on "package may not be available |
| 51 | + when loading" that are produced by `serialize()`. These type of |
| 52 | + warnings are now suppressed. |
| 53 | + |
| 54 | + * Now the cluster future backend tries even harder to shut down |
| 55 | + parallel cluster workers when shutting down the backend. If it |
| 56 | + fails to communicate with one or more of the parallel workers, it |
| 57 | + will now close any socket connections that remain open towards such |
| 58 | + cluster nodes. |
| 59 | + |
| 60 | + * The built-in checks for added, removed, or modified graphical |
| 61 | + devices introduced in **future** 1.40.0 (2025-04-10), could produce |
| 62 | + false positives, complaining about "A future expression must close |
| 63 | + any opened devices and must not close devices it did not |
| 64 | + open. Details: 1 devices differ: index=2, before='NA', |
| 65 | + after=''". The problem was that it did not prune the empty 'after' |
| 66 | + before the check. |
| 67 | + |
| 68 | + * The `multicore` backend did not relay `immediateCondition`:s in a |
| 69 | + near-live fashion, but only when the results of the futures where |
| 70 | + collected. |
| 71 | + |
| 72 | + * The `sequential`, `cluster`, `multisession`, and `multicore` |
| 73 | + backends relayed `immediateCondition`:s, but did not record them |
| 74 | + properly in the future object. |
| 75 | + |
| 76 | + |
1 | 77 | # Version 1.49.0 [2025-05-08] |
2 | 78 |
|
3 | 79 | This is the second rollout out of three-four major updates, which is |
|
0 commit comments