Skip to content

Commit ccc5753

Browse files
committed
Update CHANGELOG
1 parent 26899a9 commit ccc5753

File tree

1 file changed

+62
-3
lines changed

1 file changed

+62
-3
lines changed

CHANGELOG.md

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,62 @@
11
# Changelog for Elixir v1.18
22

3-
This release no longer supports WERL (a graphical user interface for the Erlang terminal on Windows). For a better user experience on Windows terminals, use Erlang/OTP 26+.
3+
TODO.
4+
5+
## Type system improvements
6+
7+
* Type checking and inference of patterns
8+
9+
* [Support for tuples](https://elixir-lang.org/blog/2024/08/28/typing-lists-and-tuples/).
10+
11+
## ExUnit improvements
12+
13+
ExUnit now supports parameterized tests to run the same test module multiple times under different parameters.
414

5-
## Support for new types
15+
For example, Elixir ships a local, decentralized and scalable key-value process storage called `Registry`. The registry can be partitioned and its implementation differs depending if partitioning is enabled or not. Therefore, during tests, we want to ensure both modes are exercised. With Elixir v1.18, we can achieve this by writing:
616

7-
[TODO](https://elixir-lang.org/blog/2024/08/28/typing-lists-and-tuples/).
17+
```elixir
18+
defmodule Registry.Test do
19+
use ExUnit.Case,
20+
async: true,
21+
parameterize: [
22+
%{partitions: 1},
23+
%{partitions: 8}
24+
]
25+
26+
# ... the actual tests ...
27+
end
28+
```
29+
30+
ExUnit parameterizes whole test modules. If your modules are configured to run concurrently, as above, so will the parameterized ones.
31+
32+
ExUnit also comes with the ability of specifying test groups. While ExUnit supports running tests concurrently, those tests must not have shared state between them. However, in large applications, it may be common for some tests to depend on some shared state, and other tests to depend on a completely separate state. For example, part of your tests may depend on Cassandra, while others depend on Redis. Prior to Elixir v1.18, these tests could not run concurrently, but in v1.18 they might as long as they are assigned to different groups. Tests modules within the same group do not run concurrently, but across groups, they might.
33+
34+
With features like async tests, suite partitioning, and now grouping, Elixir developers have plenty of flexibility to make the most use of their machine resources, both in development and in CI.
835

936
## `mix format --migrate`
1037

1138
TODO.
1239

40+
## Potential incompatibilities
41+
42+
This release no longer supports WERL (a graphical user interface on Windows used by Erlang 25 and earlier). For a better user experience on Windows terminals, use Erlang/OTP 26+.
43+
44+
Furthermore, in order to support inference of patterns, Elixir will raise if it finds recursive variable definitions. This means patterns that never match, such as this one, will no longer compile:
45+
46+
def foo(x = {:ok, y}, x = y)
47+
48+
However, recursion of root variables (where variables directly point to each other), will also fail to compile:
49+
50+
def foo(x = y, y = z, z = x)
51+
52+
While the definition above could succeed (as long as all three arguments are equal), the cycle is not necessary and could be removed, as below:
53+
54+
def foo(x = y, y = z, z)
55+
56+
You may also prever to write using guards:
57+
58+
def foo(x, y, z) when x == y and y == z
59+
1360
## v1.18.0-dev
1461

1562
### 1. Enhancements
@@ -19,6 +66,7 @@ TODO.
1966
* [CLI] Add experimental PowerShell scripts for `elixir`, `elixirc`, and `mix` on Windows. Those provide a safer entry point for running Elixir from other platforms
2067
* [Code] Support several migration options in `Code.format_string!/2`
2168
* [Code] Add parenthesis around `--` and `---` in `Code.format_string!/2` to make precedence clearer
69+
* [Code.Fragment] Have `:capture_arg` as its own entry in `Code.Fragment.surround_context/2`
2270
* [Config] Add `Config.read_config/1`
2371
* [Enumerable] Add `Enum.product_by/2` and `Enum.sum_by/2`
2472
* [Exception] Add `MissingApplicationsError` exception to denote missing applications
@@ -34,6 +82,7 @@ TODO.
3482
#### ExUnit
3583

3684
* [ExUnit] Support parameterized tests on `ExUnit.Case`
85+
* [ExUnit] Support test groups: tests in the same group never run concurrently
3786

3887
#### IEx
3988

@@ -42,8 +91,13 @@ TODO.
4291

4392
#### Mix
4493

94+
* [mix compile] Ensure only a single operating system process can compile at a given time
95+
* [mix deps.get] Ensure only a single operating system process can fetch deps at a given time
4596
* [mix format] Add `mix format --migrate` to migrate from deprecated functionality
4697
* [mix test] Taint failure manifest if requiring or compiling tests fail
98+
* [Mix.Project] Add a `:listeners` configuration to listen to compilation events from the current and other operating system processes
99+
* [Mix.Task.Compiler] Add API for fetching all persisted compiler diagnostics
100+
* [Mix.Task.Compiler] Add API for fetching all compiler tasks
47101

48102
### 2. Bug fixes
49103

@@ -57,6 +111,10 @@ TODO.
57111

58112
* [ExUnit.Assertions] Raise if guards are used in `assert/1` with `=`
59113

114+
#### IEx
115+
116+
* [IEx.Helpers] `IEx.Helpers.recompile/0` will reload modules changed by other operating system processes
117+
60118
#### Mix
61119

62120
* [mix compile] Ensure warnings from external resources are emitted with `--all-warnings` when files do not change
@@ -87,6 +145,7 @@ TODO.
87145
#### Mix
88146

89147
* [mix cmd] Deprecate `mix cmd --app APP` in favor of `mix do --app APP`
148+
* [Mix.Tasks.Compile] Deprecate `compilers/0` in favor of `Mix.Task.Compiler.compilers/0`
90149

91150
## v1.17
92151

0 commit comments

Comments
 (0)