aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2024-03-21 09:44:32 +0100
committerLoïc Hoguin <[email protected]>2024-03-21 09:44:32 +0100
commit2ab00e3be3f7b97fcb0770dccdccfde9bcd6d800 (patch)
treec2c909e4b76f80ad3bbc9e2ac2fa43e1764b6e3a
parent6d32269664d9cc82336b6c9f2bed706250e7b918 (diff)
downloadci.erlang.mk-2ab00e3be3f7b97fcb0770dccdccfde9bcd6d800.tar.gz
ci.erlang.mk-2ab00e3be3f7b97fcb0770dccdccfde9bcd6d800.tar.bz2
ci.erlang.mk-2ab00e3be3f7b97fcb0770dccdccfde9bcd6d800.zip
OTP-27.0-rc2
-rw-r--r--early-plugins.mk4
-rw-r--r--release-notes/OTP-27.0-rc2.README.txt3075
2 files changed, 3077 insertions, 2 deletions
diff --git a/early-plugins.mk b/early-plugins.mk
index 008285b..88b63f6 100644
--- a/early-plugins.mk
+++ b/early-plugins.mk
@@ -21,7 +21,7 @@ OTP-23 := OTP-23.0.4 OTP-23.1.5 OTP-23.2.7.3 OTP-23.3.4.20
OTP-24 := OTP-24.0.6 OTP-24.1.7 OTP-24.2.2 OTP-24.3.4.16
OTP-25 := OTP-25.0.4 OTP-25.1.2.1 OTP-25.2.3 OTP-25.3.2.10
OTP-26 := OTP-26.0.2 OTP-26.1.2 OTP-26.2.3
-OTP-27 := OTP-27.0-rc1
+OTP-27 := OTP-27.0-rc2
OTP-18+ := $(OTP-18) $(OTP-19) $(OTP-20) $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27)
OTP-19+ := $(OTP-19) $(OTP-20) $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27)
@@ -120,7 +120,7 @@ OTP-25-DROPPED := OTP-25.0-rc1 OTP-25.0-rc2 OTP-25.0-rc3 OTP-25.0 \
OTP-25.3.2.3 OTP-25.3.2.4 OTP-25.3.2.5 OTP-25.3.2.6 OTP-25.3.2.7 OTP-25.3.2.8 OTP-25.3.2.9
OTP-26-DROPPED := OTP-26.0-rc3 \
OTP-26.0 OTP-26.0.1 OTP-26.1 OTP-26.1.1 OTP-26.2 OTP-26.2.1 OTP-26.2.2
-OTP-27-DROPPED :=
+OTP-27-DROPPED := OTP-27.0-rc1
OTP-DROPPED := $(OTP-18-DROPPED) $(OTP-19-DROPPED) $(OTP-20-DROPPED) \
$(OTP-21-DROPPED) $(OTP-22-DROPPED) $(OTP-23-DROPPED) $(OTP-24-DROPPED)
diff --git a/release-notes/OTP-27.0-rc2.README.txt b/release-notes/OTP-27.0-rc2.README.txt
new file mode 100644
index 0000000..b44a5f0
--- /dev/null
+++ b/release-notes/OTP-27.0-rc2.README.txt
@@ -0,0 +1,3075 @@
+```
+Inital Release: OTP 27.0
+Git Tag: OTP-27.0
+Date: 2024-03-21
+Trouble Report Id: OTP-16607, OTP-18568, OTP-18577, OTP-18589,
+ OTP-18590, OTP-18594, OTP-18606, OTP-18608,
+ OTP-18609, OTP-18622, OTP-18639, OTP-18641,
+ OTP-18642, OTP-18648, OTP-18658, OTP-18665,
+ OTP-18667, OTP-18668, OTP-18671, OTP-18673,
+ OTP-18680, OTP-18682, OTP-18684, OTP-18699,
+ OTP-18703, OTP-18709, OTP-18713, OTP-18714,
+ OTP-18715, OTP-18716, OTP-18717, OTP-18727,
+ OTP-18741, OTP-18742, OTP-18743, OTP-18744,
+ OTP-18750, OTP-18756, OTP-18761, OTP-18766,
+ OTP-18774, OTP-18778, OTP-18779, OTP-18781,
+ OTP-18783, OTP-18784, OTP-18785, OTP-18786,
+ OTP-18787, OTP-18788, OTP-18789, OTP-18793,
+ OTP-18794, OTP-18795, OTP-18796, OTP-18801,
+ OTP-18804, OTP-18805, OTP-18806, OTP-18807,
+ OTP-18808, OTP-18809, OTP-18813, OTP-18816,
+ OTP-18819, OTP-18820, OTP-18825, OTP-18831,
+ OTP-18834, OTP-18835, OTP-18846, OTP-18847,
+ OTP-18848, OTP-18849, OTP-18852, OTP-18856,
+ OTP-18859, OTP-18860, OTP-18865, OTP-18870,
+ OTP-18874, OTP-18875, OTP-18876, OTP-18878,
+ OTP-18879, OTP-18881, OTP-18884, OTP-18887,
+ OTP-18892, OTP-18894, OTP-18898, OTP-18904,
+ OTP-18908, OTP-18912, OTP-18913, OTP-18914,
+ OTP-18916, OTP-18918, OTP-18920, OTP-18922,
+ OTP-18923, OTP-18927, OTP-18928, OTP-18929,
+ OTP-18930, OTP-18934, OTP-18938, OTP-18941,
+ OTP-18942, OTP-18943, OTP-18944, OTP-18945,
+ OTP-18946, OTP-18947, OTP-18950, OTP-18951,
+ OTP-18954, OTP-18955, OTP-18959, OTP-18961,
+ OTP-18963, OTP-18965, OTP-18966, OTP-18967,
+ OTP-18968, OTP-18969, OTP-18972, OTP-18973,
+ OTP-18975, OTP-18976, OTP-18977, OTP-18978,
+ OTP-18980, OTP-18981, OTP-18984, OTP-18987,
+ OTP-18989, OTP-18992, OTP-18993, OTP-18994,
+ OTP-18995, OTP-18998, OTP-19001, OTP-19004,
+ OTP-19005, OTP-19010, OTP-19014, OTP-19016,
+ OTP-19017, OTP-19018, OTP-19020, OTP-19022,
+ OTP-19025, OTP-19026, OTP-19027, OTP-19029,
+ OTP-19030
+Seq num: BL-312, BL-322, ERIERL-43, ERIERL-964,
+ ERIERL-967, ERIERL-985, GH-4992, GH-6152,
+ GH-6692, GH-6979, GH-6985, GH-7183, GH-7232,
+ GH-7266, GH-7295, GH-7397, GH-7432, GH-7438,
+ GH-7493, GH-7494, GH-7706, GH-7718, GH-7972,
+ GH-8058, GH-8061, GH-8066, GH-8159, GH-8166,
+ OTP-16448, OTP-16608, OTP-16875, OTP-17734,
+ OTP-18746, OTP-18750, OTP-18835, PR-6510,
+ PR-6639, PR-6658, PR-6791, PR-6985, PR-7110,
+ PR-7125, PR-7174, PR-7202, PR-7220, PR-7236,
+ PR-7243, PR-7267, PR-7274, PR-7299, PR-7313,
+ PR-7316, PR-7348, PR-7380, PR-7383, PR-7388,
+ PR-7398, PR-7419, PR-7428, PR-7441, PR-7443,
+ PR-7447, PR-7451, PR-7465, PR-7470, PR-7474,
+ PR-7475, PR-7481, PR-7491, PR-7496, PR-7528,
+ PR-7534, PR-7535, PR-7538, PR-7556, PR-7585,
+ PR-7590, PR-7592, PR-7607, PR-7628, PR-7639,
+ PR-7649, PR-7651, PR-7675, PR-7684, PR-7697,
+ PR-7699, PR-7700, PR-7701, PR-7702, PR-7703,
+ PR-7711, PR-7720, PR-7726, PR-7728, PR-7732,
+ PR-7738, PR-7739, PR-7740, PR-7745, PR-7779,
+ PR-7781, PR-7782, PR-7790, PR-7809, PR-7816,
+ PR-7824, PR-7844, PR-7845, PR-7846, PR-7847,
+ PR-7856, PR-7857, PR-7869, PR-7879, PR-7891,
+ PR-7898, PR-7917, PR-7918, PR-7936, PR-7942,
+ PR-7952, PR-7957, PR-7960, PR-7963, PR-7973,
+ PR-7977, PR-7981, PR-7993, PR-8003, PR-8004,
+ PR-8006, PR-8026, PR-8035, PR-8042, PR-8048,
+ PR-8063, PR-8067, PR-8069, PR-8076, PR-8086,
+ PR-8090, PR-8091, PR-8092, PR-8093, PR-8095,
+ PR-8103, PR-8111, PR-8112, PR-8155, PR-8156,
+ PR-8164, PR-8168, PR-8177, PR-8182, PR-8205,
+ PR-8241
+System: OTP
+Release: 27
+Application: asn1-5.3, common_test-1.27, compiler-8.5,
+ crypto-5.5, debugger-5.4, dialyzer-5.2,
+ diameter-2.4, edoc-1.3, eldap-1.2.13,
+ erl_interface-5.5.2, erts-14.3, et-1.7.1,
+ eunit-2.9.1, ftp-1.2.2, inets-9.2,
+ jinterface-1.14.1, kernel-9.3, megaco-4.6,
+ mnesia-4.23.1, observer-2.16, odbc-2.14.3,
+ os_mon-2.10, parsetools-2.6, public_key-1.16,
+ reltool-1.0.1, runtime_tools-2.1, sasl-4.2.2,
+ snmp-5.16, ssh-5.2, ssl-11.2, stdlib-6.0,
+ syntax_tools-3.2, tftp-1.2, tools-4.0,
+ wx-2.4.2, xmerl-1.4
+Predecessor: OTP
+```
+
+Check out the git tag OTP-27.0, and build a full OTP system including
+documentation.
+
+# HIGHLIGHTS
+
+- The functions `is_equal/2`, `map/2`, and `filtermap/2` have been added to the
+ modules [`sets`], [`ordsets`], and [`gb_sets`].
+
+ Own Id: OTP-18622
+ Application(s): stdlib
+ Related Id(s): [GH-7183], [GH-7232]
+
+- The compiler now emits nicer error message for function head mismatches. For
+ example, given:
+
+ ```erlang
+ a() -> ok;
+ a(_) -> error.
+ ```
+
+ Erlang/OTP 26 and earlier would emit a diagnostic similar to:
+
+ ```text
+ t.erl:6:1: head mismatch
+ % 6| a(_) -> error.
+ % | ^
+ ```
+
+ while in Erlang/OTP 27 the diagnostic is similar to:
+
+ ```text
+ t.erl:6:1: head mismatch: function a with arities 0 and 1 is regarded as two distinct functions. Is the number of arguments incorrect or is the semicolon in a/0 unwanted?
+ % 6| a(_) -> error.
+ % | ^
+ ```
+
+ Own Id: OTP-18648
+ Application(s): compiler, stdlib
+ Related Id(s): [PR-7383]
+
+- The compiler will now merge consecutive updates of the same record.
+
+ As an example, the body of the following function will be combined into a
+ single tuple creation instruction:
+
+ ```erlang
+ -record(r, {a,b,c,d}).
+
+ update(Value) ->
+ R0 = #r{},
+ R1 = R0#r{a=Value},
+ R2 = R1#r{b=2},
+ R2#r{c=3}.
+ ```
+
+ Own Id: OTP-18680
+ Application(s): compiler
+ Related Id(s): ERIERL-967, [PR-7491], [PR-8086]
+
+- As announced in OTP 26.1, `0.0` is no longer considered equivalent to `-0.0`
+ when using the term equivalence operators (`=:=` and `=/=`).
+
+ The arithmetic equality operators (`==` and `/=`) and all relative comparison
+ operations still consider `0.0` equal to `-0.0`.
+
+ Own Id: OTP-18717
+ Application(s): otp
+ Related Id(s): [PR-7728]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- The `erl` command now supports the `-S` flag, which is similar to the `-run`
+ flag, except that it will pass all arguments up to end of the command line to
+ the called function. (The `-run` flag will not pass arguments beginning with a
+ hyphen.) Another difference is that `-S` will always call a function with one
+ argument, passing an empty list if no arguments were given.
+
+ Own Id: OTP-18744
+ Application(s): erts
+ Related Id(s): [PR-7470]
+
+- Triple-Quoted Strings has been implemented as per [EEP 64]. See String in the
+ Reference Manual.
+
+ Example:
+
+ ```erlang
+ 1> """
+ a
+ b
+ c
+ """.
+ "a\nb\nc"
+ ```
+
+ Adjacent string literals without intervening white space is now a syntax
+ error, to avoid possible confusion with triple-quoted strings. For example:
+
+ ```text
+ 1> "abc""xyz".
+ "xyz".
+ * 1:6: adjacent string literals without intervening white space
+ ```
+
+ Own Id: OTP-18750
+ Application(s): stdlib, tools
+ Related Id(s): [PR-7313], [PR-7451], OTP-18746
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- Several new functions that accept funs have been added to module [`timer`].
+
+ Functions `apply_after/2`, `apply_interval/2`, and `apply_repeatedly/2` accept
+ a nullary fun as the second argument, while functions `apply_after/3`,
+ `apply_interval/3`, and `apply_repeatedly/3` accept an n-ary fun as the second
+ and a list of n arguments for the fun as the third argument.
+
+ Own Id: OTP-18808
+ Application(s): stdlib
+ Related Id(s): [PR-7649]
+
+- Sigils on string literals have been implemented as per [EEP 66], that is:
+ binary and string sigils in verbatim and escape characters variants, as well
+ as a default (vanilla) Sigil. All for ordinary strings and for triple-quoted
+ strings (EEP 64). See Sigils in the Reference Manual.
+
+ Examples:
+
+ ```erlang
+ 1> ~"Björn".
+ <<"Björn"/utf8>>
+ 2> ~b"Björn".
+ <<"Björn"/utf8>>
+ 3> ~S"\s*(\w+)".
+ "\\s*(\\w+)"
+ 4> ~B"\s*(\w+)".
+ <<"\\s*(\\w+)">>
+ ```
+
+ Own Id: OTP-18825
+ Application(s): stdlib
+ Related Id(s): [PR-7684], OTP-18750
+
+- Native coverage support has been implemented in the JIT. It will automatically
+ be used by the [`cover`] tool to reduce the execution overhead when running
+ cover-compiled code.
+
+ There are also new APIs to support native coverage without using the `cover`
+ tool.
+
+ To instrument code for native coverage it must be compiled with the
+ [`line_coverage`] option.
+
+ To enable native coverage in the runtime system, start it like so:
+
+ ```text
+ $ erl +JPcover true
+ ```
+
+ There are also the following new functions for supporting native coverage:
+
+ - `code:coverage_support/0`
+ - `code:get_coverage/2`
+ - `code:reset_coverage/1`
+ - `code:get_coverage_mode/0`
+ - `code:get_coverage_mode/1`
+ - `code:set_coverage_mode/1`
+
+ Own Id: OTP-18856
+ Application(s): compiler, erts, kernel, tools
+ Related Id(s): [PR-7856]
+
+- [EEP-59 - Documentation Attributes] has been implemented.
+
+ Documentation attributes can be used to document functions, types, callbacks,
+ and modules. The keyword `-moduledoc "Documentation here".` is used to
+ document modules, while `-doc "Documentation here".` can be used on top of
+ functions, types, and callbacks to document them, respectively.
+
+ - Types, callbacks, and function documentation can be set to `hidden` either
+ via `-doc false` or `-doc hidden`. When documentation attributes mark a type
+ as hidden, they will not be part of the documentation.
+ - The documentation from `moduledoc` and `doc` gets added by default to the
+ binary beam file, following the format of [EEP-48].
+ - Using the compiler flag `warn_missing_doc` will raise a warning when `-doc`
+ attributes are missing in exported functions, types, and callbacks.
+ - Using the compiler flag `warn_missing_spec_documented` will raise a warning
+ when spec attributes are missing in documented functions, types, and
+ callbacks.
+ - `moduledoc`s and `doc`s may refer to external files to be embedded, such as
+ `-doc {file, "README.md"}.`, which refers to the file `README.md` found in
+ the current working directory.
+ - The compiler warns about exported functions whose specs refer to hidden
+ types. Thus, there will be warnings when a hidden type (meaning, the type is
+ not part of the documentation) gets used in an exported function.
+
+ Own Id: OTP-18916
+ Application(s): compiler, stdlib
+ Related Id(s): [PR-7936]
+
+- New [`ets`] functions `ets:first_lookup/1`, `ets:next_lookup/2`,
+ `ets:prev_lookup/2` and `ets:last_lookup/1`. Example: `ets:next_lookup/1` is
+ equivalent to `ets:next/2` followed by `ets:lookup/2` with the next key. The
+ new combined functions are more efficient and with guaranteed atomicity.
+
+ Own Id: OTP-18923
+ Application(s): stdlib
+ Related Id(s): [PR-6791]
+
+- The `maybe` expression is now enabled by default.
+
+ To use `maybe` as an atom, it needs to be single-quoted. Alternatively, the
+ `maybe` expression can be disabled by disabling the `maybe_expr` feature. That
+ can be done by placing the following the line at the beginning of an Erlang
+ source file:
+
+ ```erlang
+ -feature(maybe_expr, disable).
+ ```
+
+ Another way to disable the `maybe_expr` feature is by passing the
+ `-disable-feature` option to `erlc`:
+
+ ```text
+ erlc -disable-feature maybe_expr some_file.erl
+ ```
+
+ Own Id: OTP-18944
+ Application(s): otp, stdlib
+ Related Id(s): [PR-8067]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Application(s): asn1, common_test, compiler, crypto, debugger, dialyzer,
+ diameter, edoc, eldap, erl_interface, erts, et, eunit, ftp, inets, jinterface,
+ kernel, megaco, mnesia, observer, odbc, os_mon, parsetools, public_key,
+ reltool, runtime_tools, sasl, snmp, ssh, ssl, stdlib, syntax_tools, tftp,
+ tools, wx, xmerl
+ Related Id(s): [PR-8026]
+
+- Safe destructive update of tuples has been implemented in the compiler and
+ runtime system. This allows the VM to update tuples in-place when it is safe
+ to do so, thus improving performance by doing less copying but also by
+ producing less garbage.
+
+ Example:
+
+ ```erlang
+ -record(rec, {a,b,c}).
+
+ update(#rec{a=needs_update,b=N}=R0) ->
+ R = R0#rec{a=up_to_date},
+ if
+ N < 0 ->
+ R#rec{c=negative};
+ N == 0 ->
+ R#rec{c=zero};
+ N > 0 ->
+ R#rec{c=positive}
+ end.
+ ```
+
+ The record updates in each of the three clauses of the `if` can safely be done
+ in-place, because variable `R` is not used again.
+
+ Own Id: OTP-18972
+ Application(s): compiler, erts
+ Related Id(s): [PR-8090]
+
+- Multiple trace sessions.
+
+ Own Id: OTP-18980
+ Application(s): erts
+
+- The `jer` (JSON Encoding Rules) for ASN.1 now use the new [`json`] module for
+ encoding and decoding JSON. Thus, there is no longer any need for an external
+ JSON library.
+
+ Own Id: OTP-19018
+ Application(s): asn1
+ Related Id(s): [PR-8241]
+
+- There is a new module [`json`] for encoding and decoding [JSON].
+
+ Both encoding and decoding can be customized. Decoding can be done in a
+ SAX-like fashion and handle multiple documents and streams of data.
+
+ Own Id: OTP-19020
+ Application(s): stdlib
+ Related Id(s): [PR-8111]
+
+# POTENTIAL INCOMPATIBILITIES
+
+- The `pid` field has been removed from `erlang:fun_info/1,2`.
+
+ Own Id: OTP-18594
+ Application(s): erts
+ Related Id(s): [PR-7274]
+
+- By default, escripts will now be compiled instead of interpreted. That means
+ that the `compiler` application must be installed.
+
+ Own Id: OTP-18639
+ Application(s): erts
+ Related Id(s): [PR-7348]
+
+- Introduced a default value for httpd_server name configuration to improve ease
+ of use.
+
+ Own Id: OTP-18641
+ Application(s): inets
+ Related Id(s): [PR-7316]
+
+- As announced in OTP 26.1, `0.0` is no longer considered equivalent to `-0.0`
+ when using the term equivalence operators (`=:=` and `=/=`).
+
+ The arithmetic equality operators (`==` and `/=`) and all relative comparison
+ operations still consider `0.0` equal to `-0.0`.
+
+ Own Id: OTP-18717
+ Application(s): otp
+ Related Id(s): [PR-7728]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Triple-Quoted Strings has been implemented as per [EEP 64]. See String in the
+ Reference Manual.
+
+ Example:
+
+ ```erlang
+ 1> """
+ a
+ b
+ c
+ """.
+ "a\nb\nc"
+ ```
+
+ Adjacent string literals without intervening white space is now a syntax
+ error, to avoid possible confusion with triple-quoted strings. For example:
+
+ ```text
+ 1> "abc""xyz".
+ "xyz".
+ * 1:6: adjacent string literals without intervening white space
+ ```
+
+ Own Id: OTP-18750
+ Application(s): stdlib, tools
+ Related Id(s): [PR-7313], [PR-7451], OTP-18746
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The documentation for the preprocessor now mentions that `defined(Name)` can
+ be called in the condition for an `-if` or `-elif` directive to test whether
+ `Name` is the name of a defined macro. (This feature was implemented in OTP
+ 21.)
+
+ If a function call in an `-if` or `-elif` with a name that is not the name of
+ a guard BIF, there would not be a compilation error, but would instead cause
+ the lines following the directive to be skipped. This has now been changed to
+ be a compilation error.
+
+ Own Id: OTP-18784
+ Application(s): compiler, otp, stdlib
+ Related Id(s): [GH-7706], [PR-7726]
+
+- The existing experimental support for archive files will be changed in a
+ future release. The support for having an archive in an escript will remain,
+ but the support for using archives in a release will either become more
+ limited or completely removed.
+
+ As of Erlang/OTP 27, the function `code:lib_dir/2`, the `-code_path_choice`
+ flag, and using [`erl_prim_loader`] for reading members of an archive are
+ deprecated.
+
+ To remain compatible with future version of Erlang/OTP `escript` scripts that
+ need to retrieve data files from its archive should use `escript:extract/2`
+ instead of `erl_prim_loader` and `code:lib_dir/2`.
+
+ Own Id: OTP-18966
+ Application(s): kernel, otp
+ Related Id(s): [PR-8091]
+
+- The order in which the compiler looks up options has changed.
+
+ When there is a conflict in the compiler options given in the `-compile()`
+ attribute and options given to the compiler, the options given in the
+ `-compile()` attribute overrides the option given to the compiler, which in
+ turn overrides options given in the `ERL_COMPILER_OPTIONS` environment
+ variable.
+
+ Example:
+
+ If `some_module.erl` has the following attribute:
+
+ ```erlang
+ -compile([nowarn_missing_spec]).
+ ```
+
+ and the compiler is invoked like so:
+
+ ```text
+ % erlc +warn_missing_spec some_module.erl
+ ```
+
+ no warnings will be issued for functions that do not have any specs.
+
+ Own Id: OTP-18968
+ Application(s): compiler
+ Related Id(s): [GH-6979], [PR-8093]
+
+- The implementations of `http_uri:encode/1` and `http_uri:decode/1` are now
+ replaced with their equivalent, but bug free versions from module
+ [`uri_string`], namely `uri_string:quote/1` and `uri_string:unquote/1`.
+
+ Own Id: OTP-19022
+ Application(s): inets
+
+- For security reasons remove CBC ciphers form default supported cipher suites
+ in TLS-1.2
+
+ Own Id: OTP-19025
+ Application(s): ssl
+
+- Enhance simple_one_for_one error handling. Avoid crash of transient child
+ returning ignore for init-function. Also disallow automatic shutdown as it
+ does not make sense for this supervisor type, may potentially be backwards
+ incompatible for no intended uses, that is supervisors will not remain
+ bug-compatible.
+
+ Own Id: OTP-19029
+ Application(s): stdlib
+
+# OTP-27.0
+
+## Fixed Bugs and Malfunctions
+
+- As announced in OTP 26.1, `0.0` is no longer considered equivalent to `-0.0`
+ when using the term equivalence operators (`=:=` and `=/=`).
+
+ The arithmetic equality operators (`==` and `/=`) and all relative comparison
+ operations still consider `0.0` equal to `-0.0`.
+
+ Own Id: OTP-18717
+ Related Id(s): [PR-7728]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- The documentation for the preprocessor now mentions that `defined(Name)` can
+ be called in the condition for an `-if` or `-elif` directive to test whether
+ `Name` is the name of a defined macro. (This feature was implemented in OTP
+ 21.)
+
+ If a function call in an `-if` or `-elif` with a name that is not the name of
+ a guard BIF, there would not be a compilation error, but would instead cause
+ the lines following the directive to be skipped. This has now been changed to
+ be a compilation error.
+
+ Own Id: OTP-18784
+ Related Id(s): [GH-7706], [PR-7726]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+## Improvements and New Features
+
+- `configure` scripts of the OTP build system are now generated using Autoconf
+ 2.72.
+
+ Own Id: OTP-18943
+
+- The `maybe` expression is now enabled by default.
+
+ To use `maybe` as an atom, it needs to be single-quoted. Alternatively, the
+ `maybe` expression can be disabled by disabling the `maybe_expr` feature. That
+ can be done by placing the following the line at the beginning of an Erlang
+ source file:
+
+ ```erlang
+ -feature(maybe_expr, disable).
+ ```
+
+ Another way to disable the `maybe_expr` feature is by passing the
+ `-disable-feature` option to `erlc`:
+
+ ```text
+ erlc -disable-feature maybe_expr some_file.erl
+ ```
+
+ Own Id: OTP-18944
+ Related Id(s): [PR-8067]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- By default `configure` scripts used when building OTP will now try to enable
+ support for timestamps that will work after mid-January 2038. This has
+ typically only been an issue on 32-bit platforms.
+
+ If `configure` cannot figure out how to enable such timestamps, it will abort
+ with an error message. If you want to build the system anyway, knowing that
+ the system will not function properly after mid-January 2038, you can pass the
+ `--disable-year2038` option to `configure`, which will enable `configure` to
+ continue without support for timestamps after mid-January 2038.
+
+ Own Id: OTP-18965
+ Related Id(s): [PR-8095]
+
+- The existing experimental support for archive files will be changed in a
+ future release. The support for having an archive in an escript will remain,
+ but the support for using archives in a release will either become more
+ limited or completely removed.
+
+ As of Erlang/OTP 27, the function `code:lib_dir/2`, the `-code_path_choice`
+ flag, and using [`erl_prim_loader`] for reading members of an archive are
+ deprecated.
+
+ To remain compatible with future version of Erlang/OTP `escript` scripts that
+ need to retrieve data files from its archive should use `escript:extract/2`
+ instead of `erl_prim_loader` and `code:lib_dir/2`.
+
+ Own Id: OTP-18966
+ Related Id(s): [PR-8091]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- The restriction for the expression that gives a default value for a record
+ field is now documented.
+
+ Own Id: OTP-18995
+ Related Id(s): [GH-8166], [PR-8177]
+
+# asn1-5.3
+
+## Fixed Bugs and Malfunctions
+
+- Multiple bugs has been eliminated in the [specialized decode feature].
+
+ Own Id: OTP-18813
+ Related Id(s): [PR-7790]
+
+## Improvements and New Features
+
+- Specs have been added to all `asn1ct` API functions.
+
+ Own Id: OTP-18804
+ Related Id(s): [PR-7738]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The `jer` (JSON Encoding Rules) for ASN.1 now use the new [`json`] module for
+ encoding and decoding JSON. Thus, there is no longer any need for an external
+ JSON library.
+
+ Own Id: OTP-19018
+ Related Id(s): [PR-8241]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of asn1-5.3
+>
+> erts-14.0, kernel-9.0, stdlib-5.0
+
+# common_test-1.27
+
+## Improvements and New Features
+
+- Calls to `ct:capture_start/0` and `ct:capture_stop/0` are now synchronous to
+ ensure that all output is captured.
+
+ Own Id: OTP-18658
+ Related Id(s): [PR-7380]
+
+- The order in which multiple hooks are executed can now be reversed after each
+ config function. See [CTH Execution Order].
+
+ Own Id: OTP-18682
+ Related Id(s): ERIERL-43, [GH-7397], [PR-7496]
+
+- The default CSS will now include a basic dark mode handling if it is preferred
+ by the browser.
+
+ Own Id: OTP-18761
+ Related Id(s): [PR-7428]
+
+- `-callback` attributes have been added to [`ct_suite`] and [`ct_hooks`].
+
+ Own Id: OTP-18781
+ Related Id(s): [PR-7701]
+
+- The built-in [cth_log_redirect] hook can now be configured to replace default
+ logger reports in terminal with HTML logs.
+
+ Own Id: OTP-18875
+ Related Id(s): [PR-7891]
+
+- Error handling for the [`ct_property_test`] framework has been enhanced.
+
+ Own Id: OTP-18881
+ Related Id(s): [PR-7824]
+
+- Enhance test case documentation, making it clear how a test case can be
+ failed.
+
+ Own Id: OTP-18892
+ Related Id(s): [PR-7869]
+
+- The failing line in the test source code is now colored to make it easier to
+ find on the screen.
+
+ Own Id: OTP-18898
+ Related Id(s): [PR-7917]
+
+- Function specifications and types have been added to all public API functions.
+
+ Own Id: OTP-18913
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- With this change, suite execution elapsed time is included in index page.
+
+ Own Id: OTP-18981
+ Related Id(s): [GH-7972], [PR-8112]
+
+> #### Full runtime dependencies of common_test-1.27
+>
+> compiler-6.0, crypto-4.5, debugger-4.1, erts-7.0, ftp-1.0, inets-6.0,
+> kernel-8.4, observer-2.1, runtime_tools-1.8.16, sasl-2.5, snmp-5.1.2, ssh-4.0,
+> stdlib-4.0, syntax_tools-1.7, tools-3.2, xmerl-1.3.8
+
+# compiler-8.5
+
+## Fixed Bugs and Malfunctions
+
+- Generators for binary comprehensions could be evaluated before it was known
+ that they would be needed. That could result in a binary comprehensions
+ failing if a generator that should not be evaluated until later failed.
+
+ As an example, consider this module:
+
+ ```erlang
+ -module(t).
+ -export([f/0]).
+
+ f() ->
+ <<0 || _ <- [], _ <- ok, false>>.
+ ```
+
+ In Erlang/OTP 26 it would fail like so:
+
+ ```text
+ > t:f().
+ ** exception error: bad generator ok
+ in function t:f/0 (t.erl, line 6)
+ ```
+
+ In Erlang/OTP 27 it returns an empty binary:
+
+ ```text
+ > t:f().
+ <<>>
+ ```
+
+ Own Id: OTP-18703
+ Related Id(s): [GH-7494], [PR-7538]
+
+- The documentation for the preprocessor now mentions that `defined(Name)` can
+ be called in the condition for an `-if` or `-elif` directive to test whether
+ `Name` is the name of a defined macro. (This feature was implemented in OTP
+ 21.)
+
+ If a function call in an `-if` or `-elif` with a name that is not the name of
+ a guard BIF, there would not be a compilation error, but would instead cause
+ the lines following the directive to be skipped. This has now been changed to
+ be a compilation error.
+
+ Own Id: OTP-18784
+ Related Id(s): [GH-7706], [PR-7726]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+## Improvements and New Features
+
+- The compiler now emits nicer error message for function head mismatches. For
+ example, given:
+
+ ```erlang
+ a() -> ok;
+ a(_) -> error.
+ ```
+
+ Erlang/OTP 26 and earlier would emit a diagnostic similar to:
+
+ ```text
+ t.erl:6:1: head mismatch
+ % 6| a(_) -> error.
+ % | ^
+ ```
+
+ while in Erlang/OTP 27 the diagnostic is similar to:
+
+ ```text
+ t.erl:6:1: head mismatch: function a with arities 0 and 1 is regarded as two distinct functions. Is the number of arguments incorrect or is the semicolon in a/0 unwanted?
+ % 6| a(_) -> error.
+ % | ^
+ ```
+
+ Own Id: OTP-18648
+ Related Id(s): [PR-7383]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The compiler now optimizes creation of binaries that are known to be constant.
+
+ Consider this example:
+
+ ```erlang
+ bin() ->
+ C = char(),
+ <<C>>.
+
+ char() -> $*.
+ ```
+
+ Essentially, the compiler rewrites the example to the slightly more efficient:
+
+ ```erlang
+ bin() ->
+ _ = char(),
+ <<$*>>.
+
+ char() -> $*.
+ ```
+
+ Own Id: OTP-18673
+ Related Id(s): ERIERL-964, [PR-7474]
+
+- The compiler will now merge consecutive updates of the same record.
+
+ As an example, the body of the following function will be combined into a
+ single tuple creation instruction:
+
+ ```erlang
+ -record(r, {a,b,c,d}).
+
+ update(Value) ->
+ R0 = #r{},
+ R1 = R0#r{a=Value},
+ R2 = R1#r{b=2},
+ R2#r{c=3}.
+ ```
+
+ Own Id: OTP-18680
+ Related Id(s): ERIERL-967, [PR-7491], [PR-8086]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Improved the performance of the alias analysis pass.
+
+ Own Id: OTP-18714
+ Related Id(s): [GH-7432], [PR-7528]
+
+- `-spec` attributes are now used for documentation.
+
+ Own Id: OTP-18801
+ Related Id(s): [PR-7739]
+
+- Native coverage support has been implemented in the JIT. It will automatically
+ be used by the [`cover`] tool to reduce the execution overhead when running
+ cover-compiled code.
+
+ There are also new APIs to support native coverage without using the `cover`
+ tool.
+
+ To instrument code for native coverage it must be compiled with the
+ [`line_coverage`] option.
+
+ To enable native coverage in the runtime system, start it like so:
+
+ ```text
+ $ erl +JPcover true
+ ```
+
+ There are also the following new functions for supporting native coverage:
+
+ - `code:coverage_support/0`
+ - `code:get_coverage/2`
+ - `code:reset_coverage/1`
+ - `code:get_coverage_mode/0`
+ - `code:get_coverage_mode/1`
+ - `code:set_coverage_mode/1`
+
+ Own Id: OTP-18856
+ Related Id(s): [PR-7856]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- [EEP-59 - Documentation Attributes] has been implemented.
+
+ Documentation attributes can be used to document functions, types, callbacks,
+ and modules. The keyword `-moduledoc "Documentation here".` is used to
+ document modules, while `-doc "Documentation here".` can be used on top of
+ functions, types, and callbacks to document them, respectively.
+
+ - Types, callbacks, and function documentation can be set to `hidden` either
+ via `-doc false` or `-doc hidden`. When documentation attributes mark a type
+ as hidden, they will not be part of the documentation.
+ - The documentation from `moduledoc` and `doc` gets added by default to the
+ binary beam file, following the format of [EEP-48].
+ - Using the compiler flag `warn_missing_doc` will raise a warning when `-doc`
+ attributes are missing in exported functions, types, and callbacks.
+ - Using the compiler flag `warn_missing_spec_documented` will raise a warning
+ when spec attributes are missing in documented functions, types, and
+ callbacks.
+ - `moduledoc`s and `doc`s may refer to external files to be embedded, such as
+ `-doc {file, "README.md"}.`, which refers to the file `README.md` found in
+ the current working directory.
+ - The compiler warns about exported functions whose specs refer to hidden
+ types. Thus, there will be warnings when a hidden type (meaning, the type is
+ not part of the documentation) gets used in an exported function.
+
+ Own Id: OTP-18916
+ Related Id(s): [PR-7936]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The order in which the compiler looks up options has changed.
+
+ When there is a conflict in the compiler options given in the `-compile()`
+ attribute and options given to the compiler, the options given in the
+ `-compile()` attribute overrides the option given to the compiler, which in
+ turn overrides options given in the `ERL_COMPILER_OPTIONS` environment
+ variable.
+
+ Example:
+
+ If `some_module.erl` has the following attribute:
+
+ ```erlang
+ -compile([nowarn_missing_spec]).
+ ```
+
+ and the compiler is invoked like so:
+
+ ```text
+ % erlc +warn_missing_spec some_module.erl
+ ```
+
+ no warnings will be issued for functions that do not have any specs.
+
+ Own Id: OTP-18968
+ Related Id(s): [GH-6979], [PR-8093]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- Safe destructive update of tuples has been implemented in the compiler and
+ runtime system. This allows the VM to update tuples in-place when it is safe
+ to do so, thus improving performance by doing less copying but also by
+ producing less garbage.
+
+ Example:
+
+ ```erlang
+ -record(rec, {a,b,c}).
+
+ update(#rec{a=needs_update,b=N}=R0) ->
+ R = R0#rec{a=up_to_date},
+ if
+ N < 0 ->
+ R#rec{c=negative};
+ N == 0 ->
+ R#rec{c=zero};
+ N > 0 ->
+ R#rec{c=positive}
+ end.
+ ```
+
+ The record updates in each of the three clauses of the `if` can safely be done
+ in-place, because variable `R` is not used again.
+
+ Own Id: OTP-18972
+ Related Id(s): [PR-8090]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Improved the match context reuse optimization slightly, allowing match
+ contexts to be passed as-is to `bit_size/1` and `byte_size/1`.
+
+ Own Id: OTP-18987
+
+- `m:erl_lint` (and by extension the [`compiler`]) will now warn for code using
+ deprecated callbacks.
+
+ The only callback currenly deprecated is `format_status/2` in `gen_server`,
+ `gen_event` and `gen_statem`.
+
+ You can use `nowarn_deprecated_callback` to silence the warning.
+
+ Own Id: OTP-19010
+ Related Id(s): [PR-8205]
+
+> #### Full runtime dependencies of compiler-8.5
+>
+> crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0
+
+# crypto-5.5
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Removed functions `crypto_dyn_iv_init/3` and `crypto_dyn_iv_update/3` which
+ were marked as deprecated since OTP 25.
+
+ Own Id: OTP-18973
+
+- Add support for sm3 hash and hmac.
+
+ Own Id: OTP-18975
+ Related Id(s): [PR-6658]
+
+- `OPENSSL_thread_stop` is called when `crypto` is purged to not leak thread
+ specific data.
+
+ Own Id: OTP-18978
+ Related Id(s): [PR-7809]
+
+- Add SM4 block cipher implemented according to GB/T 32907-2016.
+
+ Own Id: OTP-19005
+ Related Id(s): [PR-8168]
+
+> #### Full runtime dependencies of crypto-5.5
+>
+> erts-9.0, kernel-5.3, stdlib-3.9
+
+# debugger-5.4
+
+## Fixed Bugs and Malfunctions
+
+- The dependencies for this application are now listed in the app file.
+
+ Own Id: OTP-18831
+ Related Id(s): [PR-7441]
+
+## Improvements and New Features
+
+- Type specs have been added to all API functions.
+
+ Own Id: OTP-18819
+ Related Id(s): [PR-7781]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of debugger-5.4
+>
+> compiler-8.0, erts-14.3, kernel-8.0, stdlib-3.15, wx-2.0
+
+# dialyzer-5.2
+
+## Improvements and New Features
+
+- The `--gui` option for Dialyzer has been removed.
+
+ Own Id: OTP-18667
+ Related Id(s): [PR-7443]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of dialyzer-5.2
+>
+> compiler-8.0, erts-12.0, kernel-8.0, stdlib-5.0, syntax_tools-2.0
+
+# diameter-2.4
+
+## Improvements and New Features
+
+- `-callback` attributes have been added to [`diameter_app`] and
+ [`diameter_transport`].
+
+ Own Id: OTP-18783
+ Related Id(s): [PR-7699]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of diameter-2.4
+>
+> erts-10.0, kernel-3.2, ssl-9.0, stdlib-5.0
+
+# edoc-1.3
+
+## Fixed Bugs and Malfunctions
+
+- [EEP 48] doc chunks now properly include links within `{@type }` macros.
+
+ Own Id: OTP-18945
+ Related Id(s): [PR-8063]
+
+- `@hidden` now means `hidden` in [EEP 48] doc chunks instead of `none`.
+
+ Own Id: OTP-18946
+ Related Id(s): [PR-8063]
+
+## Improvements and New Features
+
+- There is a new `edoc_html_to_markdown` module that can be used to convert
+ EEP-48 `application/html+erlang` to Markdown.
+
+ Own Id: OTP-18947
+ Related Id(s): [PR-8063]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of edoc-1.3
+>
+> erts-11.0, inets-5.10, kernel-7.0, stdlib-4.0, syntax_tools-2.0, xmerl-1.3.7
+
+# eldap-1.2.13
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of eldap-1.2.13
+>
+> asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-3.4
+
+# erl_interface-5.5.2
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+## Known Bugs and Problems
+
+- The `ei` API for decoding/encoding terms is not fully 64-bit compatible since
+ terms that have a representation on the external term format larger than 2 GB
+ cannot be handled.
+
+ Own Id: OTP-16607
+ Related Id(s): OTP-16608
+
+# erts-14.3
+
+## Fixed Bugs and Malfunctions
+
+- Bugs in how `erl -extra` interacts with passing flags via ERL\_\*FLAGS or
+ `-args_file` have been fixed.
+
+ Own Id: OTP-18766
+ Related Id(s): [PR-7639]
+
+- Fixed a bug that prevented the emulator from building on recent versions of
+ Yocto Linux.
+
+ Own Id: OTP-18918
+ Related Id(s): [PR-7952]
+
+- Fix spectre mitigation configure test to work with GCC patches to always add
+ `-fcf-protection=full`.
+
+ Own Id: OTP-18928
+ Related Id(s): [PR-8006]
+
+- Fix faulty reduction counting in exiting process which could cause it to do
+ unnecessary yielding.
+
+ Own Id: OTP-19014
+
+## Improvements and New Features
+
+- Refactored how the JIT handles POSIX signals and how they affect thread
+ stacks, allowing us to use the native stack register for Erlang stacks on more
+ platforms.
+
+ Notably, containers built on 64-bit x86 Alpine Linux images will now perform
+ much better in sequential code. As an example, running `dialyzer` over the OTP
+ code base finishes about 15% quicker.
+
+ Own Id: OTP-18568
+ Related Id(s): [PR-7174]
+
+- The [`instrument`] module can now track allocations on a per-process or
+ per-port basis.
+
+ Own Id: OTP-18577
+ Related Id(s): [PR-7236]
+
+- The `pid` field has been removed from `erlang:fun_info/1,2`.
+
+ Own Id: OTP-18594
+ Related Id(s): [PR-7274]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- By default, escripts will now be compiled instead of interpreted. That means
+ that the `compiler` application must be installed.
+
+ Own Id: OTP-18639
+ Related Id(s): [PR-7348]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- A binary returned from the [`socket`] receive functions is no longer created
+ as a sub binary of an often large receive buffer binary (socket option
+ `{otp,rcvbuf}`). This avoids space waste, trusting the allocators to implement
+ reallocation efficiently.
+
+ Own Id: OTP-18642
+ Related Id(s): [GH-6152], [PR-7465]
+
+- The default process limit has been raised to `1048576` processes.
+
+ Own Id: OTP-18699
+ Related Id(s): [PR-7388]
+
+- The `erlang:system_monitor/2` functionality is now able to monitor long
+ message queues in the system.
+
+ Own Id: OTP-18709
+ Related Id(s): [PR-7651]
+
+- The `erl` command now supports the `-S` flag, which is similar to the `-run`
+ flag, except that it will pass all arguments up to end of the command line to
+ the called function. (The `-run` flag will not pass arguments beginning with a
+ hyphen.) Another difference is that `-S` will always call a function with one
+ argument, passing an empty list if no arguments were given.
+
+ Own Id: OTP-18744
+ Related Id(s): [PR-7470]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- When implementing an alternative carrier for the Erlang distribution, a
+ separate input handler process may now be registered, using
+ `erlang:dist_ctrl_input_handler/2`, also in the case when the distribution
+ controller is a port.
+
+ Own Id: OTP-18774
+ Related Id(s): [PR-7110]
+
+- The call stack trace has now been added to the error reported by
+ `erlang:process_flag/2` when `max_heap_size` limit has been exceeded.
+
+ Own Id: OTP-18779
+ Related Id(s): [PR-7592]
+
+- `-callback` attributes have been added to [`erl_tracer`].
+
+ Own Id: OTP-18794
+ Related Id(s): [PR-7703]
+
+- For `inet_backend = socket`, setting the `active` socket option alone, to
+ `once`, `true` or `N`, has been optimized, as well as the corresponding data
+ delivery.
+
+ Own Id: OTP-18835
+
+- Socket options that take string now also accept binaries.
+
+ Own Id: OTP-18849
+ Related Id(s): [PR-6510]
+
+- Native coverage support has been implemented in the JIT. It will automatically
+ be used by the [`cover`] tool to reduce the execution overhead when running
+ cover-compiled code.
+
+ There are also new APIs to support native coverage without using the `cover`
+ tool.
+
+ To instrument code for native coverage it must be compiled with the
+ [`line_coverage`] option.
+
+ To enable native coverage in the runtime system, start it like so:
+
+ ```text
+ $ erl +JPcover true
+ ```
+
+ There are also the following new functions for supporting native coverage:
+
+ - `code:coverage_support/0`
+ - `code:get_coverage/2`
+ - `code:reset_coverage/1`
+ - `code:get_coverage_mode/0`
+ - `code:get_coverage_mode/1`
+ - `code:set_coverage_mode/1`
+
+ Own Id: OTP-18856
+ Related Id(s): [PR-7856]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Changed the default value of the command line flag `-code_path_choice Choice`
+ to `strict`.
+
+ Own Id: OTP-18894
+ Related Id(s): [PR-7243]
+
+- Added module loading to `erl -init_debug` printouts.
+
+ Own Id: OTP-18929
+ Related Id(s): [PR-8004]
+
+- When the runtime system halts, it performs various flush operations before
+ terminating. By default there is no limit on how much time the flush
+ operations are allowed to take. A new _halt flush timeout_ functionality has
+ been introduced which can be used for limiting the amount of time that the
+ flushing operations are allowed to take. For more information see the
+ documentation of the [`flush_timeout`] option of the `erlang:halt/2` BIF and
+ the documentation of the `erl` [`+zhft <Timeout>`] command line flag.
+
+ Own Id: OTP-18938
+ Related Id(s): [GH-7438], [PR-8035]
+
+- Optimized code loading by moving certain operations from the code server to
+ the caller.
+
+ Own Id: OTP-18941
+ Related Id(s): [PR-7981]
+
+- Updated asmjit to version a465fe71ab3d0e224b2b4bd0fac69ae68ab9239d
+
+ Own Id: OTP-18942
+
+- The deprecated functions in [`zlib`] have been removed. That includes
+ `inflateChunk/{1,2}`, `getBufSize/1`, `setBufSize/2`, the CRC32 functions, and
+ the Adler checksum functions.
+
+ Own Id: OTP-18950
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Safe destructive update of tuples has been implemented in the compiler and
+ runtime system. This allows the VM to update tuples in-place when it is safe
+ to do so, thus improving performance by doing less copying but also by
+ producing less garbage.
+
+ Example:
+
+ ```erlang
+ -record(rec, {a,b,c}).
+
+ update(#rec{a=needs_update,b=N}=R0) ->
+ R = R0#rec{a=up_to_date},
+ if
+ N < 0 ->
+ R#rec{c=negative};
+ N == 0 ->
+ R#rec{c=zero};
+ N > 0 ->
+ R#rec{c=positive}
+ end.
+ ```
+
+ The record updates in each of the three clauses of the `if` can safely be done
+ in-place, because variable `R` is not used again.
+
+ Own Id: OTP-18972
+ Related Id(s): [PR-8090]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The obsolete and undocumented support for opening a port to an external
+ resource by passing an atom (or a string) as first argument to `open_port()`,
+ implemented by the vanilla driver, has been removed. This feature has been
+ scheduled for removal in OTP 27 since the release of OTP 26.
+
+ Own Id: OTP-18976
+ Related Id(s): [PR-7125]
+
+- An optional NIF callback `ERL_NIF_OPT_ON_UNLOAD_THREAD` to be called by all
+ scheduler threads when a NIF library is unloaded. Used for releasing thread
+ specific data. Can be set with function `enif_set_option`.
+
+ Own Id: OTP-18977
+ Related Id(s): [PR-7809]
+
+- Multiple trace sessions.
+
+ Own Id: OTP-18980
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Added the `+MMlp on|off` emulator option to let the `mseg` allocator use
+ "large pages" (sometimes known as "huge pages" or "super pages"). This
+ currently only affects super-carrier allocations, but may be extended in the
+ future.
+
+ Own Id: OTP-18984
+ Related Id(s): [PR-7977]
+
+- `inet_backend = socket` has been optimized and reworked to be more compatible
+ with the original `inet_backend = inet`.
+
+ Own Id: OTP-19004
+ Related Id(s): OTP-18835
+
+> #### Full runtime dependencies of erts-14.3
+>
+> kernel-9.0, sasl-3.3, stdlib-4.1
+
+# et-1.7.1
+
+## Fixed Bugs and Malfunctions
+
+- The dependencies for this application are now listed in the app file.
+
+ Own Id: OTP-18831
+ Related Id(s): [PR-7441]
+
+- Dialyzer warnings due to type specs added in [`dbg`] have been eliminated.
+
+ Own Id: OTP-18860
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of et-1.7.1
+>
+> erts-9.0, kernel-5.3, runtime_tools-1.10, stdlib-3.4, wx-1.2
+
+# eunit-2.9.1
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of eunit-2.9.1
+>
+> erts-9.0, kernel-5.3, stdlib-3.4
+
+# ftp-1.2.2
+
+## Fixed Bugs and Malfunctions
+
+- Dialyzer warnings due to type specs added in [`dbg`] have been eliminated.
+
+ Own Id: OTP-18860
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of ftp-1.2.2
+>
+> erts-7.0, kernel-6.0, runtime_tools-1.15.1, ssl-10.2, stdlib-3.5
+
+# inets-9.2
+
+## Improvements and New Features
+
+- Introduced a default value for httpd_server name configuration to improve ease
+ of use.
+
+ Own Id: OTP-18641
+ Related Id(s): [PR-7316]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- The `httpd` module has been extended with an API for simple serving directory
+ content over HTTP. With this change, the current working directory can be
+ served like this:
+
+ ```
+ erl -S httpd
+ ```
+
+ An arbitrary directory can be served like this:
+
+ ```
+ erl -S httpd serve path/to/dir
+ ```
+
+ Own Id: OTP-18727
+ Related Id(s): [PR-7299]
+
+- Add `-callback` attributes to [`httpd`], [`mod_esi`] and [`mod_security`].
+
+ Own Id: OTP-18786
+ Related Id(s): [PR-7700]
+
+- Use a relative redirect with an absolute path to prevent whoever is running
+ inets from having to configure the ServerName to match the network-reachable
+ hostname of the server.
+
+ Own Id: OTP-18809
+
+- `inets` processes now use `proc_lib:set_label/1` to improve observeability.
+
+ Own Id: OTP-18927
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The implementations of `http_uri:encode/1` and `http_uri:decode/1` are now
+ replaced with their equivalent, but bug free versions from module
+ [`uri_string`], namely `uri_string:quote/1` and `uri_string:unquote/1`.
+
+ Own Id: OTP-19022
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+> #### Full runtime dependencies of inets-9.2
+>
+> erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14,
+> ssl-9.0, stdlib-5.0, stdlib-6.0
+
+# jinterface-1.14.1
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+# kernel-9.3
+
+## Fixed Bugs and Malfunctions
+
+- Fixed a crash when calling `file:delete/2` with an empty option list.
+
+ Own Id: OTP-18590
+ Related Id(s): [PR-7220]
+
+- New functions have been added to the undocumented module [`inet_dns`] that
+ take a flag to specify if encode/decode is for mDNS. This affects how CLASS
+ values in the private range, with the top bit set, are handled.
+
+ Own Id: OTP-18878
+ Related Id(s): [GH-7718], OTP-17734
+
+- The error information for `erlang:phash/2` has been corrected.
+
+ Own Id: OTP-18904
+ Related Id(s): [PR-7960]
+
+- `get_until` requests using the I/O protocol now correctly return a binary or
+ list when `eof` is the last item returned by the callback.
+
+ Own Id: OTP-18930
+ Related Id(s): [GH-4992], [PR-7993]
+
+- Calling `logger:add_handlers/1` with config option now works.
+
+ Own Id: OTP-18954
+ Related Id(s): [GH-8061], [PR-8076]
+
+- The `code:del_path/1` function now also works on paths added through `-pa`,
+ `-pz` , `-path` and the boot script.
+
+ Own Id: OTP-18959
+ Related Id(s): [GH-6692], [PR-7697]
+
+## Improvements and New Features
+
+- Added `file:read_file/2` with a `raw` option for reading files without going
+ through the file server.
+
+ Own Id: OTP-18589
+ Related Id(s): [PR-7220]
+
+- The undocumented Erlang DNS resolver library (`inet_dns` and `inet_res`) has
+ been augmented to handle IXFR, NOTIFY, UPDATE and TSIG records. With this some
+ bug fixes and code cleanup has been done, and the resolver used in the test
+ suite has been changed to Knot DNS. See the source code.
+
+ Kudos to Alexander Clouter that did almost all the work!
+
+ Own Id: OTP-18713
+ Related Id(s): [GH-6985], [PR-6985]
+
+- The `ebin` directories for escripts are now cached.
+
+ Own Id: OTP-18778
+ Related Id(s): [PR-7556]
+
+- `-callback` attributes haven been added to [`application`],
+ [`logger_handler`], and [`logger_formatter`].
+
+ Own Id: OTP-18795
+ Related Id(s): [PR-7703]
+
+- Progress reports from before logger is started are now logged when log level
+ is set to debug.
+
+ Own Id: OTP-18807
+ Related Id(s): ERIERL-985, [PR-7732]
+
+- The `code:where_is_file/2` and `code:which/1` functions now check for
+ existence of the file directly instead of listing the content of each
+ directory in the code path.
+
+ Own Id: OTP-18816
+ Related Id(s): [PR-7711]
+
+- Type specs has been added to the [`logger:Level/1,2,3`] functions.
+
+ Own Id: OTP-18820
+ Related Id(s): [PR-7779]
+
+- For `inet_backend = socket`, setting the `active` socket option alone, to
+ `once`, `true` or `N`, has been optimized, as well as the corresponding data
+ delivery.
+
+ Own Id: OTP-18835
+
+- The shell now pages long output from the help command (`h(Module)`), auto
+ completions and the search command.
+
+ Own Id: OTP-18846
+ Related Id(s): [PR-7845]
+
+- Native coverage support has been implemented in the JIT. It will automatically
+ be used by the [`cover`] tool to reduce the execution overhead when running
+ cover-compiled code.
+
+ There are also new APIs to support native coverage without using the `cover`
+ tool.
+
+ To instrument code for native coverage it must be compiled with the
+ [`line_coverage`] option.
+
+ To enable native coverage in the runtime system, start it like so:
+
+ ```text
+ $ erl +JPcover true
+ ```
+
+ There are also the following new functions for supporting native coverage:
+
+ - `code:coverage_support/0`
+ - `code:get_coverage/2`
+ - `code:reset_coverage/1`
+ - `code:get_coverage_mode/0`
+ - `code:get_coverage_mode/1`
+ - `code:set_coverage_mode/1`
+
+ Own Id: OTP-18856
+ Related Id(s): [PR-7856]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Optimized code loading by moving certain operations from the code server to
+ the caller.
+
+ Own Id: OTP-18941
+ Related Id(s): [PR-7981]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Application startup has been optimized by removing an intermediary process.
+
+ Own Id: OTP-18963
+ Related Id(s): [PR-8042]
+
+- The existing experimental support for archive files will be changed in a
+ future release. The support for having an archive in an escript will remain,
+ but the support for using archives in a release will either become more
+ limited or completely removed.
+
+ As of Erlang/OTP 27, the function `code:lib_dir/2`, the `-code_path_choice`
+ flag, and using [`erl_prim_loader`] for reading members of an archive are
+ deprecated.
+
+ To remain compatible with future version of Erlang/OTP `escript` scripts that
+ need to retrieve data files from its archive should use `escript:extract/2`
+ instead of `erl_prim_loader` and `code:lib_dir/2`.
+
+ Own Id: OTP-18966
+ Related Id(s): [PR-8091]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- The undocumented and deprecated `file:pid2name` function has been removed.
+
+ Own Id: OTP-18967
+ Related Id(s): [PR-8092]
+
+- Improve error logging when the standard_io reader and/or writer terminate with
+ an error.
+
+ Own Id: OTP-18989
+ Related Id(s): [PR-8103]
+
+- `inet_backend = socket` has been optimized and reworked to be more compatible
+ with the original `inet_backend = inet`.
+
+ Own Id: OTP-19004
+ Related Id(s): OTP-18835
+
+> #### Full runtime dependencies of kernel-9.3
+>
+> crypto-5.0, erts-14.3, sasl-3.0, stdlib-6.0
+
+# megaco-4.6
+
+## Improvements and New Features
+
+- `-callback` attributes have been added to [`megaco_transport`].
+
+ Own Id: OTP-18806
+ Related Id(s): [PR-7740]
+
+- Updated types and specs for all API modules.
+
+ Own Id: OTP-18920
+ Related Id(s): BL-322
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of megaco-4.6
+>
+> asn1-3.0, debugger-4.0, erts-12.0, et-1.5, kernel-8.0, runtime_tools-1.8.14,
+> stdlib-2.5
+
+# mnesia-4.23.1
+
+## Fixed Bugs and Malfunctions
+
+- The `mnesia_registry` module have been deprecated.
+
+ Own Id: OTP-18994
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of mnesia-4.23.1
+>
+> erts-9.0, kernel-5.3, stdlib-5.0
+
+# observer-2.16
+
+## Fixed Bugs and Malfunctions
+
+- The dependencies for this application are now listed in the app file.
+
+ Own Id: OTP-18831
+ Related Id(s): [PR-7441]
+
+## Improvements and New Features
+
+- The new function `proc_lib:set_label/1` can be used to add a descriptive term
+ to any process that does not have a registered name. The name will be shown by
+ tools such as `\c:i/0`, [`observer`], and it will be included in crash reports
+ produced by processes using [`gen_server`], [`gen_statem`], [`gen_event`], and
+ [`gen_fsm`].
+
+ The label for a process can be retrieved by calling `proc_lib:get_label/1`.
+
+ Note that those functions work on any process, not only processes that use
+ [`proc_lib`].
+
+ Example:
+
+ ```text
+ 1> self().
+ <0.90.0>
+ 2> proc_lib:set_label(my_label).
+ ok
+ 3> i().
+ .
+ .
+ .
+ <0.90.0> erlang:apply/2 2586 75011 0
+ my_label c:pinfo/2 51
+ 4> proc_lib:get_label(self()).
+ my_label
+ ```
+
+ Own Id: OTP-18789
+ Related Id(s): [PR-7720], [PR-8003]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of observer-2.16
+>
+> erts-14.0, et-1.5, kernel-9.0, runtime_tools-1.19, stdlib-5.0, wx-2.3
+
+# odbc-2.14.3
+
+## Fixed Bugs and Malfunctions
+
+- Change liborder in makefile to avoid finding system libei instead of erlang
+ libei.
+
+ Own Id: OTP-19030
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of odbc-2.14.3
+>
+> erts-6.0, kernel-3.0, stdlib-2.0
+
+# os_mon-2.10
+
+## Improvements and New Features
+
+- Function specifications and types have been added to all public API functions.
+
+ Own Id: OTP-18913
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of os_mon-2.10
+>
+> erts-14.0, kernel-9.0, sasl-4.2.1, stdlib-5.0
+
+# parsetools-2.6
+
+## Improvements and New Features
+
+- The `leex` documentation has been updated to use specs for documenting the
+ generated interface.
+
+ Own Id: OTP-18796
+ Related Id(s): [PR-7703]
+
+- yecc now wraps the `-module` attribute with `-file` to indicate the `.yrl`
+ source file.
+
+ Own Id: OTP-18912
+ Related Id(s): [PR-7963]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of parsetools-2.6
+>
+> erts-6.0, kernel-3.0, stdlib-3.4
+
+# public_key-1.16
+
+## Improvements and New Features
+
+- The `ssl` client can negotiate and handle certificate status request (OCSP
+ stapling support on the client side).
+
+ Own Id: OTP-18606
+ Related Id(s): OTP-16448, OTP-16875
+
+- Improved exception reason when `public_key:cacerts_get/0` failed.
+
+ Own Id: OTP-18609
+ Related Id(s): [GH-7295], [PR-7202]
+
+- Key customization support has been extended to allow flexibility for
+ implementers of for instance hardware security modules (HSM) or trusted
+ platform modules (TPM).
+
+ Own Id: OTP-18876
+ Related Id(s): [PR-7475], [PR-7898]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of public_key-1.16
+>
+> asn1-3.0, crypto-4.6, erts-6.0, kernel-3.0, stdlib-3.5
+
+# reltool-1.0.1
+
+## Fixed Bugs and Malfunctions
+
+- The dependencies for this application are now listed in the app file.
+
+ Own Id: OTP-18831
+ Related Id(s): [PR-7441]
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of reltool-1.0.1
+>
+> erts-14.3, kernel-9.0, sasl-4.2.1, stdlib-5.0, tools-2.6.14, wx-2.3
+
+# runtime_tools-2.1
+
+## Improvements and New Features
+
+- The [`instrument`] module can now track allocations on a per-process or
+ per-port basis.
+
+ Own Id: OTP-18577
+ Related Id(s): [PR-7236]
+
+- The new function `proc_lib:set_label/1` can be used to add a descriptive term
+ to any process that does not have a registered name. The name will be shown by
+ tools such as `\c:i/0`, [`observer`], and it will be included in crash reports
+ produced by processes using [`gen_server`], [`gen_statem`], [`gen_event`], and
+ [`gen_fsm`].
+
+ The label for a process can be retrieved by calling `proc_lib:get_label/1`.
+
+ Note that those functions work on any process, not only processes that use
+ [`proc_lib`].
+
+ Example:
+
+ ```text
+ 1> self().
+ <0.90.0>
+ 2> proc_lib:set_label(my_label).
+ ok
+ 3> i().
+ .
+ .
+ .
+ <0.90.0> erlang:apply/2 2586 75011 0
+ my_label c:pinfo/2 51
+ 4> proc_lib:get_label(self()).
+ my_label
+ ```
+
+ Own Id: OTP-18789
+ Related Id(s): [PR-7720], [PR-8003]
+
+- Type specs had been added to all [`dbg`] functions.
+
+ Own Id: OTP-18859
+ Related Id(s): [PR-7782]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of runtime_tools-2.1
+>
+> erts-14.2, kernel-8.1, mnesia-4.12, stdlib-6.0
+
+# sasl-4.2.2
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of sasl-4.2.2
+>
+> erts-14.3, kernel-6.0, stdlib-4.0, tools-2.6.14
+
+# snmp-5.16
+
+## Improvements and New Features
+
+- `-callback` attributes have been added to modules
+ [`snmpa_network_interface_filter`], [`snmpa_notification_filter`],
+ [`snmpm_network_interface_filter`], [`snmpm_user`], and
+ [`snmpa_notification_delivery_info_receiver`].
+
+ New `-type` attributes have also been added to modules [`snmp`], [`snmpa`],
+ [`snmpm`], and [`snmpa_conf`] to support the previously mentioned callbacks.
+
+ Own Id: OTP-18785
+ Related Id(s): [PR-7702]
+
+- Updated types and specs for all API modules.
+
+ Own Id: OTP-18934
+ Related Id(s): BL-312
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of snmp-5.16
+>
+> crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12, runtime_tools-1.8.14,
+> stdlib-5.0
+
+# ssh-5.2
+
+## Fixed Bugs and Malfunctions
+
+- With this change, ssh processes are assigned labels for troubleshooting
+ purposes.
+
+ Own Id: OTP-19017
+
+## Improvements and New Features
+
+- The shell now pages long output from the help command (`h(Module)`), auto
+ completions and the search command.
+
+ Own Id: OTP-18846
+ Related Id(s): [PR-7845]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Updated types and specs for all API modules.
+
+ Own Id: OTP-18961
+
+> #### Full runtime dependencies of ssh-5.2
+>
+> crypto-5.0, erts-14.0, kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1,
+> stdlib-5.0, stdlib-6.0
+
+# ssl-11.2
+
+## Fixed Bugs and Malfunctions
+
+- Starting a TLS server without sufficient credentials (certificate or anonymous
+ cipher) would work, but it was impossible to connect to it.
+
+ This has been corrected to return an error instead of starting the server.
+
+ Own Id: OTP-18887
+ Related Id(s): [GH-7493], [PR-7918]
+
+- Handle ASN.1 decode errors in more places, to improve user error handling.
+
+ Own Id: OTP-18969
+ Related Id(s): [GH-8058]
+
+- Improved error checking on the API functions.
+
+ Own Id: OTP-18992
+ Related Id(s): [GH-8066], [PR-8156]
+
+## Improvements and New Features
+
+- The `ssl` client can negotiate and handle certificate status request (OCSP
+ stapling support on the client side).
+
+ Own Id: OTP-18606
+ Related Id(s): OTP-16448, OTP-16875
+
+- Memory consumption has been reduced and performance increased by refactoring
+ internal data structures and their usage.
+
+ Own Id: OTP-18665
+ Related Id(s): [PR-7447]
+
+- Added `ssl_crl_cache_api:lookup/2` as an optional `-callback` attribute.
+
+ Own Id: OTP-18788
+ Related Id(s): [PR-7700]
+
+- Key customization support has been extended to allow flexibility for
+ implementers of for instance hardware security modules (HSM) or trusted
+ platform modules (TPM).
+
+ Own Id: OTP-18876
+ Related Id(s): [PR-7475], [PR-7898]
+
+- The `proc_lib:set_label/1` function is now used to increase observability of
+ `ssl` processes.
+
+ Own Id: OTP-18879
+
+- Add support for brainpool elliptic curves in TLS-1.3.
+
+ Own Id: OTP-18884
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Make ssl:key_exporter_materials/4 a documented and supported API function.
+
+ Own Id: OTP-19016
+
+- For security reasons remove CBC ciphers form default supported cipher suites
+ in TLS-1.2
+
+ Own Id: OTP-19025
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- Add cert_policy_opts option to configure certificate policy options for the
+ certificate path validation.
+
+ Own Id: OTP-19027
+
+> #### Full runtime dependencies of ssl-11.2
+>
+> crypto-5.0, erts-14.3, inets-5.10.7, kernel-9.0, public_key-1.15,
+> runtime_tools-1.15.1, stdlib-6.0
+
+# stdlib-6.0
+
+## Fixed Bugs and Malfunctions
+
+- The specs in module [`binary`] has been updated to reflect what is allowed by
+ the documentation.
+
+ Own Id: OTP-18684
+ Related Id(s): [PR-7481]
+
+- Several functions in the [`binary`] module would accept arguments of the wrong
+ type under certain circumstances. In this release, they now raise an exception
+ when incorrect types are given.
+
+ The following functions would accept an invalid pattern if the subject binary
+ was empty or if the `{scope,{0,0}}` option was given: `binary:match/2,3`,
+ `binary:matches/2,3`, `binary:replace/3,4`, and `binary:split/2,3`
+
+ The call `binary:copy(<<1:1>>, 0)` would return an empty binary instead of
+ raising an exception. Similarly, calls to `binary:part/2,3` attempting to
+ extract 0 bytes at position 0 of a bitstring would return an empty binary
+ instead of raising an exception.
+
+ Own Id: OTP-18743
+ Related Id(s): [PR-7607], [PR-7628]
+
+- The documentation for the preprocessor now mentions that `defined(Name)` can
+ be called in the condition for an `-if` or `-elif` directive to test whether
+ `Name` is the name of a defined macro. (This feature was implemented in OTP
+ 21.)
+
+ If a function call in an `-if` or `-elif` with a name that is not the name of
+ a guard BIF, there would not be a compilation error, but would instead cause
+ the lines following the directive to be skipped. This has now been changed to
+ be a compilation error.
+
+ Own Id: OTP-18784
+ Related Id(s): [GH-7706], [PR-7726]
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- `get_until` requests using the I/O protocol now correctly return a binary or
+ list when `eof` is the last item returned by the callback.
+
+ Own Id: OTP-18930
+ Related Id(s): [GH-4992], [PR-7993]
+
+- Enhance simple_one_for_one error handling. Avoid crash of transient child
+ returning ignore for init-function. Also disallow automatic shutdown as it
+ does not make sense for this supervisor type, may potentially be backwards
+ incompatible for no intended uses, that is supervisors will not remain
+ bug-compatible.
+
+ Own Id: OTP-19029
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+## Improvements and New Features
+
+- The functions `is_equal/2`, `map/2`, and `filtermap/2` have been added to the
+ modules [`sets`], [`ordsets`], and [`gb_sets`].
+
+ Own Id: OTP-18622
+ Related Id(s): [GH-7183], [GH-7232]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The compiler now emits nicer error message for function head mismatches. For
+ example, given:
+
+ ```erlang
+ a() -> ok;
+ a(_) -> error.
+ ```
+
+ Erlang/OTP 26 and earlier would emit a diagnostic similar to:
+
+ ```text
+ t.erl:6:1: head mismatch
+ % 6| a(_) -> error.
+ % | ^
+ ```
+
+ while in Erlang/OTP 27 the diagnostic is similar to:
+
+ ```text
+ t.erl:6:1: head mismatch: function a with arities 0 and 1 is regarded as two distinct functions. Is the number of arguments incorrect or is the semicolon in a/0 unwanted?
+ % 6| a(_) -> error.
+ % | ^
+ ```
+
+ Own Id: OTP-18648
+ Related Id(s): [PR-7383]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- `zip:create/2,3` will now tolerate POSIX timestamps in the provided
+ `file_info` records.
+
+ Own Id: OTP-18668
+
+- The callback function `gen_statem:handle_event/4` has been cached in the
+ `gen_statem` engine to optimize callback call speed.
+
+ Own Id: OTP-18671
+ Related Id(s): [PR-7419]
+
+- The type `beam_lib:beam/0` is now exported.
+
+ Own Id: OTP-18716
+ Related Id(s): [PR-7534]
+
+- The documentation for the [`binary`] module has been improved.
+
+ Own Id: OTP-18741
+ Related Id(s): [PR-7585]
+
+- `binary:replace/3,4` now supports using a fun for supplying the replacement
+ binary.
+
+ Own Id: OTP-18742
+ Related Id(s): [PR-7590]
+
+- Triple-Quoted Strings has been implemented as per [EEP 64]. See String in the
+ Reference Manual.
+
+ Example:
+
+ ```erlang
+ 1> """
+ a
+ b
+ c
+ """.
+ "a\nb\nc"
+ ```
+
+ Adjacent string literals without intervening white space is now a syntax
+ error, to avoid possible confusion with triple-quoted strings. For example:
+
+ ```text
+ 1> "abc""xyz".
+ "xyz".
+ * 1:6: adjacent string literals without intervening white space
+ ```
+
+ Own Id: OTP-18750
+ Related Id(s): [PR-7313], [PR-7451], OTP-18746
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- The new function `proc_lib:set_label/1` can be used to add a descriptive term
+ to any process that does not have a registered name. The name will be shown by
+ tools such as `\c:i/0`, [`observer`], and it will be included in crash reports
+ produced by processes using [`gen_server`], [`gen_statem`], [`gen_event`], and
+ [`gen_fsm`].
+
+ The label for a process can be retrieved by calling `proc_lib:get_label/1`.
+
+ Note that those functions work on any process, not only processes that use
+ [`proc_lib`].
+
+ Example:
+
+ ```text
+ 1> self().
+ <0.90.0>
+ 2> proc_lib:set_label(my_label).
+ ok
+ 3> i().
+ .
+ .
+ .
+ <0.90.0> erlang:apply/2 2586 75011 0
+ my_label c:pinfo/2 51
+ 4> proc_lib:get_label(self()).
+ my_label
+ ```
+
+ Own Id: OTP-18789
+ Related Id(s): [PR-7720], [PR-8003]
+
+- `-callback` attributes has been added to modules [`sys`] and [`erl_error`].
+
+ Own Id: OTP-18793
+ Related Id(s): [PR-7703]
+
+- Several new functions that accept funs have been added to module [`timer`].
+
+ Functions `apply_after/2`, `apply_interval/2`, and `apply_repeatedly/2` accept
+ a nullary fun as the second argument, while functions `apply_after/3`,
+ `apply_interval/3`, and `apply_repeatedly/3` accept an n-ary fun as the second
+ and a list of n arguments for the fun as the third argument.
+
+ Own Id: OTP-18808
+ Related Id(s): [PR-7649]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Sigils on string literals have been implemented as per [EEP 66], that is:
+ binary and string sigils in verbatim and escape characters variants, as well
+ as a default (vanilla) Sigil. All for ordinary strings and for triple-quoted
+ strings (EEP 64). See Sigils in the Reference Manual.
+
+ Examples:
+
+ ```erlang
+ 1> ~"Björn".
+ <<"Björn"/utf8>>
+ 2> ~b"Björn".
+ <<"Björn"/utf8>>
+ 3> ~S"\s*(\w+)".
+ "\\s*(\\w+)"
+ 4> ~B"\s*(\w+)".
+ <<"\\s*(\\w+)">>
+ ```
+
+ Own Id: OTP-18825
+ Related Id(s): [PR-7684], OTP-18750
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Functions `shell:default_multiline_prompt/1`, `shell:inverted_space_prompt/1`,
+ and `shell:prompt_width/1` have been exported to help with custom prompt
+ implementations.
+
+ Own Id: OTP-18834
+ Related Id(s): [PR-7675], [PR-7816]
+
+- The shell now pages long output from the help command (`h(Module)`), auto
+ completions and the search command.
+
+ Own Id: OTP-18846
+ Related Id(s): [PR-7845]
+
+- The `M-h` hotkey (Alt/Option-h) now outputs help for the module or function
+ directly before the cursor.
+
+ Own Id: OTP-18847
+ Related Id(s): [PR-7846]
+
+- Added support for adding a custom code formatter that formats your multi-line
+ shell commands in your preferred formatting on submission. See
+ `shell:format_shell_func/` and `shell:erl_pp_format_func/1`.
+
+ Own Id: OTP-18848
+ Related Id(s): [PR-7847]
+
+- Added shell functions for viewing, forgetting and saving locally defined
+ functions, types and records.
+
+ Own Id: OTP-18852
+ Related Id(s): [PR-7844]
+
+- Added `string:jaro_similarity/2`, which can be used to calculate the
+ similarity between two strings.
+
+ Own Id: OTP-18865
+ Related Id(s): [PR-7879]
+
+- The new function `ets:update_element/4` is similar to `ets:update_element/3`,
+ but takes a default tuple as the fourth argument, which will be inserted if no
+ previous record with that key exists.
+
+ Own Id: OTP-18870
+ Related Id(s): [PR-7857]
+
+- Added functions to retrieve the next higher or lower key/element from
+ [`gb_trees`] and [`gb_sets`], as well as returning iterators that start at
+ given keys/elements.
+
+ Own Id: OTP-18874
+ Related Id(s): [PR-7745]
+
+- When the shell built-in function [`c/1,2`][c12] is used to re-compile a
+ module, the current working directory of the original compilation is now added
+ to the include path.
+
+ [c12]: `\c:c/1`
+
+ Own Id: OTP-18908
+ Related Id(s): [PR-7957]
+
+- The `timer` module now uses a private table for its internal state, slightly
+ improving its performance.
+
+ Own Id: OTP-18914
+ Related Id(s): [PR-7973]
+
+- [EEP-59 - Documentation Attributes] has been implemented.
+
+ Documentation attributes can be used to document functions, types, callbacks,
+ and modules. The keyword `-moduledoc "Documentation here".` is used to
+ document modules, while `-doc "Documentation here".` can be used on top of
+ functions, types, and callbacks to document them, respectively.
+
+ - Types, callbacks, and function documentation can be set to `hidden` either
+ via `-doc false` or `-doc hidden`. When documentation attributes mark a type
+ as hidden, they will not be part of the documentation.
+ - The documentation from `moduledoc` and `doc` gets added by default to the
+ binary beam file, following the format of [EEP-48].
+ - Using the compiler flag `warn_missing_doc` will raise a warning when `-doc`
+ attributes are missing in exported functions, types, and callbacks.
+ - Using the compiler flag `warn_missing_spec_documented` will raise a warning
+ when spec attributes are missing in documented functions, types, and
+ callbacks.
+ - `moduledoc`s and `doc`s may refer to external files to be embedded, such as
+ `-doc {file, "README.md"}.`, which refers to the file `README.md` found in
+ the current working directory.
+ - The compiler warns about exported functions whose specs refer to hidden
+ types. Thus, there will be warnings when a hidden type (meaning, the type is
+ not part of the documentation) gets used in an exported function.
+
+ Own Id: OTP-18916
+ Related Id(s): [PR-7936]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- New [`ets`] functions `ets:first_lookup/1`, `ets:next_lookup/2`,
+ `ets:prev_lookup/2` and `ets:last_lookup/1`. Example: `ets:next_lookup/1` is
+ equivalent to `ets:next/2` followed by `ets:lookup/2` with the next key. The
+ new combined functions are more efficient and with guaranteed atomicity.
+
+ Own Id: OTP-18923
+ Related Id(s): [PR-6791]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The `maybe` expression is now enabled by default.
+
+ To use `maybe` as an atom, it needs to be single-quoted. Alternatively, the
+ `maybe` expression can be disabled by disabling the `maybe_expr` feature. That
+ can be done by placing the following the line at the beginning of an Erlang
+ source file:
+
+ ```erlang
+ -feature(maybe_expr, disable).
+ ```
+
+ Another way to disable the `maybe_expr` feature is by passing the
+ `-disable-feature` option to `erlc`:
+
+ ```text
+ erlc -disable-feature maybe_expr some_file.erl
+ ```
+
+ Own Id: OTP-18944
+ Related Id(s): [PR-8067]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The compiler will now raise a warning when updating record/map literals. As an
+ example, consider this module:
+
+ ```erlang
+ -module(t).
+ -export([f/0]).
+ -record(r, {a,b,c}).
+
+ f() ->
+ #r{a=1}#r{b=2}.
+ ```
+
+ The compiler raises the following warning:
+
+ ```text
+ 1> c(t).
+ t.erl:6:12: Warning: expression updates a literal
+ % 6| #r{a=1}#r{b=2}.
+ % | ^
+ ```
+
+ Own Id: OTP-18951
+ Related Id(s): [PR-8069]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- Optimized `ets:foldl` and `ets:foldr` to use new `ets:next_lookup`. Also made
+ them immune against table renaming.
+
+ Own Id: OTP-18993
+ Related Id(s): [PR-8048]
+
+- Windows now supports all functions in [`math`].
+
+ Own Id: OTP-19001
+ Related Id(s): [PR-8164]
+
+- `m:erl_lint` (and by extension the [`compiler`]) will now warn for code using
+ deprecated callbacks.
+
+ The only callback currenly deprecated is `format_status/2` in `gen_server`,
+ `gen_event` and `gen_statem`.
+
+ You can use `nowarn_deprecated_callback` to silence the warning.
+
+ Own Id: OTP-19010
+ Related Id(s): [PR-8205]
+
+- There is a new module [`json`] for encoding and decoding [JSON].
+
+ Both encoding and decoding can be customized. Decoding can be done in a
+ SAX-like fashion and handle multiple documents and streams of data.
+
+ Own Id: OTP-19020
+ Related Id(s): [PR-8111]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of stdlib-6.0
+>
+> compiler-5.0, crypto-4.5, erts-14.3, kernel-9.3, sasl-3.0
+
+# syntax_tools-3.2
+
+## Fixed Bugs and Malfunctions
+
+- The [`epp_dodger`] module can now handle the `maybe` and `else` keywords.
+
+ Own Id: OTP-18608
+ Related Id(s): [GH-7266], [PR-7267]
+
+- Reverting a `#wrapper` will no longer throw away changes made to
+ positions/annotations.
+
+ Own Id: OTP-18805
+ Related Id(s): [PR-7398]
+
+## Improvements and New Features
+
+- The type `erl_syntax:annotation_or_location/0` is now exported.
+
+ Own Id: OTP-18715
+ Related Id(s): [PR-7535]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of syntax_tools-3.2
+>
+> compiler-7.0, erts-9.0, kernel-5.0, stdlib-4.0
+
+# tftp-1.2
+
+## Improvements and New Features
+
+- There is a new [`tftp_logger`] callback behavior module.
+
+ Own Id: OTP-18787
+ Related Id(s): [PR-7700]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of tftp-1.2
+>
+> erts-6.0, kernel-6.0, stdlib-5.0
+
+# tools-4.0
+
+## Fixed Bugs and Malfunctions
+
+- Dialyzer warnings due to type specs added in [`dbg`] have been eliminated.
+
+ Own Id: OTP-18860
+
+- In Erlang/OTP 26, doing a [`cover`] analysis on the `line` level would return
+ multiple entries for lines on which multiple functions were defined.
+
+ For example, consider this module:
+
+ -module(foo).
+ -export([bar/0, baz/0]).
+
+ bar() -> ok. baz() -> not_ok.
+
+ In Erlang/OTP 26, analysing on the `line` level would return two entries for
+ line 4:
+
+ 1> cover:compile_module(foo).
+ {ok,foo}
+ 2> foo:bar().
+ ok
+ 3> cover:analyse(foo, coverage, line).
+ {ok,[{{foo,4},{1,0}},{{foo,4},{0,1}}]}
+ 4> cover:analyse(foo, calls, line).
+ {ok,[{{foo,4},1},{{foo,4},0}]}
+
+ In Erlang/OTP 27, there will only be a single entry for line 4:
+
+ 1> cover:compile_module(foo).
+ {ok,foo}
+ 2> foo:bar().
+ ok
+ 3> cover:analyse(foo, coverage, line).
+ {ok,[{{foo,4},{1,0}}]}
+ 4> cover:analyse(foo, calls, line).
+ {ok,[{{foo,4},1}]}
+
+ Own Id: OTP-18998
+ Related Id(s): [GH-8159], [PR-8182]
+
+- Fixed align command in emacs mode.
+
+ Own Id: OTP-19026
+ Related Id(s): [PR-8155]
+
+## Improvements and New Features
+
+- Triple-Quoted Strings has been implemented as per [EEP 64]. See String in the
+ Reference Manual.
+
+ Example:
+
+ ```erlang
+ 1> """
+ a
+ b
+ c
+ """.
+ "a\nb\nc"
+ ```
+
+ Adjacent string literals without intervening white space is now a syntax
+ error, to avoid possible confusion with triple-quoted strings. For example:
+
+ ```text
+ 1> "abc""xyz".
+ "xyz".
+ * 1:6: adjacent string literals without intervening white space
+ ```
+
+ Own Id: OTP-18750
+ Related Id(s): [PR-7313], [PR-7451], OTP-18746
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+ \*\*\* POTENTIAL INCOMPATIBILITY \*\*\*
+
+- There is a new tool [`tprof`], which combines the functionality of [`eprof`]
+ and [`cprof`] under one interface. It also adds heap profiling.
+
+ Own Id: OTP-18756
+ Related Id(s): [PR-6639]
+
+- Native coverage support has been implemented in the JIT. It will automatically
+ be used by the [`cover`] tool to reduce the execution overhead when running
+ cover-compiled code.
+
+ There are also new APIs to support native coverage without using the `cover`
+ tool.
+
+ To instrument code for native coverage it must be compiled with the
+ [`line_coverage`] option.
+
+ To enable native coverage in the runtime system, start it like so:
+
+ ```text
+ $ erl +JPcover true
+ ```
+
+ There are also the following new functions for supporting native coverage:
+
+ - `code:coverage_support/0`
+ - `code:get_coverage/2`
+ - `code:reset_coverage/1`
+ - `code:get_coverage_mode/0`
+ - `code:get_coverage_mode/1`
+ - `code:set_coverage_mode/1`
+
+ Own Id: OTP-18856
+ Related Id(s): [PR-7856]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of tools-4.0
+>
+> compiler-8.5, erts-14.3, erts-14.3, kernel-9.3, runtime_tools-2.1, stdlib-6.0
+
+# wx-2.4.2
+
+## Improvements and New Features
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of wx-2.4.2
+>
+> erts-12.0, kernel-8.0, stdlib-5.0
+
+# xmerl-1.4
+
+## Improvements and New Features
+
+- Function specifications and types have been added to all public API functions.
+
+ Own Id: OTP-18913
+
+- As an alternative to `xmerl_xml`, a new export module `xmerl_xml_indent` that
+ provides out-of-the box indented output has been added.
+
+ Own Id: OTP-18922
+ Related Id(s): [PR-7942]
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): [PR-8026]
+
+ \*\*\* HIGHLIGHT \*\*\*
+
+> #### Full runtime dependencies of xmerl-1.4
+>
+> erts-6.0, kernel-3.0, stdlib-2.5
+
+[CTH Execution Order]:
+ https://erlang.org/doc/apps/common_test/ct_hooks_chapter.html#cth_execution_order
+[EEP 48]: https://www.erlang.org/eeps/eep-0048
+[EEP 64]: https://www.erlang.org/eeps/eep-0064
+[EEP 66]: https://www.erlang.org/eeps/eep-0066
+[EEP-48]: https://www.erlang.org/eeps/eep-0048
+[EEP-59 - Documentation Attributes]: https://www.erlang.org/eeps/eep-0059
+[GH-4992]: https://github.com/erlang/otp/issues/4992
+[GH-6152]: https://github.com/erlang/otp/issues/6152
+[GH-6692]: https://github.com/erlang/otp/issues/6692
+[GH-6979]: https://github.com/erlang/otp/issues/6979
+[GH-6985]: https://github.com/erlang/otp/issues/6985
+[GH-7183]: https://github.com/erlang/otp/issues/7183
+[GH-7232]: https://github.com/erlang/otp/issues/7232
+[GH-7266]: https://github.com/erlang/otp/issues/7266
+[GH-7295]: https://github.com/erlang/otp/issues/7295
+[GH-7397]: https://github.com/erlang/otp/issues/7397
+[GH-7432]: https://github.com/erlang/otp/issues/7432
+[GH-7438]: https://github.com/erlang/otp/issues/7438
+[GH-7493]: https://github.com/erlang/otp/issues/7493
+[GH-7494]: https://github.com/erlang/otp/issues/7494
+[GH-7706]: https://github.com/erlang/otp/issues/7706
+[GH-7718]: https://github.com/erlang/otp/issues/7718
+[GH-7972]: https://github.com/erlang/otp/issues/7972
+[GH-8058]: https://github.com/erlang/otp/issues/8058
+[GH-8061]: https://github.com/erlang/otp/issues/8061
+[GH-8066]: https://github.com/erlang/otp/issues/8066
+[GH-8159]: https://github.com/erlang/otp/issues/8159
+[GH-8166]: https://github.com/erlang/otp/issues/8166
+[JSON]: https://en.wikipedia.org/wiki/JSON
+[PR-6510]: https://github.com/erlang/otp/pull/6510
+[PR-6639]: https://github.com/erlang/otp/pull/6639
+[PR-6658]: https://github.com/erlang/otp/pull/6658
+[PR-6791]: https://github.com/erlang/otp/pull/6791
+[PR-6985]: https://github.com/erlang/otp/pull/6985
+[PR-7110]: https://github.com/erlang/otp/pull/7110
+[PR-7125]: https://github.com/erlang/otp/pull/7125
+[PR-7174]: https://github.com/erlang/otp/pull/7174
+[PR-7202]: https://github.com/erlang/otp/pull/7202
+[PR-7220]: https://github.com/erlang/otp/pull/7220
+[PR-7236]: https://github.com/erlang/otp/pull/7236
+[PR-7243]: https://github.com/erlang/otp/pull/7243
+[PR-7267]: https://github.com/erlang/otp/pull/7267
+[PR-7274]: https://github.com/erlang/otp/pull/7274
+[PR-7299]: https://github.com/erlang/otp/pull/7299
+[PR-7313]: https://github.com/erlang/otp/pull/7313
+[PR-7316]: https://github.com/erlang/otp/pull/7316
+[PR-7348]: https://github.com/erlang/otp/pull/7348
+[PR-7380]: https://github.com/erlang/otp/pull/7380
+[PR-7383]: https://github.com/erlang/otp/pull/7383
+[PR-7388]: https://github.com/erlang/otp/pull/7388
+[PR-7398]: https://github.com/erlang/otp/pull/7398
+[PR-7419]: https://github.com/erlang/otp/pull/7419
+[PR-7428]: https://github.com/erlang/otp/pull/7428
+[PR-7441]: https://github.com/erlang/otp/pull/7441
+[PR-7443]: https://github.com/erlang/otp/pull/7443
+[PR-7447]: https://github.com/erlang/otp/pull/7447
+[PR-7451]: https://github.com/erlang/otp/pull/7451
+[PR-7465]: https://github.com/erlang/otp/pull/7465
+[PR-7470]: https://github.com/erlang/otp/pull/7470
+[PR-7474]: https://github.com/erlang/otp/pull/7474
+[PR-7475]: https://github.com/erlang/otp/pull/7475
+[PR-7481]: https://github.com/erlang/otp/pull/7481
+[PR-7491]: https://github.com/erlang/otp/pull/7491
+[PR-7496]: https://github.com/erlang/otp/pull/7496
+[PR-7528]: https://github.com/erlang/otp/pull/7528
+[PR-7534]: https://github.com/erlang/otp/pull/7534
+[PR-7535]: https://github.com/erlang/otp/pull/7535
+[PR-7538]: https://github.com/erlang/otp/pull/7538
+[PR-7556]: https://github.com/erlang/otp/pull/7556
+[PR-7585]: https://github.com/erlang/otp/pull/7585
+[PR-7590]: https://github.com/erlang/otp/pull/7590
+[PR-7592]: https://github.com/erlang/otp/pull/7592
+[PR-7607]: https://github.com/erlang/otp/pull/7607
+[PR-7628]: https://github.com/erlang/otp/pull/7628
+[PR-7639]: https://github.com/erlang/otp/pull/7639
+[PR-7649]: https://github.com/erlang/otp/pull/7649
+[PR-7651]: https://github.com/erlang/otp/pull/7651
+[PR-7675]: https://github.com/erlang/otp/pull/7675
+[PR-7684]: https://github.com/erlang/otp/pull/7684
+[PR-7697]: https://github.com/erlang/otp/pull/7697
+[PR-7699]: https://github.com/erlang/otp/pull/7699
+[PR-7700]: https://github.com/erlang/otp/pull/7700
+[PR-7701]: https://github.com/erlang/otp/pull/7701
+[PR-7702]: https://github.com/erlang/otp/pull/7702
+[PR-7703]: https://github.com/erlang/otp/pull/7703
+[PR-7711]: https://github.com/erlang/otp/pull/7711
+[PR-7720]: https://github.com/erlang/otp/pull/7720
+[PR-7726]: https://github.com/erlang/otp/pull/7726
+[PR-7728]: https://github.com/erlang/otp/pull/7728
+[PR-7732]: https://github.com/erlang/otp/pull/7732
+[PR-7738]: https://github.com/erlang/otp/pull/7738
+[PR-7739]: https://github.com/erlang/otp/pull/7739
+[PR-7740]: https://github.com/erlang/otp/pull/7740
+[PR-7745]: https://github.com/erlang/otp/pull/7745
+[PR-7779]: https://github.com/erlang/otp/pull/7779
+[PR-7781]: https://github.com/erlang/otp/pull/7781
+[PR-7782]: https://github.com/erlang/otp/pull/7782
+[PR-7790]: https://github.com/erlang/otp/pull/7790
+[PR-7809]: https://github.com/erlang/otp/pull/7809
+[PR-7816]: https://github.com/erlang/otp/pull/7816
+[PR-7824]: https://github.com/erlang/otp/pull/7824
+[PR-7844]: https://github.com/erlang/otp/pull/7844
+[PR-7845]: https://github.com/erlang/otp/pull/7845
+[PR-7846]: https://github.com/erlang/otp/pull/7846
+[PR-7847]: https://github.com/erlang/otp/pull/7847
+[PR-7856]: https://github.com/erlang/otp/pull/7856
+[PR-7857]: https://github.com/erlang/otp/pull/7857
+[PR-7869]: https://github.com/erlang/otp/pull/7869
+[PR-7879]: https://github.com/erlang/otp/pull/7879
+[PR-7891]: https://github.com/erlang/otp/pull/7891
+[PR-7898]: https://github.com/erlang/otp/pull/7898
+[PR-7917]: https://github.com/erlang/otp/pull/7917
+[PR-7918]: https://github.com/erlang/otp/pull/7918
+[PR-7936]: https://github.com/erlang/otp/pull/7936
+[PR-7942]: https://github.com/erlang/otp/pull/7942
+[PR-7952]: https://github.com/erlang/otp/pull/7952
+[PR-7957]: https://github.com/erlang/otp/pull/7957
+[PR-7960]: https://github.com/erlang/otp/pull/7960
+[PR-7963]: https://github.com/erlang/otp/pull/7963
+[PR-7973]: https://github.com/erlang/otp/pull/7973
+[PR-7977]: https://github.com/erlang/otp/pull/7977
+[PR-7981]: https://github.com/erlang/otp/pull/7981
+[PR-7993]: https://github.com/erlang/otp/pull/7993
+[PR-8003]: https://github.com/erlang/otp/pull/8003
+[PR-8004]: https://github.com/erlang/otp/pull/8004
+[PR-8006]: https://github.com/erlang/otp/pull/8006
+[PR-8026]: https://github.com/erlang/otp/pull/8026
+[PR-8035]: https://github.com/erlang/otp/pull/8035
+[PR-8042]: https://github.com/erlang/otp/pull/8042
+[PR-8048]: https://github.com/erlang/otp/pull/8048
+[PR-8063]: https://github.com/erlang/otp/pull/8063
+[PR-8067]: https://github.com/erlang/otp/pull/8067
+[PR-8069]: https://github.com/erlang/otp/pull/8069
+[PR-8076]: https://github.com/erlang/otp/pull/8076
+[PR-8086]: https://github.com/erlang/otp/pull/8086
+[PR-8090]: https://github.com/erlang/otp/pull/8090
+[PR-8091]: https://github.com/erlang/otp/pull/8091
+[PR-8092]: https://github.com/erlang/otp/pull/8092
+[PR-8093]: https://github.com/erlang/otp/pull/8093
+[PR-8095]: https://github.com/erlang/otp/pull/8095
+[PR-8103]: https://github.com/erlang/otp/pull/8103
+[PR-8111]: https://github.com/erlang/otp/pull/8111
+[PR-8112]: https://github.com/erlang/otp/pull/8112
+[PR-8155]: https://github.com/erlang/otp/pull/8155
+[PR-8156]: https://github.com/erlang/otp/pull/8156
+[PR-8164]: https://github.com/erlang/otp/pull/8164
+[PR-8168]: https://github.com/erlang/otp/pull/8168
+[PR-8177]: https://github.com/erlang/otp/pull/8177
+[PR-8182]: https://github.com/erlang/otp/pull/8182
+[PR-8205]: https://github.com/erlang/otp/pull/8205
+[PR-8241]: https://github.com/erlang/otp/pull/8241
+[`+zhft <Timeout>`]: erl_cmd.md#+zhft
+[`application`]: https://erlang.org/doc/man/application
+[`binary`]: https://erlang.org/doc/man/binary
+[`compiler`]: https://erlang.org/doc/man/compile
+[`cover`]: https://erlang.org/doc/man/cover
+[`cprof`]: https://erlang.org/doc/man/cprof
+[`ct_hooks`]: https://erlang.org/doc/man/ct_hooks
+[`ct_property_test`]: https://erlang.org/doc/man/ct_property_test
+[`ct_suite`]: https://erlang.org/doc/man/ct_suite
+[`dbg`]: https://erlang.org/doc/man/dbg
+[`diameter_app`]: https://erlang.org/doc/man/diameter_app
+[`diameter_transport`]: https://erlang.org/doc/man/diameter_transport
+[`epp_dodger`]: https://erlang.org/doc/man/epp_dodger
+[`eprof`]: https://erlang.org/doc/man/eprof
+[`erl_error`]: https://erlang.org/doc/man/erl_error
+[`erl_prim_loader`]: https://erlang.org/doc/man/erl_prim_loader
+[`erl_tracer`]: https://erlang.org/doc/man/erl_tracer
+[`ets`]: https://erlang.org/doc/man/ets
+[`flush_timeout`]: https://erlang.org/doc/man/erlang#halt_flush_timeout
+[`gb_sets`]: https://erlang.org/doc/man/gb_sets
+[`gb_trees`]: https://erlang.org/doc/man/gb_trees
+[`gen_event`]: https://erlang.org/doc/man/gen_event
+[`gen_fsm`]: https://erlang.org/doc/man/gen_fsm
+[`gen_server`]: https://erlang.org/doc/man/gen_server
+[`gen_statem`]: https://erlang.org/doc/man/gen_statem
+[`httpd`]: https://erlang.org/doc/man/httpd
+[`inet_dns`]: https://erlang.org/doc/man/inet_dns
+[`instrument`]: https://erlang.org/doc/man/instrument
+[`json`]: https://erlang.org/doc/man/json
+[`line_coverage`]: https://erlang.org/doc/man/compile#line_coverage
+[`logger:Level/1,2,3`]: https://erlang.org/doc/man/logger
+[`logger_formatter`]: https://erlang.org/doc/man/logger_formatter
+[`logger_handler`]: https://erlang.org/doc/man/logger_handler
+[`math`]: https://erlang.org/doc/man/math
+[`megaco_transport`]: https://erlang.org/doc/man/megaco_transport
+[`mod_esi`]: https://erlang.org/doc/man/mod_esi
+[`mod_security`]: https://erlang.org/doc/man/mod_security
+[`observer`]: https://erlang.org/doc/man/observer
+[`ordsets`]: https://erlang.org/doc/man/ordsets
+[`proc_lib`]: https://erlang.org/doc/man/proc_lib
+[`sets`]: https://erlang.org/doc/man/sets
+[`snmp`]: https://erlang.org/doc/man/snmp
+[`snmpa_conf`]: https://erlang.org/doc/man/snmpa_conf
+[`snmpa_network_interface_filter`]:
+ https://erlang.org/doc/man/snmpa_network_interface_filter
+[`snmpa_notification_delivery_info_receiver`]:
+ https://erlang.org/doc/man/snmpa_notification_delivery_info_receiver
+[`snmpa_notification_filter`]:
+ https://erlang.org/doc/man/snmpa_notification_filter
+[`snmpa`]: https://erlang.org/doc/man/snmpa
+[`snmpm_network_interface_filter`]:
+ https://erlang.org/doc/man/snmpm_network_interface_filter
+[`snmpm_user`]: https://erlang.org/doc/man/snmpm_user
+[`snmpm`]: https://erlang.org/doc/man/snmpm
+[`socket`]: https://erlang.org/doc/man/socket
+[`sys`]: https://erlang.org/doc/man/sys
+[`tftp_logger`]: https://erlang.org/doc/man/tftp_logger
+[`timer`]: https://erlang.org/doc/man/timer
+[`tprof`]: https://erlang.org/doc/man/tprof
+[`uri_string`]: https://erlang.org/doc/man/uri_string
+[`zlib`]: https://erlang.org/doc/man/zlib
+[cth_log_redirect]:
+ https://erlang.org/doc/apps/common_test/ct_hooks_chapter.html#built-in-cths
+[specialized decode feature]: https://erlang.org/doc/apps/asn1/asn1_spec.html