diff options
author | José Valim <jose.valim@dashbit.co> | 2023-01-30 00:10:45 +0100 |
---|---|---|
committer | José Valim <jose.valim@dashbit.co> | 2023-01-30 00:10:45 +0100 |
commit | b08834c0de71301fe359e049d1a7438141ac673f (patch) | |
tree | b21d00b11cfaad5b226c7a772f127183413f98b9 /CHANGELOG.md | |
parent | acb0e3c728b06c3f74310e5cff2d28e98015f1be (diff) | |
download | elixir-b08834c0de71301fe359e049d1a7438141ac673f.tar.gz |
Update CHANGELOG
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r-- | CHANGELOG.md | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 798aaa55c..61e3d4036 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,37 @@ This release requires Erlang/OTP 24 and later. +## Compile and boot-time improvements + +The last several releases brought improvements to compilation +time and this version is no different. In particular, this version +now caches and prunes load paths before compilation, ensuring your +project (and dependencies!) compile faster and run in an environment +closer to production. + +In a nutshell, the Erlang VM loads modules from code paths. Each +application that ships with Erlang and Elixir plus each dependency +end-up being an entry in your code path. The larger the code path, +the more work Erlang has to do in order to find a module. + +In previous versions, Mix would only add to the load paths. Therefore, +if you compiled 20 dependencies and you went to compile the 21st, +the code path would have 21 entries (plus all Erlang and Elixir apps). +This allowed modules from unrelated dependencies to be seen and made +compilation slower the more dependencies you had. + +In this release, we will now prune the code paths to only the ones +listed as dependencies. Previously if you attempted to use an Erlang/OTP +or Elixir module without adding its dependency, we would warn. Now +the module won't be found altogether, which is also the behaviour you see +if you ran your application as a `mix release`. + +Furthermore, Erlang/OTP 26 allows us to start applications concurrently +and cache the code path lookups, considerably decreasing the cost of +booting applications. The combination of Elixir v1.15 and Erlang/OTP 26 +should reduce the boot time of applications, such as when starting +`iex -S mix` or running a single test with `mix test`, from 10% to 30%. + ## v1.15.0-dev ### 1. Enhancements @@ -13,15 +44,21 @@ This release requires Erlang/OTP 24 and later. #### Elixir * [Code] `Code.format_string!/2` now converts `'charlists'` into `~c"charlists"` by default + * [Code] Add `:on_undefined_variable` to the compiler options to preserve the warning behaviour which was deprecated back in Elixir v1.4 + * [Code] Add `Code.loaded?/1` and `Code.ensure_all_loaded(!)/1` + * [Code] Add `Code.prepend_paths/1`, `Code.append_paths/1`, and `Code.delete_paths/1` * [Date] Add `Date.before?/2` and `Date.after?/2` * [DateTime] Add `DateTime.before?/2` and `DateTime.after?/2` * [Inspect] `Inspect` now renders `'charlists'` as `~c"charlists"` by default * [Kernel] Add `t:nonempty_binary/0` and `t:nonempty_bitstring/0` * [Kernel] Treat `@behaviour`s as runtime dependencies * [Kernel] Warn for nested calls without parens inside keywords + * [Kernel] Introduce mechanism to collect several errors in a module. Previously, as soon as there was a compilation error, compilation would fail. Now the compiler became a bit smarter and will report multiple errors whenever possible as multiple `error: ...` messages, similar to `warning: ...` * [Kernel.CLI] Support `--sname undefined`/`--name undefined` so a name is automatically generated * [Keyword] Add `Keyword.split_with/2` + * [Macro] Improve error message when piping into an expression ending in bracket-based access * [Map] Add `Map.split_with/2` + * [Map] Add `Map.intersect/2` and `Map.intersect/3` * [MapSet] Add `MapSet.split_with/2` * [NaiveDateTime] Add `NaiveDateTime.before?/2` and `NaiveDateTime.after?/2` * [Process] Add `Process.alias/0,1` and `Process.unalias/1` @@ -29,27 +66,39 @@ This release requires Erlang/OTP 24 and later. * [Sets] Optimize many functions in `MapSet` * [String] Update Unicode to version 15.0.0 * [Supervisor] Add support for automatic shutdown in `Supervisor` - * [Task] Remove head blocking on `Task.yield_many/2` + * [System] Support `:lines` in `System.cmd/3` to capture output line by line + * [Task] Remove head of line blocking on `Task.yield_many/2` * [Time] Add `Time.before?/2` and `Time.after?/2` + * [URI] Add `URI.append_path/2` #### ExUnit * [ExUnit] Add more color configuration to ExUnit CLI formatter * [ExUnit.Doctest] Add `ExUnit.DocTest.doctest_file/2` + * [ExUnit.Formatter] When comparing to anonymous functions, defined at the same place but capturing a different enviroment, we will now also diff the environments #### IEx + * [IEx] Make pry opt-in on dbg with `--dbg pry` * [IEx.Info] Implement protocol for `Range` and `DateTime` +#### Logger + + * [Logger.Formatter] Add support for ports in Logger metadata + #### Mix * [Mix.Project] Support `def cli` to unify all CLI defaults in a single place + * [mix eval] Allow passing additional arguments * [mix compile] Set `--all-warnings` by default * [mix compile.app] Write `optional_applications` to `.app` file + * [mix compile.elixir] Add `--purge-consolidation-path-if-stale` which will purge the given consolidation path if compilation is required * [mix deps.get] Automatically install Hex and Rebar on `mix deps.get`/`mix deps.update` * [mix deps.get] Support `--check-locked` which raises if changes to the lockfile are required * [mix format] Allow multiple formatters per file extension and sigil * [mix format] Show diffs whenever `--check-formatted` fails + * [mix profile.fprof] Support `--trace-to-file` to improve performance when working with large outputs + * [mix release] Allow passing additional arguments to the `eval` command ### 2. Bug fixes @@ -64,6 +113,7 @@ This release requires Erlang/OTP 24 and later. #### ExUnit + * [ExUnit] Fix crash when `@tag capture_log: true` was set to true and the Logger application was shut down in the middle of the test * [ExUnit] Do not merge context as tags inside the runner to reduce memory usage when emitting events to formatters * [ExUnit] Do not expand or collect vars from quote in ExUnit assertions |