Skip to content

Commit 3cb7419

Browse files
committed
Update CHANGELOG
1 parent d76a7fc commit 3cb7419

File tree

3 files changed

+57
-15
lines changed

3 files changed

+57
-15
lines changed

CHANGELOG.md

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ on compilation and boot times. This release also completes
77
our integration process with Erlang/OTP logger, bringing new
88
features such as log rotation and compaction out of the box.
99

10-
You will also find additional convenience functions in `Map`,
11-
`Keyword`, all Calendar modules, and others.
10+
You will also find additional convenience functions in `Code`,
11+
`Map`, `Keyword`, all Calendar modules, and others.
1212

1313
## Compile and boot-time improvements
1414

@@ -35,7 +35,14 @@ Furthermore, Erlang/OTP 26 allows us to start applications
3535
concurrently and cache the code path lookups, decreasing the cost of
3636
booting applications. The combination of Elixir v1.15 and Erlang/OTP 26
3737
should reduce the boot time of applications, such as when starting
38-
`iex -S mix` or running a single test with `mix test`, from 5% to 15%.
38+
`iex -S mix` or running a single test with `mix test`, from 5% to 30%.
39+
40+
The compiler is also smarter in several ways: `@behaviour` declarations
41+
no longer add compile-time dependencies and aliases in patterns and
42+
guards add no dependency whatsoever, as no dispatching happens. Furthermore,
43+
Mix now tracks the digests of `@external_resource` files, reducing the
44+
amount of recompilation when swapping branches. Finally, dependencies
45+
are automatically recompiled when their compile-time configuration changes.
3946

4047
### Potential incompatibilities
4148

@@ -63,8 +70,9 @@ In Elixir v1.15, the new reports will look like:
6370

6471
** (CompileError) nofile: cannot compile file (errors have been logged)
6572

66-
This information can also be leveraged by editors, allowing them to point
67-
to several errors at once.
73+
A new function, called `Code.with_diagnostics/2`, has been added so this
74+
information can be leveraged by editors, allowing them to point to several
75+
errors at once.
6876

6977
## Integration with Erlang/OTP logger
7078

@@ -111,14 +119,17 @@ new features and on compatibility.
111119

112120
#### Elixir
113121

114-
* [Calendar] Add support for epoch time (%s) to `Calendar.strftime/2`
122+
* [Calendar] Add support for epoch time (`%s`) to `Calendar.strftime/2`
115123
* [Code] `Code.format_string!/2` now converts `'charlists'` into `~c"charlists"` by default
116124
* [Code] Add `:on_undefined_variable` to the compiler options to preserve the warning behaviour which was deprecated back in Elixir v1.4
117125
* [Code] Add `Code.loaded?/1` and `Code.ensure_all_loaded(!)/1`
118126
* [Code] Add `Code.prepend_paths/1`, `Code.append_paths/1`, and `Code.delete_paths/1`
119-
* [Code] Support nested expressions in `Code.cursor_context/1`
127+
* [Code] Add `Code.with_diagnostics/2` to return diagnostics when compiling and evaluating code
128+
* [Code.Fragment] Support nested expressions in `Code.Fragment.cursor_context/1`
129+
* [Code.Fragment] Keep operators and no paren calls in `Code.Fragment.container_cursor_to_quoted/1`
120130
* [Date] Add `Date.before?/2` and `Date.after?/2`
121131
* [DateTime] Add `DateTime.before?/2` and `DateTime.after?/2`
132+
* [DateTime] Support precision in `DateTime.utc_now/2`
122133
* [Inspect] `Inspect` now renders `'charlists'` as `~c"charlists"` by default
123134
* [Kernel] Break down `case` and `cond` inside `dbg/2`
124135
* [Kernel] Add `t:nonempty_binary/0` and `t:nonempty_bitstring/0`
@@ -137,6 +148,7 @@ new features and on compatibility.
137148
* [MapSet] Optimize most functions
138149
* [NaiveDateTime] Add `NaiveDateTime.beginning_of_day/1` and `NaiveDateTime.end_of_day/1`
139150
* [NaiveDateTime] Add `NaiveDateTime.before?/2` and `NaiveDateTime.after?/2`
151+
* [NaiveDateTime] Support precision in `NaiveDateTime.utc_now/2`
140152
* [OptionParser] Support `:return_separator` option
141153
* [Process] Add `Process.alias/0,1` and `Process.unalias/1`
142154
* [Range] Add `Range.split/2`
@@ -155,38 +167,47 @@ new features and on compatibility.
155167
* [ExUnit] Add more color configuration to ExUnit CLI formatter
156168
* [ExUnit.Callbacks] Accept `{module, function}` tuples in ExUnit `setup` callbacks
157169
* [ExUnit.Doctest] Add `ExUnit.DocTest.doctest_file/2`
158-
* [ExUnit.Formatter] When comparing to anonymous functions, defined at the same place but capturing a different environment, we will now also diff the environments
170+
* [ExUnit.Formatter] When comparing two anonymous functions, defined at the same place but capturing a different environment, we will now also diff the environments
159171

160172
#### IEx
161173

162174
* [IEx] Make pry opt-in on dbg with `--dbg pry`
163175
* [IEX] Support `IEX_HOME`
176+
* [IEx.Autocomplete] Only provide aliases when autocompleting `alias`, `import`, and `require`
177+
* [IEx.Autocomplete] Provide field completion on map and struct updates
164178
* [IEx.Helpers] Add `runtime_info(:allocators)`
165-
* [IEx.Info] Implement protocol for `Range`, `DateTime` and `Regex`
179+
* [IEx.Info] Implement protocol for `Range`, `DateTime`, and `Regex`
166180

167181
#### Logger
168182

169183
* [Logger] Add `Logger.add_handlers/1` and `Logger.default_formatter/1`
170184
* [Logger] Introduce `default_formatter` and `default_handler` configuration for Logger which configures Erlang/OTP logger
185+
* [Logger] Add `:always_evaluate_messages` configuration to Logger
171186
* [Logger.Formatter] Implement the Erlang Logger formatter API
172187
* [Logger.Formatter] Add support for ports in Logger metadata
173188

174189
#### Mix
175190

176-
* [Mix.Project] Support `def cli` to unify all CLI defaults in a single place
177-
* [Mix.Project] Add `Mix.Project.deps_tree/1`
178-
* [mix eval] Allow passing additional arguments
191+
* [mix app.start] Allow applications to be started concurrently via the `:start_concurrently` configuration
179192
* [mix compile] Set `--all-warnings` by default
180193
* [mix compile] Reduce the amount of filesystem lookups for path dependencies by storing timestamps in manifests
194+
* [mix compile] Track digests of `@external_resources`
181195
* [mix compile.app] Write `optional_applications` to `.app` file
182196
* [mix compile.elixir] Add `--purge-consolidation-path-if-stale` which will purge the given consolidation path if compilation is required
197+
* [mix deps.compile] Automatically recompile dependencies if their compile env changes
183198
* [mix deps.get] Automatically install Hex and Rebar on `mix deps.get`/`mix deps.update`
184199
* [mix deps.get] Support `--check-locked` which raises if changes to the lockfile are required
200+
* [mix eval] Allow passing additional arguments
201+
* [mix format] Support `--no-exit` option
185202
* [mix format] Allow multiple formatters per file extension and sigil
186203
* [mix format] Show diffs whenever `--check-formatted` fails
204+
* [mix format] Allow the formatting root to be configured
205+
* [mix loadpaths] Cache deps and archive loadpaths in Erlang/OTP 26
187206
* [mix profile.fprof] Support `--trace-to-file` to improve performance when working with large outputs
188207
* [mix release] Allow passing additional arguments to the `eval` command
189208
* [mix xref graph] Support `--output` flag
209+
* [Mix.Project] Support `def cli` to unify all CLI defaults in a single place
210+
* [Mix.Project] Add `Mix.Project.deps_tree/1`
190211

191212
### 2. Bug fixes
192213

@@ -196,10 +217,13 @@ new features and on compatibility.
196217
* [Code.Formatter] Remove unnecessary parens in nullary type funs
197218
* [Exception] Fix operator precedence when printing guards in `Exception.blame/3`
198219
* [File] Do not raise if there are file system race conditions in `File.cp/2`
220+
* [File] Do not raise when deleting write-only empty directories on `File.rm_rf/1`
199221
* [Kernel] Expand macros on the left side of -> in `try/rescue`
200222
* [Kernel] Raise on misplaced `...` inside typespecs
223+
* [Kernel] Do not import `behaviour_info` and `module_info` functions from Erlang modules
201224
* [Kernel.ParallelCompiler] Make sure compiler doesn't crash when there are stray messages in the inbox
202225
* [Kernel.ParallelCompiler] Track compile and runtime warnings separately
226+
* [System] Fix race condition when a script would terminate before `System.stop/1` executes
203227
* [URI] Make sure `URI.merge/2` works accordingly with relative paths
204228

205229
#### ExUnit
@@ -221,6 +245,23 @@ new features and on compatibility.
221245

222246
### 3. Soft deprecations (no warnings emitted)
223247

248+
#### Elixir
249+
250+
* [Application] `Application.start/2`, `Application.ensure_started/2`,
251+
`Application.ensure_all_started/2` with an atom as second argument is deprecated
252+
in favor of a keyword list
253+
* [File] `File.cp/3` and `File.cp_r/3` with a function as third argument
254+
is deprecated in favor of a keyword list
255+
* [Kernel.ParallelCompiler] `Kernel.ParallelCompile` now requires the `:return_diagnostics`
256+
option to be set to true
257+
258+
#### Logger
259+
260+
* [Logger] `add_backend/2`, `remove_backend/2`, and `configure_backend/2` have been deprecated
261+
in favor of the new `:logger_backends` dependency
262+
* [Logger] The `:console` configuration has been deprecated in favor of `:default_formatter`
263+
* [Logger] The `:backends` configuration has been deprecated in favor of `Logger.add_handlers/1`
264+
224265
#### Mix
225266

226267
* [Mix.Project] `:preferred_cli_env` is deprecated in favor of `:preferred_envs` in `def cli`

lib/elixir/lib/macro.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2074,7 +2074,8 @@ defmodule Macro do
20742074
Macro.expand_literals(ast, %{env | function: {:my_code, 1}})
20752075
20762076
At the moment, the only expandable literal nodes in an AST are
2077-
aliases, so this function only expands aliases.
2077+
aliases, so this function only expands aliases (and it does so
2078+
anywhere in a literal).
20782079
20792080
However, be careful when removing compile-time dependencies between
20802081
modules. If you remove them but you still invoke the module at

lib/mix/lib/mix/tasks/app.start.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ defmodule Mix.Tasks.App.Start do
1919
* `:start_permanent` - the application and all of its children
2020
applications are started in permanent mode. Defaults to `false`.
2121
22-
* `:start_concurrent` - applications are started concurrently
22+
* `:start_concurrently` - applications are started concurrently
2323
whenever possible. This option only has an effect on Erlang/OTP 26+.
2424
Defaults to `false`.
2525
@@ -60,7 +60,7 @@ defmodule Mix.Tasks.App.Start do
6060
Logger.App.stop()
6161
config = Mix.Project.config()
6262
type = type(config, opts)
63-
mode = if config[:start_concurrent], do: :concurrent, else: :serial
63+
mode = if config[:start_concurrently], do: :concurrent, else: :serial
6464
start(apps(config), type, mode)
6565
end
6666

0 commit comments

Comments
 (0)