|
6 | 6 |
|
7 | 7 | # Changelog for Elixir v1.20 |
8 | 8 |
|
| 9 | +This release requires Erlang/OTP 27+ and is compatible with Erlang/OTP 29. |
| 10 | + |
9 | 11 | ## Type system improvements |
10 | 12 |
|
11 | 13 | This release includes type inference of all constructs. |
@@ -173,6 +175,45 @@ The code above has a type violation, which is now caught by the type system: |
173 | 175 |
|
174 | 176 | The type system was made possible thanks to a partnership between [CNRS](https://www.cnrs.fr/) and [Remote](https://remote.com/). The development work is currently sponsored by [Fresha](https://www.fresha.com/) and [Tidewave](https://tidewave.ai/). |
175 | 177 |
|
| 178 | +## v1.20.0-rc.4 |
| 179 | + |
| 180 | +This release requires Erlang/OTP 27+ and is compatible with Erlang/OTP 29. |
| 181 | + |
| 182 | +### 1. Enhancements |
| 183 | + |
| 184 | +#### Elixir |
| 185 | + |
| 186 | + * [Code] Add `:dbg_callback` option to eval functions |
| 187 | + * [Code.Fragment] Allow preserving sigil metadata in `container_cursor_to_quoted` |
| 188 | + * [File] Add support for [:raw] opts in `File.read/2` |
| 189 | + * [Kernel] Show undefined function errors even when missing variables (this helps debug errors caused when the developer forgets to require a macro) |
| 190 | + * [PartitionSupervisor] Support via tuples in `count_children/1` and `stop/3` |
| 191 | + * [Process] Add `Process.get_label/1` |
| 192 | + |
| 193 | +#### Mix |
| 194 | + |
| 195 | + * [mix deps] Allow overriding specific dependencies in `:override` |
| 196 | + |
| 197 | +### 2. Bug fixes |
| 198 | + |
| 199 | +#### Elixir |
| 200 | + |
| 201 | + * [Integer] Fix `Integer.extended_gcd/2` returning negative GCD for zero base cases |
| 202 | + * [Integer] Raise when negative out-of-range digits are given to `Integer.undigits/2` |
| 203 | + * [Kernel] Protocols should not add compile-time dependencies on `Any` implementation |
| 204 | + * [Kernel] Ensure structs trigger recompilation for type checking purposes (regression) |
| 205 | + * [Kernel] Ensure type information propagate across `hd/tl` in guards (regression) |
| 206 | + * [Keyword] Raise `ArgumentError` in `Keyword.from_keys/2` for non-atom keys |
| 207 | + * [URI] Fix `URI.merge` leaking `:+` marker when base path is empty string |
| 208 | + |
| 209 | +#### Mix |
| 210 | + |
| 211 | + * [mix deps] Use config files to pass project state in `mix deps.partition` to avoid argv limits on Windows |
| 212 | + * [mix compile] Fix compile env change triggering full recompilation of path dependencies |
| 213 | + * [mix compile] Add a build lock around protocol consolidation in umbrellas |
| 214 | + * [mix compile] Ensure compilation of sibling deps do not mark path deps as changed |
| 215 | + * [mix test] Fix `--warnings-as-errors` not catching misnamed test file warnings |
| 216 | + |
176 | 217 | ## v1.20.0-rc.3 (2026-03-09) |
177 | 218 |
|
178 | 219 | ### 1. Enhancements |
@@ -205,7 +246,6 @@ The type system was made possible thanks to a partnership between [CNRS](https:/ |
205 | 246 | * [Code] Add `module_definition: :interpreted` option to `Code` which allows module definitions to be evaluated instead of compiled. In some applications/architectures, this can lead to drastic improvements to compilation times. Note this does not affect the generated `.beam` file, which will have the same performance/behaviour as before |
206 | 247 | * [Code] Make module purging opt-in and move temporary module deletion to the background to speed up compilation times |
207 | 248 | * [Integer] Add `Integer.popcount/1` |
208 | | - * [Kernel] Move struct validation in patterns and updates to type checker, this means adding and remove struct fields will cause fewer files to be recompiled |
209 | 249 | * [Kernel] Add type inference across clauses. For example, if one clause says `x when is_integer(x)`, then the next clause may no longer be an integer |
210 | 250 | * [Kernel] Detect and warn on redundant clauses |
211 | 251 | * [List] Add `List.first!/1` and `List.last!/1` |
|
0 commit comments