summaryrefslogtreecommitdiff
path: root/CHANGELOG.md
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@dashbit.co>2023-01-30 00:10:45 +0100
committerJosé Valim <jose.valim@dashbit.co>2023-01-30 00:10:45 +0100
commitb08834c0de71301fe359e049d1a7438141ac673f (patch)
treeb21d00b11cfaad5b226c7a772f127183413f98b9 /CHANGELOG.md
parentacb0e3c728b06c3f74310e5cff2d28e98015f1be (diff)
downloadelixir-b08834c0de71301fe359e049d1a7438141ac673f.tar.gz
Update CHANGELOG
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md52
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