From 6a596214bc823c38c149a977a8b296d7f53a056d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 26 Feb 2024 15:58:02 +0100 Subject: OTP-27.0-rc1 --- early-plugins.mk | 90 +- release-notes/OTP-27.0-rc1.README.txt | 2307 +++++++++++++++++++++++++++++++++ 2 files changed, 2360 insertions(+), 37 deletions(-) create mode 100644 release-notes/OTP-27.0-rc1.README.txt 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 /=) 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 /=) 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(), + <>. + + 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 + -- cgit v1.2.3