aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2024-02-26 15:58:02 +0100
committerLoïc Hoguin <[email protected]>2024-02-26 15:58:02 +0100
commit6a596214bc823c38c149a977a8b296d7f53a056d (patch)
tree849eda13e8e07f9b0f022ae6a323aad61cda93be
parentf6269569b05532e93f7d4ede342b351dc3158c6f (diff)
downloadci.erlang.mk-6a596214bc823c38c149a977a8b296d7f53a056d.tar.gz
ci.erlang.mk-6a596214bc823c38c149a977a8b296d7f53a056d.tar.bz2
ci.erlang.mk-6a596214bc823c38c149a977a8b296d7f53a056d.zip
OTP-27.0-rc1
-rw-r--r--early-plugins.mk90
-rw-r--r--release-notes/OTP-27.0-rc1.README.txt2307
2 files changed, 2360 insertions, 37 deletions
diff --git a/early-plugins.mk b/early-plugins.mk
index f4c043f..4e8adde 100644
--- a/early-plugins.mk
+++ b/early-plugins.mk
@@ -21,37 +21,44 @@ OTP-23 := OTP-23.0.4 OTP-23.1.5 OTP-23.2.7.3 OTP-23.3.4.19
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.9
OTP-26 := OTP-26.0.2 OTP-26.1.2 OTP-26.2.2
-
-OTP-18+ := $(OTP-18) $(OTP-19) $(OTP-20) $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26)
-OTP-19+ := $(OTP-19) $(OTP-20) $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26)
-OTP-20+ := $(OTP-20) $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26)
-OTP-21+ := $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26)
-OTP-22+ := $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26)
-OTP-23+ := $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26)
-OTP-24+ := $(OTP-24) $(OTP-25) $(OTP-26)
-OTP-25+ := $(OTP-25) $(OTP-26)
-OTP-26+ := $(OTP-26)
+OTP-27 := OTP-27.0-rc1
+
+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)
+OTP-20+ := $(OTP-20) $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27)
+OTP-21+ := $(OTP-21) $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27)
+OTP-22+ := $(OTP-22) $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27)
+OTP-23+ := $(OTP-23) $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27)
+OTP-24+ := $(OTP-24) $(OTP-25) $(OTP-26) $(OTP-27)
+OTP-25+ := $(OTP-25) $(OTP-26) $(OTP-27)
+OTP-26+ := $(OTP-26) $(OTP-27)
+OTP-27+ := $(OTP-27)
OTP-LATEST-18+ := $(lastword $(OTP-18)) $(lastword $(OTP-19)) \
$(lastword $(OTP-20)) $(lastword $(OTP-21)) $(lastword $(OTP-22)) \
$(lastword $(OTP-23)) $(lastword $(OTP-24)) $(lastword $(OTP-25)) \
- $(lastword $(OTP-26))
+ $(lastword $(OTP-26)) $(lastword $(OTP-27))
OTP-LATEST-19+ := $(lastword $(OTP-19)) $(lastword $(OTP-20)) \
$(lastword $(OTP-21)) $(lastword $(OTP-22)) $(lastword $(OTP-23)) \
- $(lastword $(OTP-24)) $(lastword $(OTP-25)) $(lastword $(OTP-26))
+ $(lastword $(OTP-24)) $(lastword $(OTP-25)) $(lastword $(OTP-26)) \
+ $(lastword $(OTP-27))
OTP-LATEST-20+ := $(lastword $(OTP-20)) $(lastword $(OTP-21)) \
$(lastword $(OTP-22)) $(lastword $(OTP-23)) $(lastword $(OTP-24)) \
- $(lastword $(OTP-25)) $(lastword $(OTP-26))
+ $(lastword $(OTP-25)) $(lastword $(OTP-26)) $(lastword $(OTP-27))
OTP-LATEST-21+ := $(lastword $(OTP-21)) $(lastword $(OTP-22)) \
$(lastword $(OTP-23)) $(lastword $(OTP-24)) $(lastword $(OTP-25)) \
- $(lastword $(OTP-26))
+ $(lastword $(OTP-26)) $(lastword $(OTP-27))
OTP-LATEST-22+ := $(lastword $(OTP-22)) $(lastword $(OTP-23)) \
- $(lastword $(OTP-24)) $(lastword $(OTP-25)) $(lastword $(OTP-26))
+ $(lastword $(OTP-24)) $(lastword $(OTP-25)) $(lastword $(OTP-26)) \
+ $(lastword $(OTP-27))
OTP-LATEST-23+ := $(lastword $(OTP-23)) $(lastword $(OTP-24)) \
- $(lastword $(OTP-25)) $(lastword $(OTP-26))
-OTP-LATEST-24+ := $(lastword $(OTP-24)) $(lastword $(OTP-25)) $(lastword $(OTP-26))
-OTP-LATEST-25+ := $(lastword $(OTP-25)) $(lastword $(OTP-26))
-OTP-LATEST-26+ := $(lastword $(OTP-26))
+ $(lastword $(OTP-25)) $(lastword $(OTP-26)) $(lastword $(OTP-27))
+OTP-LATEST-24+ := $(lastword $(OTP-24)) $(lastword $(OTP-25)) \
+ $(lastword $(OTP-26)) $(lastword $(OTP-27))
+OTP-LATEST-25+ := $(lastword $(OTP-25)) $(lastword $(OTP-26)) \
+ $(lastword $(OTP-27))
+OTP-LATEST-26+ := $(lastword $(OTP-26)) $(lastword $(OTP-27))
+OTP-LATEST-27+ := $(lastword $(OTP-27))
# We exclude release candidates here because they are not
# the latest release, they are the *next* one.
@@ -113,6 +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-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-27-DROPPED :=
OTP-DROPPED := $(OTP-18-DROPPED) $(OTP-19-DROPPED) $(OTP-20-DROPPED) \
$(OTP-21-DROPPED) $(OTP-22-DROPPED) $(OTP-23-DROPPED) $(OTP-24-DROPPED)
@@ -193,43 +201,51 @@ WINDOWS-OTP-23 := 23.0 23.1 23.2 23.3
WINDOWS-OTP-24 := 24.0 24.1 24.2 24.3
WINDOWS-OTP-25 := 25.0 25.1 25.2 25.3
WINDOWS-OTP-26 := 26.0 26.1 26.2
+WINDOWS-OTP-27 :=
WINDOWS-OTP-18+ := $(WINDOWS-OTP-18) $(WINDOWS-OTP-19) $(WINDOWS-OTP-20) $(WINDOWS-OTP-21) \
- $(WINDOWS-OTP-22) $(WINDOWS-OTP-23) $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26)
+ $(WINDOWS-OTP-22) $(WINDOWS-OTP-23) $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26) \
+ $(WINDOWS-OTP-27)
WINDOWS-OTP-19+ := $(WINDOWS-OTP-19) $(WINDOWS-OTP-20) $(WINDOWS-OTP-21) $(WINDOWS-OTP-22) \
- $(WINDOWS-OTP-23) $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26)
+ $(WINDOWS-OTP-23) $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26) $(WINDOWS-OTP-27)
WINDOWS-OTP-20+ := $(WINDOWS-OTP-20) $(WINDOWS-OTP-21) $(WINDOWS-OTP-22) $(WINDOWS-OTP-23) \
- $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26)
+ $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26) $(WINDOWS-OTP-27)
WINDOWS-OTP-21+ := $(WINDOWS-OTP-21) $(WINDOWS-OTP-22) $(WINDOWS-OTP-23) $(WINDOWS-OTP-24) \
- $(WINDOWS-OTP-25) $(WINDOWS-OTP-26)
+ $(WINDOWS-OTP-25) $(WINDOWS-OTP-26) $(WINDOWS-OTP-27)
WINDOWS-OTP-22+ := $(WINDOWS-OTP-22) $(WINDOWS-OTP-23) $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) \
- $(WINDOWS-OTP-26)
-WINDOWS-OTP-23+ := $(WINDOWS-OTP-23) $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26)
-WINDOWS-OTP-24+ := $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26)
-WINDOWS-OTP-25+ := $(WINDOWS-OTP-25) $(WINDOWS-OTP-26)
-WINDOWS-OTP-26+ := $(WINDOWS-OTP-26)
+ $(WINDOWS-OTP-26) $(WINDOWS-OTP-27)
+WINDOWS-OTP-23+ := $(WINDOWS-OTP-23) $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26) \
+ $(WINDOWS-OTP-27)
+WINDOWS-OTP-24+ := $(WINDOWS-OTP-24) $(WINDOWS-OTP-25) $(WINDOWS-OTP-26) $(WINDOWS-OTP-27)
+WINDOWS-OTP-25+ := $(WINDOWS-OTP-25) $(WINDOWS-OTP-26) $(WINDOWS-OTP-27)
+WINDOWS-OTP-26+ := $(WINDOWS-OTP-26) $(WINDOWS-OTP-27)
+WINDOWS-OTP-27+ := $(WINDOWS-OTP-27)
WINDOWS-OTP-LATEST-18+ := $(lastword $(WINDOWS-OTP-18)) $(lastword $(WINDOWS-OTP-19)) \
$(lastword $(WINDOWS-OTP-20)) $(lastword $(WINDOWS-OTP-21)) $(lastword $(WINDOWS-OTP-22)) \
$(lastword $(WINDOWS-OTP-23)) $(lastword $(WINDOWS-OTP-24)) $(lastword $(WINDOWS-OTP-25)) \
- $(lastword $(WINDOWS-OTP-26))
+ $(lastword $(WINDOWS-OTP-26)) $(lastword $(WINDOWS-OTP-27))
WINDOWS-OTP-LATEST-19+ := $(lastword $(WINDOWS-OTP-19)) $(lastword $(WINDOWS-OTP-20)) \
$(lastword $(WINDOWS-OTP-21)) $(lastword $(WINDOWS-OTP-22)) $(lastword $(WINDOWS-OTP-23)) \
- $(lastword $(WINDOWS-OTP-24)) $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26))
+ $(lastword $(WINDOWS-OTP-24)) $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26)) \
+ $(lastword $(WINDOWS-OTP-27))
WINDOWS-OTP-LATEST-20+ := $(lastword $(WINDOWS-OTP-20)) $(lastword $(WINDOWS-OTP-21)) \
$(lastword $(WINDOWS-OTP-22)) $(lastword $(WINDOWS-OTP-23)) $(lastword $(WINDOWS-OTP-24)) \
- $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26))
+ $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26)) $(lastword $(WINDOWS-OTP-27))
WINDOWS-OTP-LATEST-21+ := $(lastword $(WINDOWS-OTP-21)) $(lastword $(WINDOWS-OTP-22)) \
$(lastword $(WINDOWS-OTP-23)) $(lastword $(WINDOWS-OTP-24)) $(lastword $(WINDOWS-OTP-25)) \
- $(lastword $(WINDOWS-OTP-26))
+ $(lastword $(WINDOWS-OTP-26)) $(lastword $(WINDOWS-OTP-27))
WINDOWS-OTP-LATEST-22+ := $(lastword $(WINDOWS-OTP-22)) $(lastword $(WINDOWS-OTP-23)) \
- $(lastword $(WINDOWS-OTP-24)) $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26))
+ $(lastword $(WINDOWS-OTP-24)) $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26)) \
+ $(lastword $(WINDOWS-OTP-27))
WINDOWS-OTP-LATEST-23+ := $(lastword $(WINDOWS-OTP-23)) $(lastword $(WINDOWS-OTP-24)) \
- $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26))
+ $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26)) $(lastword $(WINDOWS-OTP-27))
WINDOWS-OTP-LATEST-24+ := $(lastword $(WINDOWS-OTP-24)) $(lastword $(WINDOWS-OTP-25)) \
- $(lastword $(WINDOWS-OTP-26))
-WINDOWS-OTP-LATEST-25+ := $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26))
-WINDOWS-OTP-LATEST-26+ := $(lastword $(WINDOWS-OTP-26))
+ $(lastword $(WINDOWS-OTP-26)) $(lastword $(WINDOWS-OTP-27))
+WINDOWS-OTP-LATEST-25+ := $(lastword $(WINDOWS-OTP-25)) $(lastword $(WINDOWS-OTP-26)) \
+ $(lastword $(WINDOWS-OTP-27))
+WINDOWS-OTP-LATEST-26+ := $(lastword $(WINDOWS-OTP-26)) $(lastword $(WINDOWS-OTP-27))
+WINDOWS-OTP-LATEST-27+ := $(lastword $(WINDOWS-OTP-27))
# @todo Add support for release candidates (we don't want them as the "latest").
WINDOWS-OTP-LATEST := $(lastword $(WINDOWS-OTP-18+))
diff --git a/release-notes/OTP-27.0-rc1.README.txt b/release-notes/OTP-27.0-rc1.README.txt
new file mode 100644
index 0000000..017c55b
--- /dev/null
+++ b/release-notes/OTP-27.0-rc1.README.txt
@@ -0,0 +1,2307 @@
+Inital Release: OTP 27.0
+Git Tag: OTP-27.0
+Date: 2024-02-14
+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-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-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-18941, OTP-18942, OTP-18944, OTP-18945,
+ OTP-18946, OTP-18947, OTP-18950, OTP-18951,
+ OTP-18954, OTP-18955, OTP-18959, OTP-18961,
+ OTP-18963, OTP-18967, OTP-18972, OTP-18973,
+ OTP-18976, OTP-18977, OTP-18978, OTP-18980
+Seq num: #312, 7809, BL-322, ERIERL-43, ERIERL-964,
+ ERIERL-967, ERIERL-985, GH-4992, GH-6152,
+ GH-6692, GH-6985, GH-7183, GH-7232, GH-7266,
+ GH-7295, GH-7397, GH-7432, GH-7493, GH-7494,
+ GH-7706, GH-7718, GH-8061, OTP-16448,
+ OTP-16608, OTP-16875, OTP-17734, OTP-18746,
+ OTP-18750, PR-6510, PR-6639, 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-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-7981, PR-7993, PR-8003, PR-8004,
+ PR-8006, PR-8026, PR-8042, PR-8063, PR-8067,
+ PR-8069, PR-8076, PR-8086, PR-8090, PR-8092
+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.3,
+ erl_interface-5.6, erts-14.3, et-1.8,
+ eunit-2.10, ftp-1.3, inets-9.2,
+ jinterface-1.15, kernel-9.3, megaco-4.6,
+ mnesia-4.24, observer-2.16, odbc-2.15,
+ os_mon-2.10, parsetools-2.6, public_key-1.16,
+ reltool-1.1, runtime_tools-2.1, sasl-4.3,
+ snmp-5.16, ssh-5.2, ssl-11.2, stdlib-6.0,
+ syntax_tools-3.2, tftp-1.2, tools-4.0,
+ wx-2.5, 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
+ Related Id(s): GH-7183, GH-7232
+
+- The compiler now emits nicer error message for function head mismatches. For
+ example, given:
+
+ a() -> ok;
+ a(_) -> error.
+
+ Erlang/OTP 26 and earlier would emit a diagnostic similar to:
+
+ t.erl:6:1: head mismatch
+ % 6| a(_) -> error.
+ % | ^
+
+ while in Erlang/OTP 27 the diagnostic is similar to:
+
+ 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
+
+- 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:
+
+ -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
+
+- 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
+
+ *** 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
+ Related Id(s): PR-7470
+
+- Triple-Quoted Strings has been implemented as per EEP 64. See String in the
+ Reference Manual.
+
+ Example:
+
+ 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:
+
+ 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
+
+ *** 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 0-ary 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
+
+- 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:
+
+ 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
+
+- 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:
+
+ $ 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
+
+- 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.
+ - `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
+
+- 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
+
+- 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:
+
+ -feature(maybe_expr, disable).
+
+ Another way to disable the `maybe_expr` feature is by passing the
+ `-disable-feature` option to `erlc`:
+
+ erlc -disable-feature maybe_expr some_file.erl
+
+ Own Id: OTP-18944
+ Related Id(s): PR-8067
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ 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:
+
+ -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
+
+- Multiple trace sessions.
+
+ Own Id: OTP-18980
+
+# POTENTIAL INCOMPATIBILITIES
+
+- The `pid` field has been removed from `erlang:fun_info/1,2`.
+
+ Own Id: OTP-18594
+ 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
+ Related Id(s): PR-7348
+
+- Introduce default value for httpd_server name configuration to improve ease of
+ use.
+
+ Own Id: OTP-18641
+ 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 <c>/=</c>) and all relative
+ comparison operations still consider `0.0` equal to `-0.0`.
+
+ Own Id: OTP-18717
+ Related Id(s): PR-7728
+
+ *** HIGHLIGHT ***
+
+- Triple-Quoted Strings has been implemented as per EEP 64. See String in the
+ Reference Manual.
+
+ Example:
+
+ 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:
+
+ 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 ***
+
+- 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
+
+# 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 <c>/=</c>) 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
+
+- 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:
+
+ -feature(maybe_expr, disable).
+
+ Another way to disable the `maybe_expr` feature is by passing the
+ `-disable-feature` option to `erlc`:
+
+ erlc -disable-feature maybe_expr some_file.erl
+
+ Own Id: OTP-18944
+ Related Id(s): PR-8067
+
+ *** HIGHLIGHT ***
+
+# 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 ***
+
+> #### 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 ***
+
+> #### 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:
+
+ -module(t).
+ -export([f/0]).
+
+ f() ->
+ <<0 || _ <- [], _ <- ok, false>>.
+
+ In Erlang/OTP 26 it would fail like so:
+
+ > 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:
+
+ > 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:
+
+ a() -> ok;
+ a(_) -> error.
+
+ Erlang/OTP 26 and earlier would emit a diagnostic similar to:
+
+ t.erl:6:1: head mismatch
+ % 6| a(_) -> error.
+ % | ^
+
+ while in Erlang/OTP 27 the diagnostic is similar to:
+
+ 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:
+
+ bin() ->
+ C = char(),
+ <<C>>.
+
+ char() -> $*.
+
+ Essentially, the compiler rewrites the example to the slightly more efficient:
+
+ 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:
+
+ -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:
+
+ $ 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.
+ - `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 ***
+
+- 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:
+
+ -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 ***
+
+> #### 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
+
+- `OPENSSL_thread_stop` is called when `crypto` is purged to not leak thread
+ specific data.
+
+ Own Id: OTP-18978
+ Related Id(s): 7809
+
+> #### 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.3
+
+## 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.3
+>
+> asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-3.4
+
+# erl_interface-5.6
+
+## 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
+
+- Fix bugs in how `erl -extra` interacts with passing flags via ERL\_\*FLAGS or
+ `-args_file`.
+
+ 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
+
+## 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
+
+- Add call stack trace to the error reported by erlang:process_flag/2 when
+ `max_heap_size` 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:
+
+ $ 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
+
+- 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:
+
+ -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
+
+- Add optional NIF callback `ERL_NIF_OPT_ON_UNLOAD_THREAD` to be called by all
+ scheduler thread 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 ***
+
+> #### Full runtime dependencies of erts-14.3
+>
+> kernel-9.0, sasl-3.3, stdlib-4.1
+
+# et-1.8
+
+## 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.8
+>
+> erts-9.0, kernel-5.3, runtime_tools-1.10, stdlib-3.4, wx-1.2
+
+# eunit-2.10
+
+## 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.10
+>
+> erts-9.0, kernel-5.3, stdlib-3.4
+
+# ftp-1.3
+
+## 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.3
+>
+> erts-7.0, kernel-6.0, runtime_tools-1.15.1, ssl-10.2, stdlib-3.5
+
+# inets-9.2
+
+## Improvements and New Features
+
+- Introduce default value for httpd_server name configuration to improve ease of
+ use.
+
+ Own Id: OTP-18641
+ Related Id(s): PR-7316
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+- With this change, `erl -S httpd` command can be used for serving current
+ directory content over HTTP.
+
+ 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
+
+- Use proc_lib:set_label/1 to increase observability of inets processes.
+
+ Own Id: OTP-18927
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): PR-8026
+
+ *** HIGHLIGHT ***
+
+> #### 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.15
+
+## 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
+
+- Add `-callback` attributes 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:
+
+ $ 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 undocumented and deprecated `file:pid2name` function has been removed.
+
+ Own Id: OTP-18967
+ Related Id(s): PR-8092
+
+> #### 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.24
+
+## 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.24
+>
+> 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:
+
+ 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.15
+
+## 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.15
+>
+> 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.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.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:
+
+ 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.3
+
+## 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.3
+>
+> 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): #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
+
+## 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-5.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
+
+## 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
+
+- 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
+
+- The documentation has been migrated to use Markdown and ExDoc.
+
+ Own Id: OTP-18955
+ Related Id(s): PR-8026
+
+ *** HIGHLIGHT ***
+
+> #### Full runtime dependencies of ssl-11.2
+>
+> crypto-5.0, erts-14.3, inets-5.10.7, kernel-9.0, public_key-1.16,
+> 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
+
+## 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:
+
+ a() -> ok;
+ a(_) -> error.
+
+ Erlang/OTP 26 and earlier would emit a diagnostic similar to:
+
+ t.erl:6:1: head mismatch
+ % 6| a(_) -> error.
+ % | ^
+
+ while in Erlang/OTP 27 the diagnostic is similar to:
+
+ 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:
+
+ 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:
+
+ 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:
+
+ 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 0-ary 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:
+
+ 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 he shell built-in function `c/1,2` is used to re-compile a module,
+ the current working directory of the original compilation is now added to the
+ include path.
+
+
+ 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.
+ - `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:
+
+ -feature(maybe_expr, disable).
+
+ Another way to disable the `maybe_expr` feature is by passing the
+ `-disable-feature` option to `erlc`:
+
+ 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:
+
+ -module(t).
+ -export([f/0]).
+ -record(r, {a,b,c}).
+
+ f() ->
+ #r{a=1}#r{b=2}.
+
+ The compiler raises the following warning:
+
+ 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 ***
+
+> #### 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 now 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
+
+## Improvements and New Features
+
+- Triple-Quoted Strings has been implemented as per EEP 64. See String in the
+ Reference Manual.
+
+ Example:
+
+ 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:
+
+ 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:
+
+ $ 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.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 ***
+
+> #### Full runtime dependencies of wx-2.5
+>
+> 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
+