Patch Package OTP-29.0-rc1 released

Henrik Nord X henrik.x.nord@REDACTED
Wed Feb 11 15:06:41 CET 2026


Inital Release:          OTP 29.0
Git Tag:                 OTP-29.0
Date:                    2026-02-11
Trouble Report Id:       OTP-16607, OTP-19611, OTP-19643, OTP-19652,
                         OTP-19663, OTP-19672, OTP-19695, OTP-19708,
                         OTP-19709, OTP-19713, OTP-19734, OTP-19744,
                         OTP-19747, OTP-19750, OTP-19751, OTP-19763,
                         OTP-19764, OTP-19766, OTP-19775, OTP-19778,
                         OTP-19779, OTP-19783, OTP-19784, OTP-19785,
                         OTP-19786, OTP-19793, OTP-19800, OTP-19801,
                         OTP-19807, OTP-19809, OTP-19811, OTP-19815,
                         OTP-19822, OTP-19826, OTP-19834, OTP-19838,
                         OTP-19842, OTP-19853, OTP-19858, OTP-19866,
                         OTP-19874, OTP-19882, OTP-19887, OTP-19898,
                         OTP-19903, OTP-19906, OTP-19910, OTP-19912,
                         OTP-19917, OTP-19918, OTP-19919, OTP-19921,
                         OTP-19922, OTP-19925, OTP-19927, OTP-19930,
                         OTP-19932, OTP-19933, OTP-19934, OTP-19935,
                         OTP-19936, OTP-19938, OTP-19942, OTP-19943,
                         OTP-19949, OTP-19954, OTP-19956, OTP-19960,
                         OTP-19963, OTP-19964, OTP-19965, OTP-19966,
                         OTP-19968
Seq num:                 GH-10071, GH-10125, GH-10151, GH-10260,
                         GH-10341, GH-10345, GH-10558, GH-10559,
                         GH-10560, GH-10561, GH-10609, GH-8569,
                         GH-8993, GH-9822, OTP-16608, OTP-19827,
                         PR-10013, PR-10033, PR-10078, PR-10114,
                         PR-10115, PR-10126, PR-10134, PR-10144,
                         PR-10145, PR-10161, PR-10165, PR-10166,
                         PR-10168, PR-10187, PR-10189, PR-10193,
                         PR-10195, PR-10197, PR-10202, PR-10206,
                         PR-10207, PR-10209, PR-10213, PR-10218,
                         PR-10220, PR-10223, PR-10230, PR-10234,
                         PR-10253, PR-10269, PR-10276, PR-10277,
                         PR-10281, PR-10304, PR-10338, PR-10348,
                         PR-10372, PR-10382, PR-10387, PR-10417,
                         PR-10421, PR-10422, PR-10433, PR-10449,
                         PR-10453, PR-10510, PR-10511, PR-10514,
                         PR-10519, PR-10524, PR-10532, PR-10549,
                         PR-10554, PR-10556, PR-10566, PR-10568,
                         PR-10573, PR-10579, PR-10585, PR-10598,
                         PR-10601, PR-10613, PR-10615, PR-10617,
                         PR-10626, PR-10642, PR-10646, PR-10656,
                         PR-7118, PR-7315, PR-9115, PR-9125, PR-9134,
                         PR-9153, PR-9209, PR-9223, PR-9374, PR-9475,
                         PR-9790, PR-9864, PR-9866, PR-9894, PR-9899,
                         PR-9934, PR-9984
System:                  OTP
Release:                 29
Application:             asn1-5.5, common_test-1.30, compiler-10.0,
                         crypto-5.9, debugger-6.1, dialyzer-6.0,
                         diameter-2.7, edoc-1.5, eldap-1.3,
                         erl_interface-5.7, erts-17.0, et-1.8,
                         eunit-2.11, ftp-1.3, inets-9.6,
                         jinterface-1.16, kernel-11.0, megaco-4.9,
                         mnesia-4.26, observer-2.19, odbc-2.17,
                         os_mon-2.12, parsetools-2.8, public_key-1.21,
                         reltool-1.1, runtime_tools-2.4, sasl-4.4,
                         snmp-5.21, ssh-5.5, ssl-11.5.2, stdlib-8.0,
                         syntax_tools-4.1, tftp-1.3, tools-4.2,
                         wx-2.6, xmerl-2.2
Predecessor:             OTP

Check out the git tag OTP-29.0, and build a full OTP system including
documentation.

# HIGHLIGHTS

- The JIT now generates better code for matching or creating binaries with
  multiple little-endian segments.

  Own Id: OTP-19747
  Application(s): erts
  Related Id(s): PR-10126

- In the documentation for the `compile` module, a section has been added with
  recommendations for implementors of languages running on the BEAM.
  Documentation has also been added for the `to_abstr`, `to_exp`, and
  `from_abstr` options.

  The documentation for erlc now lists `.abstr` as one of the supported
  options.

  When compiling with the `to_abstr` option, the resulting `.abstr` file now
  retains any `-doc` attributes present in the source code.

  Own Id: OTP-19784
  Application(s): compiler, erts
  Related Id(s): PR-10230, PR-10234

- Native records as described in EEP-79 has been implemented.

  A native record is a data structure similar to the traditional tuple-based
  records, except that is a true data type.

  Native records are considered experimental in Erlang/OTP 29 and possibly also
  in Erlang/OTP 30, meaning that their behavior may change, potentially
  requiring updates to applications that use them.

  Own Id: OTP-19785
  Application(s): compiler, dialyzer, erts, stdlib
  Related Id(s): PR-10617

- The guard BIF `is_integer/3` has been added. It follows the design of the
  original EEP-16, only changing the name from `is_between` to `is_integer`.
  This BIF takes in 3 parameters, `Term`, `LowerBound`, and `UpperBound`.

  It returns `true` if `Term`, `LowerBound`, and `UpperBound` are all integers,
  and `LowerBound =< Term =< UpperBound`; otherwise, it returns false.

  Example:

      1> I = 42.
      2> is_integer(I, 0, 100).
      true

  Own Id: OTP-19809
  Application(s): compiler, dialyzer, erts
  Related Id(s): PR-10276

- There are new functions for random permutation of a list: rand:shuffle/1 and
  rand:shuffle_s/2. They are inspired by a suggestion and discussion on
  ErlangForums.

  Own Id: OTP-19826
  Application(s): stdlib
  Related Id(s): PR-10281

- In the default code path for the Erlang system, the current working directory
  (`.`) is now in the last position instead of the first.

  Own Id: OTP-19842
  Application(s): erts, kernel

  *** POTENTIAL INCOMPATIBILITY ***

- Function application is now left associative. That means one can now write:

      f(X)(Y)

  instead of:

      (f(X))(Y)

  Own Id: OTP-19866
  Application(s): compiler
  Related Id(s): PR-9223

- There will now be a warning when exporting variables out of a subexpression.
  For example:

      case file:open(File, AllOpts = [write,{encoding,utf8}]) of
          {ok,Fd} ->
              {Fd,AllOpts}
      end

  To avoid the warning, this can be rewritten to:

      AllOpts = [write,{encoding,utf8}],
      case file:open(File, AllOpts) of
          {ok,Fd} ->
              {Fd,AllOpts}
      end

  The warning can be suppressed by giving option `nowarn_export_var_subexpr` to
  the compiler.

  Own Id: OTP-19898
  Application(s): compiler, stdlib
  Related Id(s): PR-9134

- By default, the compiler will now warn for uses of the `and` and `or`
  operators.

  This warning can be suppressed using the `nowarn_obsolete_bool_op` compiler
  option.

  Own Id: OTP-19918
  Application(s): compiler
  Related Id(s): PR-9115

- Before Erlang/OTP 29, attempting to bind variables in a comprehension would
  compile successfully but fail at runtime. Example:

      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      ok
      2> fh(lists:seq(1, 10)).
      * exception error: bad filter 2614250

  In Erlang/OTP 29, attempting to bind a variable in a comprehension will fail
  by default:

      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      * 5:14: matches using '=' are not allowed in comprehension qualifiers
      unless the experimental 'compr_assign' language feature is enabled.
      With 'compr_assign' enabled, a match 'P = E' will behave as a
      strict generator 'P <-:- [E]'."

  However, this example will work as expected if the `compr_assign` feature is
  enabled when starting the runtime system:

      $ erl -enable-feature compr_assign
      . . .
      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      ok
      2> fh(lists:seq(1, 10)).
      [2614250]

  Here is another example how `compr_assign` can be used:

      -module(example).
      -feature(compr_assign, enable).
      -export([cat/1]).

      cat(Files) ->
          [Char || F <- Files,
                   {ok, Bin} = file:read_file(F),
                   Char <- unicode:characters_to_list(Bin)].

  Own Id: OTP-19927
  Application(s): compiler, stdlib
  Related Id(s): PR-9153

  *** POTENTIAL INCOMPATIBILITY ***

- There will now be a warning when using the `catch` operator, which has been
  deprecated for a long time.

  It is recommended to instead use `try`...`catch` but is also possible to
  disable the warning by using the `nowarn_deprecated_catch` option.

  Own Id: OTP-19938
  Application(s): compiler, stdlib
  Related Id(s): PR-10421

- Multi-valued comprehensions according to EEP 78 has been implemented.

  Example:

      > [I, -I || I <- lists:seq(1, 5)].
      [1,-1,2,-2,3,-3,4,-4,5,-5]

  Own Id: OTP-19942
  Application(s): compiler, debugger, stdlib, syntax_tools
  Related Id(s): PR-9374

- There will now be a warning for matches that unify constructors, such as the
  following:

      m({a,B} = {Y,Z}) -> . . .

  Such a match can be rewritten to:

      m({a=Y,B=B}) -> . . .

  The compiler option `nowarn_match_alias_pats` can be used to disable the
  warning.

  Own Id: OTP-19943
  Application(s): compiler, stdlib
  Related Id(s): PR-10433

- There is no longer a 32-bit Erlang/OTP build for Windows.

  Own Id: OTP-19960
  Application(s): otp

- The default key exchange algorithm is now mlkem768x25519-sha256, a hybrid
  quantum-resistant algorithm combining ML-KEM-768 with X25519. This provides
  protection against both classical and quantum computer attacks while
  maintaining backward compatibility through automatic fallback to other
  algorithms when peers don't support it.

  Own Id: OTP-19965
  Application(s): ssh
  Related Id(s): PR-10656

  *** POTENTIAL INCOMPATIBILITY ***

- The compiler now generates more efficient code for map comprehensions with
  constant values that don't depend on the generator, such as the following:

      #{K => 42} || K <- List}.
      #{K => X || K <- List}.
      #{K => {X, Y} || K <- List}.

  Own Id: OTP-19968
  Application(s): compiler
  Related Id(s): PR-10646

# POTENTIAL INCOMPATIBILITIES

- Fixed (`inet`) module selection when calling (`gen_tcp`) listen and connect
  and (`gen_udp`) open. Depending on the order of the options, the module option
  (`tcp_module` or `udp_module`) was sometimes ignored.

  Own Id: OTP-19695
  Application(s): kernel
  Related Id(s): GH-9822, PR-10013

- `ssh:stop_deamon` now uses `supervisor:stop` for shutting down daemons. With
  this change, the scenario when `ssh:stop_daemon` is called for a non-existing
  process results in calling process exiting. Previously an error tuple was
  returned (which was not documented).

  Own Id: OTP-19801
  Application(s): ssh
  Related Id(s): PR-10253

- In the default code path for the Erlang system, the current working directory
  (`.`) is now in the last position instead of the first.

  Own Id: OTP-19842
  Application(s): erts, kernel

  *** HIGHLIGHT ***

- Before Erlang/OTP 29, attempting to bind variables in a comprehension would
  compile successfully but fail at runtime. Example:

      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      ok
      2> fh(lists:seq(1, 10)).
      * exception error: bad filter 2614250

  In Erlang/OTP 29, attempting to bind a variable in a comprehension will fail
  by default:

      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      * 5:14: matches using '=' are not allowed in comprehension qualifiers
      unless the experimental 'compr_assign' language feature is enabled.
      With 'compr_assign' enabled, a match 'P = E' will behave as a
      strict generator 'P <-:- [E]'."

  However, this example will work as expected if the `compr_assign` feature is
  enabled when starting the runtime system:

      $ erl -enable-feature compr_assign
      . . .
      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      ok
      2> fh(lists:seq(1, 10)).
      [2614250]

  Here is another example how `compr_assign` can be used:

      -module(example).
      -feature(compr_assign, enable).
      -export([cat/1]).

      cat(Files) ->
          [Char || F <- Files,
                   {ok, Bin} = file:read_file(F),
                   Char <- unicode:characters_to_list(Bin)].

  Own Id: OTP-19927
  Application(s): compiler, stdlib
  Related Id(s): PR-9153

  *** HIGHLIGHT ***

- The default key exchange algorithm is now mlkem768x25519-sha256, a hybrid
  quantum-resistant algorithm combining ML-KEM-768 with X25519. This provides
  protection against both classical and quantum computer attacks while
  maintaining backward compatibility through automatic fallback to other
  algorithms when peers don't support it.

  Own Id: OTP-19965
  Application(s): ssh
  Related Id(s): PR-10656

  *** HIGHLIGHT ***

# OTP-29.0

## Improvements and New Features

- Vendor dependencies and OpenVEX statements in the otp repository is now
  scanned for vulnerabilities.

  Own Id: OTP-19652
  Related Id(s): PR-9790

- Automated vendor vulnerability handling has been added.

  1. Verifies that OTP reported Github Securities exists in the published
     OpenVEX statements.
  2. Open issues automatically in Erlang/OTP if vendor vulnerabilities are
     detected.

  Own Id: OTP-19763
  Related Id(s): PR-10145, PR-10166, PR-10168, PR-10189, PR-10193,
  PR-10195, PR-10197, PR-10202

- Added OpenVEX statement for PCRE2 under investigation.

  Own Id: OTP-19764
  Related Id(s): PR-10165

- Documentation about how to validate the SBOM using sigstore has been added.

  Own Id: OTP-19766
  Related Id(s): GH-10151, PR-10187

- The vendor vulnerability scanner was reporting scanning the `maint` branch
  when it was doing the `master` branch. This issue only happened for pull
  requests that modified vendor files. Scheduled vendor vulnerability scans were
  correct.

  The behavior has not been corrected and pull requests on `maint` and
  `maint-`XX will work as expected, analyzing their vendor dependencies.

  To create issues when vendor vulnerabilities are detected, use permissions
  from the Erlang Vendor Scanner Bot.

  Own Id: OTP-19775
  Related Id(s): PR-10206, PR-10213, PR-10218, PR-10220, PR-10223

- Create OpenVEX statement in Erlang/OTP to state that the wxWindows vendor
  vulnerability CVE-2024-58249 does not affect OTP-28.

  Own Id: OTP-19778
  Related Id(s): PR-10209

- `.github/scripts/otp-compliance.es vex run` was ignoring certain OpenVEX
  statements if the CVE name existed. That meant an OpenVEX statement could say
  "under_investigation" and the CVE reported a vulnerability, and simply based
  on the CVE Id, the script would ignore it as the CVE Id exists in OpenVEX.

  The script has been updated to filter CVE results that already exist in
  OpenVEX statements.

  Own Id: OTP-19779
  Related Id(s): PR-10209

- The old-style type tests in guards (`integer`, `atom` and so on) have been
  scheduled for removal in Erlang/OTP 30. They have been deprecated for a long
  time.

  Own Id: OTP-19887
  Related Id(s): PR-10417

- Update OpenVEX files with `not_affected` status for `CVE-2026-22184`

  Own Id: OTP-19930
  Related Id(s): GH-10558, GH-10559, GH-10560, GH-10561, PR-10566

- Removed the undocumented `dyn_erl` utility.

  Own Id: OTP-19933
  Related Id(s): PR-10573

- Added `openssl` OpenVEX statements to clarify that none of them affect neither
  `erts` nor `erl_interface`.

  Own Id: OTP-19954
  Related Id(s): GH-10609, PR-10613

- There is no longer a 32-bit Erlang/OTP build for Windows.

  Own Id: OTP-19960
  *** HIGHLIGHT ***

# asn1-5.5

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of asn1-5.5
>
> erts-14.0, kernel-9.0, stdlib-5.0

# common_test-1.30

## Improvements and New Features

- Vendor dependencies and OpenVEX statements in the otp repository is now
  scanned for vulnerabilities.

  Own Id: OTP-19652
  Related Id(s): PR-9790

- The legacy `and` and `or` operators have been replaced with `andalso` and
  `orelse`.

  Own Id: OTP-19744
  Related Id(s): PR-10114, PR-10554, PR-10568, PR-10579, PR-10585,
  PR-10598

- `'EXIT'` messages are now formatted in the same way as `badmatch` errors.

  Own Id: OTP-19910
  Related Id(s): PR-10277

- Error notifications now contain the name of the source file in which the error
  occurred.

  Own Id: OTP-19925
  Related Id(s): GH-10260, PR-10269

> #### Full runtime dependencies of common_test-1.30
>
> 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-10.0

## Fixed Bugs and Malfunctions

- For a function such as the following:

      bar(S0) ->
          S1 = setelement(8, S0, a),
          S2 = setelement(7, S1, b),
          setelement(5, S2, c).

  the compiler would keep all of the calls to `setelement/3` and emit extra
  unnecessary `set_tuple_element` instructions.

  This has been corrected so that the compiler will never emit code that uses
  the `set_tuple_element` instruction. In a future release, support for the
  `set_tuple_element` will be removed from the runtime system.

  Own Id: OTP-19751
  Related Id(s): GH-10125, PR-10144

## Improvements and New Features

- In comprehensions, a generator that builds a list with a single element will
  now be optimized to avoid building and matching the list. Example:

      [H || E <- List, H <- [erlang:phash2(E)], H rem 10 =:= 0]

  Own Id: OTP-19672
  Related Id(s): PR-9934

- In the documentation for the `compile` module, a section has been added with
  recommendations for implementors of languages running on the BEAM.
  Documentation has also been added for the `to_abstr`, `to_exp`, and
  `from_abstr` options.

  The documentation for erlc now lists `.abstr` as one of the supported
  options.

  When compiling with the `to_abstr` option, the resulting `.abstr` file now
  retains any `-doc` attributes present in the source code.

  Own Id: OTP-19784
  Related Id(s): PR-10230, PR-10234

  *** HIGHLIGHT ***

- Native records as described in EEP-79 has been implemented.

  A native record is a data structure similar to the traditional tuple-based
  records, except that is a true data type.

  Native records are considered experimental in Erlang/OTP 29 and possibly also
  in Erlang/OTP 30, meaning that their behavior may change, potentially
  requiring updates to applications that use them.

  Own Id: OTP-19785
  Related Id(s): PR-10617

  *** HIGHLIGHT ***

- The guard BIF `is_integer/3` has been added. It follows the design of the
  original EEP-16, only changing the name from `is_between` to `is_integer`.
  This BIF takes in 3 parameters, `Term`, `LowerBound`, and `UpperBound`.

  It returns `true` if `Term`, `LowerBound`, and `UpperBound` are all integers,
  and `LowerBound =< Term =< UpperBound`; otherwise, it returns false.

  Example:

      1> I = 42.
      2> is_integer(I, 0, 100).
      true

  Own Id: OTP-19809
  Related Id(s): PR-10276

  *** HIGHLIGHT ***

- Function application is now left associative. That means one can now write:

      f(X)(Y)

  instead of:

      (f(X))(Y)

  Own Id: OTP-19866
  Related Id(s): PR-9223

  *** HIGHLIGHT ***

- There will now be a warning when exporting variables out of a subexpression.
  For example:

      case file:open(File, AllOpts = [write,{encoding,utf8}]) of
          {ok,Fd} ->
              {Fd,AllOpts}
      end

  To avoid the warning, this can be rewritten to:

      AllOpts = [write,{encoding,utf8}],
      case file:open(File, AllOpts) of
          {ok,Fd} ->
              {Fd,AllOpts}
      end

  The warning can be suppressed by giving option `nowarn_export_var_subexpr` to
  the compiler.

  Own Id: OTP-19898
  Related Id(s): PR-9134

  *** HIGHLIGHT ***

- By default, the compiler will now warn for uses of the `and` and `or`
  operators.

  This warning can be suppressed using the `nowarn_obsolete_bool_op` compiler
  option.

  Own Id: OTP-19918
  Related Id(s): PR-9115

  *** HIGHLIGHT ***

- Before Erlang/OTP 29, attempting to bind variables in a comprehension would
  compile successfully but fail at runtime. Example:

      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      ok
      2> fh(lists:seq(1, 10)).
      * exception error: bad filter 2614250

  In Erlang/OTP 29, attempting to bind a variable in a comprehension will fail
  by default:

      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      * 5:14: matches using '=' are not allowed in comprehension qualifiers
      unless the experimental 'compr_assign' language feature is enabled.
      With 'compr_assign' enabled, a match 'P = E' will behave as a
      strict generator 'P <-:- [E]'."

  However, this example will work as expected if the `compr_assign` feature is
  enabled when starting the runtime system:

      $ erl -enable-feature compr_assign
      . . .
      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      ok
      2> fh(lists:seq(1, 10)).
      [2614250]

  Here is another example how `compr_assign` can be used:

      -module(example).
      -feature(compr_assign, enable).
      -export([cat/1]).

      cat(Files) ->
          [Char || F <- Files,
                   {ok, Bin} = file:read_file(F),
                   Char <- unicode:characters_to_list(Bin)].

  Own Id: OTP-19927
  Related Id(s): PR-9153

  *** HIGHLIGHT ***

  *** POTENTIAL INCOMPATIBILITY ***

- There will now be a warning when using the `catch` operator, which has been
  deprecated for a long time.

  It is recommended to instead use `try`...`catch` but is also possible to
  disable the warning by using the `nowarn_deprecated_catch` option.

  Own Id: OTP-19938
  Related Id(s): PR-10421

  *** HIGHLIGHT ***

- Multi-valued comprehensions according to EEP 78 has been implemented.

  Example:

      > [I, -I || I <- lists:seq(1, 5)].
      [1,-1,2,-2,3,-3,4,-4,5,-5]

  Own Id: OTP-19942
  Related Id(s): PR-9374

  *** HIGHLIGHT ***

- There will now be a warning for matches that unify constructors, such as the
  following:

      m({a,B} = {Y,Z}) -> . . .

  Such a match can be rewritten to:

      m({a=Y,B=B}) -> . . .

  The compiler option `nowarn_match_alias_pats` can be used to disable the
  warning.

  Own Id: OTP-19943
  Related Id(s): PR-10433

  *** HIGHLIGHT ***

- The compiler now generates more efficient code for map comprehensions with
  constant values that don't depend on the generator, such as the following:

      #{K => 42} || K <- List}.
      #{K => X || K <- List}.
      #{K => {X, Y} || K <- List}.

  Own Id: OTP-19968
  Related Id(s): PR-10646

  *** HIGHLIGHT ***

> #### Full runtime dependencies of compiler-10.0
>
> crypto-5.1, erts-13.0, kernel-8.4, stdlib-8.0

# crypto-5.9

## Improvements and New Features

- The rand:bytes/1 and rand:bytes_s/2 functions have been optimized by
  implementing a new internal callback function that crypto:rand_seed_alg/1
  and crypto:alg_seed_alg_s/1 have been updated to use.

  A new algorithm `crypto_prng1`, which also takes advantage of this new
  internal callback, has been added to crypto:rand_seed_alg/2 and
  crypto:rand_seed_alg_s/2. It is much faster then the existing `crypto_aes`,
  in particular for generating bytes.

  Own Id: OTP-19882
  Related Id(s): PR-10453, OTP-19827

> #### Full runtime dependencies of crypto-5.9
>
> erts-9.0, kernel-6.0, stdlib-3.9

# debugger-6.1

## Improvements and New Features

- Tools such as the debugger, `beam_lib`, and `xref` no longer support BEAM
  files created before OTP 13B.

  Own Id: OTP-19906
  Related Id(s): PR-10519

- Multi-valued comprehensions according to EEP 78 has been implemented.

  Example:

      > [I, -I || I <- lists:seq(1, 5)].
      [1,-1,2,-2,3,-3,4,-4,5,-5]

  Own Id: OTP-19942
  Related Id(s): PR-9374

  *** HIGHLIGHT ***

> #### Full runtime dependencies of debugger-6.1
>
> compiler-8.0, erts-15.0, kernel-10.0, stdlib-7.0, wx-2.0

# dialyzer-6.0

## Improvements and New Features

- Native records as described in EEP-79 has been implemented.

  A native record is a data structure similar to the traditional tuple-based
  records, except that is a true data type.

  Native records are considered experimental in Erlang/OTP 29 and possibly also
  in Erlang/OTP 30, meaning that their behavior may change, potentially
  requiring updates to applications that use them.

  Own Id: OTP-19785
  Related Id(s): PR-10617

  *** HIGHLIGHT ***

- The guard BIF `is_integer/3` has been added. It follows the design of the
  original EEP-16, only changing the name from `is_between` to `is_integer`.
  This BIF takes in 3 parameters, `Term`, `LowerBound`, and `UpperBound`.

  It returns `true` if `Term`, `LowerBound`, and `UpperBound` are all integers,
  and `LowerBound =< Term =< UpperBound`; otherwise, it returns false.

  Example:

      1> I = 42.
      2> is_integer(I, 0, 100).
      true

  Own Id: OTP-19809
  Related Id(s): PR-10276

  *** HIGHLIGHT ***

> #### Full runtime dependencies of dialyzer-6.0
>
> compiler-10.0, erts-12.0, kernel-8.0, stdlib-5.0, syntax_tools-2.0

# diameter-2.7

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of diameter-2.7
>
> erts-10.0, kernel-3.2, ssl-9.0, stdlib-5.0

# edoc-1.5

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of edoc-1.5
>
> 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

- Only minor internal changes.

  Own Id: OTP-19964

> #### 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.7

## Improvements and New Features

- Vendor dependencies and OpenVEX statements in the otp repository is now
  scanned for vulnerabilities.

  Own Id: OTP-19652
  Related Id(s): PR-9790

- Improved name consistency of EPMD protocol messages in documentation and code.
  Renamed `PORT_PLEASE2_REQ` to `PORT2_REQ` and added prefix `EPMD_`.

  Own Id: OTP-19734
  Related Id(s): GH-10071, PR-10078

## 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-17.0

## Fixed Bugs and Malfunctions

- For a function such as the following:

      bar(S0) ->
          S1 = setelement(8, S0, a),
          S2 = setelement(7, S1, b),
          setelement(5, S2, c).

  the compiler would keep all of the calls to `setelement/3` and emit extra
  unnecessary `set_tuple_element` instructions.

  This has been corrected so that the compiler will never emit code that uses
  the `set_tuple_element` instruction. In a future release, support for the
  `set_tuple_element` will be removed from the runtime system.

  Own Id: OTP-19751
  Related Id(s): GH-10125, PR-10144

- Improved the handling of the logging directory for the start script on
  Unix-like systems, so that it no longer crashes when `$ROOTDIR/log` is not
  writable.

  Own Id: OTP-19874
  Related Id(s): GH-10341, PR-10348

- The `-nocookie` option for `erl` is now documented.

  Own Id: OTP-19935
  Related Id(s): PR-10549

## Improvements and New Features

- The exported name space of the beam executable has been cleaned to only expose
  symbols of documented interfaces like NIF and driver APIs. This will avoid
  accidental name clashes with for example our statically linked variants of
  PCRE2 and ZSTD. NIFs and drivers that abuse undocumented internal interfaces
  will fail to load due to this change.

  Own Id: OTP-19643
  Related Id(s): PR-9864

- Vendor dependencies and OpenVEX statements in the otp repository is now
  scanned for vulnerabilities.

  Own Id: OTP-19652
  Related Id(s): PR-9790

- Improved name consistency of EPMD protocol messages in documentation and code.
  Renamed `PORT_PLEASE2_REQ` to `PORT2_REQ` and added prefix `EPMD_`.

  Own Id: OTP-19734
  Related Id(s): GH-10071, PR-10078

- The JIT now generates better code for matching or creating binaries with
  multiple little-endian segments.

  Own Id: OTP-19747
  Related Id(s): PR-10126

  *** HIGHLIGHT ***

- In the documentation for the `compile` module, a section has been added with
  recommendations for implementors of languages running on the BEAM.
  Documentation has also been added for the `to_abstr`, `to_exp`, and
  `from_abstr` options.

  The documentation for erlc now lists `.abstr` as one of the supported
  options.

  When compiling with the `to_abstr` option, the resulting `.abstr` file now
  retains any `-doc` attributes present in the source code.

  Own Id: OTP-19784
  Related Id(s): PR-10230, PR-10234

  *** HIGHLIGHT ***

- Native records as described in EEP-79 has been implemented.

  A native record is a data structure similar to the traditional tuple-based
  records, except that is a true data type.

  Native records are considered experimental in Erlang/OTP 29 and possibly also
  in Erlang/OTP 30, meaning that their behavior may change, potentially
  requiring updates to applications that use them.

  Own Id: OTP-19785
  Related Id(s): PR-10617

  *** HIGHLIGHT ***

- Task stealing between schedulers has been further optimized.

  Own Id: OTP-19793
  Related Id(s): PR-9984

- The guard BIF `is_integer/3` has been added. It follows the design of the
  original EEP-16, only changing the name from `is_between` to `is_integer`.
  This BIF takes in 3 parameters, `Term`, `LowerBound`, and `UpperBound`.

  It returns `true` if `Term`, `LowerBound`, and `UpperBound` are all integers,
  and `LowerBound =< Term =< UpperBound`; otherwise, it returns false.

  Example:

      1> I = 42.
      2> is_integer(I, 0, 100).
      true

  Own Id: OTP-19809
  Related Id(s): PR-10276

  *** HIGHLIGHT ***

- Calls to `trace:info(_, {M,F,A}, Item)`, with `Item` as `call_time`,
  `call_memory`, or `all`, will no longer block all scheduler threads from
  running.

  Own Id: OTP-19811
  Related Id(s): PR-10207

- Full support for SCTP in socket. Not (yet) supported for FreeBSD.

  Own Id: OTP-19834

- In the default code path for the Erlang system, the current working directory
  (`.`) is now in the last position instead of the first.

  Own Id: OTP-19842
  *** HIGHLIGHT ***

  *** POTENTIAL INCOMPATIBILITY ***

- Tools such as the debugger, `beam_lib`, and `xref` no longer support BEAM
  files created before OTP 13B.

  Own Id: OTP-19906
  Related Id(s): PR-10519

- Optimized ETS named table lookup scalability by replacing read locks with
  lockless atomic operations.

  Own Id: OTP-19919
  Related Id(s): PR-7118

- Removed the undocumented `dyn_erl` utility.

  Own Id: OTP-19933
  Related Id(s): PR-10573

- Added zstd:flush/2 for flushing compressed data without closing the
  compression context.

  Own Id: OTP-19936
  Related Id(s): GH-10345, PR-10511

- While the iteration for maps is undefined, it is now guaranteed that all ways
  of iterating over maps provides the elements in the same order. That is, all
  of the following ways of iterating will produce the elements in the same
  order:

  - maps:keys/1
  - maps:values/1
  - maps:to_list/1
  - `maps:to_list(maps:iterator(M))`
  - Map comprehension: `{K,V} || K := V <- M`

  Own Id: OTP-19963
  Related Id(s): PR-10626

- Improved the performance of code loading.

  Own Id: OTP-19966
  Related Id(s): PR-10615

> #### Full runtime dependencies of erts-17.0
>
> kernel-9.0, sasl-3.3, stdlib-4.1

# et-1.8

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### 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.11

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of eunit-2.11
>
> erts-9.0, kernel-5.3, stdlib-6.0

# ftp-1.3

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### 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.6

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of inets-9.6
>
> 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.16

## Improvements and New Features

- The `jinterface` build now honors `SOURCE_DATE_EPOCH` for deterministic build
  of `OtpErlang.jar`.

  Own Id: OTP-19956
  Related Id(s): PR-10556

# kernel-11.0

## Fixed Bugs and Malfunctions

- Fixed (`inet`) module selection when calling (`gen_tcp`) listen and connect
  and (`gen_udp`) open. Depending on the order of the options, the module option
  (`tcp_module` or `udp_module`) was sometimes ignored.

  Own Id: OTP-19695
  Related Id(s): GH-9822, PR-10013

  *** POTENTIAL INCOMPATIBILITY ***

- The TCP/UDP compatibility layer has been fixed so that `inet_backend = socket`
  now supports socket options `reuseport` and `reuseport_lb` for `gen_tcp` and
  `gen_udp`.

  Own Id: OTP-19917
  Related Id(s): PR-10514

## Improvements and New Features

- Added an option to set the `erl_boot_server` listen port.

  Own Id: OTP-19708
  Related Id(s): PR-9894

- The memory footprint of some supervisors has been reduced by purging obsoleted
  data when the supervisor is transitioning to and from hibernation.

  Own Id: OTP-19713
  Related Id(s): PR-9866

- Improved name consistency of EPMD protocol messages in documentation and code.
  Renamed `PORT_PLEASE2_REQ` to `PORT2_REQ` and added prefix `EPMD_`.

  Own Id: OTP-19734
  Related Id(s): GH-10071, PR-10078

- The legacy `and` and `or` operators have been replaced with `andalso` and
  `orelse`.

  Own Id: OTP-19744
  Related Id(s): PR-10114, PR-10554, PR-10568, PR-10579, PR-10585,
  PR-10598

- Refactored a `kernel_load_completed` clause for conciseness.

  Own Id: OTP-19786
  Related Id(s): PR-10134

- Full support for SCTP in socket. Not (yet) supported for FreeBSD.

  Own Id: OTP-19834

- In the default code path for the Erlang system, the current working directory
  (`.`) is now in the last position instead of the first.

  Own Id: OTP-19842
  *** HIGHLIGHT ***

  *** POTENTIAL INCOMPATIBILITY ***

> #### Full runtime dependencies of kernel-11.0
>
> crypto-5.0, erts-17.0, sasl-3.0, stdlib-7.0

# megaco-4.9

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of megaco-4.9
>
> 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.26

## Improvements and New Features

- `mnesia` now has new functions `select_reverse/1-6` supporting iteration over
  tables in reverse order.

  Own Id: OTP-19611
  Related Id(s): GH-8993, PR-9475

- The `mnesia_registry` module has been removed.

  Own Id: OTP-19807
  Related Id(s): PR-7315

> #### Full runtime dependencies of mnesia-4.26
>
> erts-9.0, kernel-5.3, stdlib-5.0

# observer-2.19

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of observer-2.19
>
> erts-15.0, et-1.5, kernel-10.0, runtime_tools-2.1, stdlib-5.0, wx-2.3

# odbc-2.17

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of odbc-2.17
>
> erts-6.0, kernel-3.0, stdlib-2.0

# os_mon-2.12

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of os_mon-2.12
>
> erts-14.0, kernel-9.0, sasl-4.2.1, stdlib-5.0

# parsetools-2.8

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of parsetools-2.8
>
> erts-6.0, kernel-3.0, stdlib-3.4

# public_key-1.21

## Improvements and New Features

- The legacy `and` and `or` operators have been replaced with `andalso` and
  `orelse`.

  Own Id: OTP-19744
  Related Id(s): PR-10114, PR-10554, PR-10568, PR-10579, PR-10585,
  PR-10598

- Added an option for relaxed encoding of certificates, to allow some values to
  be empty. This may be used by other applications for interoperability reasons.
  This option is not used by the `ssl` application.

  Own Id: OTP-19822
  Related Id(s): PR-10033

> #### Full runtime dependencies of public_key-1.21
>
> asn1-5.0, crypto-5.8, erts-13.0, kernel-8.0, stdlib-4.0

# reltool-1.1

## Improvements and New Features

- Removed the undocumented `dyn_erl` utility.

  Own Id: OTP-19933
  Related Id(s): PR-10573

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of reltool-1.1
>
> erts-15.0, kernel-9.0, sasl-4.2.1, stdlib-5.0, tools-2.6.14, wx-2.3

# runtime_tools-2.4

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of runtime_tools-2.4
>
> erts-16.0, kernel-10.0, mnesia-4.12, stdlib-6.0

# sasl-4.4

## Fixed Bugs and Malfunctions

- UNC paths are now handled on Windows.

  Own Id: OTP-19949
  Related Id(s): PR-10601

## Improvements and New Features

- Removed the undocumented `dyn_erl` utility.

  Own Id: OTP-19933
  Related Id(s): PR-10573

> #### Full runtime dependencies of sasl-4.4
>
> erts-15.0, kernel-6.0, stdlib-4.0, tools-2.6.14

# snmp-5.21

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of snmp-5.21
>
> asn1-5.4, crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12,
> runtime_tools-1.8.14, stdlib-5.0

# ssh-5.5

## Improvements and New Features

- Use KEX strict extension names as specified in draft-ietf-sshm-strict-kex-00.
  Pre standard names are still supported.

  Own Id: OTP-19709
  Related Id(s): PR-10115

- Added an 'alive' option to detect and terminate dead SSH connections.
  Functionally equivalent to OpenSSH's ClientAlive*/ServerAlive* settings.

  Own Id: OTP-19750
  Related Id(s): PR-10372, PR-9125

- `ssh:stop_deamon` now uses `supervisor:stop` for shutting down daemons. With
  this change, the scenario when `ssh:stop_daemon` is called for a non-existing
  process results in calling process exiting. Previously an error tuple was
  returned (which was not documented).

  Own Id: OTP-19801
  Related Id(s): PR-10253

  *** POTENTIAL INCOMPATIBILITY ***

- The default key exchange algorithm is now mlkem768x25519-sha256, a hybrid
  quantum-resistant algorithm combining ML-KEM-768 with X25519. This provides
  protection against both classical and quantum computer attacks while
  maintaining backward compatibility through automatic fallback to other
  algorithms when peers don't support it.

  Own Id: OTP-19965
  Related Id(s): PR-10656

  *** HIGHLIGHT ***

  *** POTENTIAL INCOMPATIBILITY ***

> #### Full runtime dependencies of ssh-5.5
>
> crypto-5.7, erts-14.0, kernel-10.3, public_key-1.6.1, runtime_tools-1.15.1,
> stdlib-8.0

# ssl-11.5.2

## Improvements and New Features

- The legacy `and` and `or` operators have been replaced with `andalso` and
  `orelse`.

  Own Id: OTP-19744
  Related Id(s): PR-10114, PR-10554, PR-10568, PR-10579, PR-10585,
  PR-10598

> #### Full runtime dependencies of ssl-11.5.2
>
> crypto-5.8, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.18.3,
> runtime_tools-1.15.1, stdlib-7.0

# stdlib-8.0

## Fixed Bugs and Malfunctions

- Fixed an issue in digraph_utils:roots/1 where roots could be missed in some
  cases.

  Own Id: OTP-19932
  Related Id(s): PR-10510

## Improvements and New Features

- Error return values from functions in `zip` now also specify which file in
  the archive the error belongs to.

  Own Id: OTP-19663
  Related Id(s): PR-9899

- The legacy `and` and `or` operators have been replaced with `andalso` and
  `orelse`.

  Own Id: OTP-19744
  Related Id(s): PR-10114, PR-10554, PR-10568, PR-10579, PR-10585,
  PR-10598

- The undocumented and unsupported function lists:zf/2 is now deprecated.

  Own Id: OTP-19783
  Related Id(s): PR-10161

- Native records as described in EEP-79 has been implemented.

  A native record is a data structure similar to the traditional tuple-based
  records, except that is a true data type.

  Native records are considered experimental in Erlang/OTP 29 and possibly also
  in Erlang/OTP 30, meaning that their behavior may change, potentially
  requiring updates to applications that use them.

  Own Id: OTP-19785
  Related Id(s): PR-10617

  *** HIGHLIGHT ***

- The new `supervior:stop/1,2` functions can be used to manage the dynamic parts
  of a supervisor tree in an application from outside the tree but in the same
  application.

  Own Id: OTP-19800
  Related Id(s): PR-9209

- Added a new constructor array:from/2.

  Own Id: OTP-19815
  Related Id(s): PR-10304

- There are new functions for random permutation of a list: rand:shuffle/1 and
  rand:shuffle_s/2. They are inspired by a suggestion and discussion on
  ErlangForums.

  Own Id: OTP-19826
  Related Id(s): PR-10281

  *** HIGHLIGHT ***

- The undocumented functions erl_eval:extended_parse_exprs/1 and
  erl_eval:extended_parse_term/1 will now be faster when called with a long
  list of tokens. (These functions are used by `qlc` and the shell.)

  Own Id: OTP-19838
  Related Id(s): PR-10338

- The `unicode` module now supports the Unicode 17 standard.

  Own Id: OTP-19853
  Related Id(s): PR-10382

- Added functions to `unicode` for recognizing whitespace and identifier.

  Own Id: OTP-19858
  Related Id(s): PR-10387

- The rand:bytes/1 and rand:bytes_s/2 functions have been optimized by
  implementing a new internal callback function that crypto:rand_seed_alg/1
  and crypto:alg_seed_alg_s/1 have been updated to use.

  A new algorithm `crypto_prng1`, which also takes advantage of this new
  internal callback, has been added to crypto:rand_seed_alg/2 and
  crypto:rand_seed_alg_s/2. It is much faster then the existing `crypto_aes`,
  in particular for generating bytes.

  Own Id: OTP-19882
  Related Id(s): PR-10453, OTP-19827

- There will now be a warning when exporting variables out of a subexpression.
  For example:

      case file:open(File, AllOpts = [write,{encoding,utf8}]) of
          {ok,Fd} ->
              {Fd,AllOpts}
      end

  To avoid the warning, this can be rewritten to:

      AllOpts = [write,{encoding,utf8}],
      case file:open(File, AllOpts) of
          {ok,Fd} ->
              {Fd,AllOpts}
      end

  The warning can be suppressed by giving option `nowarn_export_var_subexpr` to
  the compiler.

  Own Id: OTP-19898
  Related Id(s): PR-9134

  *** HIGHLIGHT ***

- There are new functions in the shell for returning process information.

  The `pi/1` function is shortcut for erlang:process_info/1. The `pi/3`
  function takes the three numbers from a pid, constructs a pid, and calls
  `process_info/1`.

  Examples:

      1> pi(<0.90.0>).
      [{current_function,{c,pinfo,1}},
      {initial_call,{erlang,apply,2}},
      {status,running},
      ...
      2> pi(0, 90, 0).
      [{current_function,{c,pinfo,1}},
      {initial_call,{erlang,apply,2}},
      {status,running},
      ...

  Own Id: OTP-19903
  Related Id(s): PR-10422

- Tools such as the debugger, `beam_lib`, and `xref` no longer support BEAM
  files created before OTP 13B.

  Own Id: OTP-19906
  Related Id(s): PR-10519

- The `calendar` module has been updated to use the much faster than before
  Neri-Schneider algorithm for Gregorian calendar calculations, and been
  extended to handle negative years.

  Own Id: OTP-19912
  Related Id(s): PR-10449

- `m:graph` is a new module that is a functional equivalent of the `digraph`
  and `digraph_utils` modules.

  Own Id: OTP-19922
  Related Id(s): PR-10532

- Before Erlang/OTP 29, attempting to bind variables in a comprehension would
  compile successfully but fail at runtime. Example:

      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      ok
      2> fh(lists:seq(1, 10)).
      * exception error: bad filter 2614250

  In Erlang/OTP 29, attempting to bind a variable in a comprehension will fail
  by default:

      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      * 5:14: matches using '=' are not allowed in comprehension qualifiers
      unless the experimental 'compr_assign' language feature is enabled.
      With 'compr_assign' enabled, a match 'P = E' will behave as a
      strict generator 'P <-:- [E]'."

  However, this example will work as expected if the `compr_assign` feature is
  enabled when starting the runtime system:

      $ erl -enable-feature compr_assign
      . . .
      1> fh(List) -> [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0].
      ok
      2> fh(lists:seq(1, 10)).
      [2614250]

  Here is another example how `compr_assign` can be used:

      -module(example).
      -feature(compr_assign, enable).
      -export([cat/1]).

      cat(Files) ->
          [Char || F <- Files,
                   {ok, Bin} = file:read_file(F),
                   Char <- unicode:characters_to_list(Bin)].

  Own Id: OTP-19927
  Related Id(s): PR-9153

  *** HIGHLIGHT ***

  *** POTENTIAL INCOMPATIBILITY ***

- Removed the undocumented `dyn_erl` utility.

  Own Id: OTP-19933
  Related Id(s): PR-10573

- The functions erl_tar:add/3 and erl_tar:add/4 now accepts the
  `{mode,Mode}` option for setting the permission of the file.

  Own Id: OTP-19934
  Related Id(s): PR-10524

- Added zstd:flush/2 for flushing compressed data without closing the
  compression context.

  Own Id: OTP-19936
  Related Id(s): GH-10345, PR-10511

- There will now be a warning when using the `catch` operator, which has been
  deprecated for a long time.

  It is recommended to instead use `try`...`catch` but is also possible to
  disable the warning by using the `nowarn_deprecated_catch` option.

  Own Id: OTP-19938
  Related Id(s): PR-10421

  *** HIGHLIGHT ***

- Multi-valued comprehensions according to EEP 78 has been implemented.

  Example:

      > [I, -I || I <- lists:seq(1, 5)].
      [1,-1,2,-2,3,-3,4,-4,5,-5]

  Own Id: OTP-19942
  Related Id(s): PR-9374

  *** HIGHLIGHT ***

- There will now be a warning for matches that unify constructors, such as the
  following:

      m({a,B} = {Y,Z}) -> . . .

  Such a match can be rewritten to:

      m({a=Y,B=B}) -> . . .

  The compiler option `nowarn_match_alias_pats` can be used to disable the
  warning.

  Own Id: OTP-19943
  Related Id(s): PR-10433

  *** HIGHLIGHT ***

> #### Full runtime dependencies of stdlib-8.0
>
> compiler-5.0, crypto-4.5, erts-16.0.3, kernel-10.0, sasl-3.0,
> syntax_tools-3.2.1

# syntax_tools-4.1

## Improvements and New Features

- The legacy `and` and `or` operators have been replaced with `andalso` and
  `orelse`.

  Own Id: OTP-19744
  Related Id(s): PR-10114, PR-10554, PR-10568, PR-10579, PR-10585,
  PR-10598

- Multi-valued comprehensions according to EEP 78 has been implemented.

  Example:

      > [I, -I || I <- lists:seq(1, 5)].
      [1,-1,2,-2,3,-3,4,-4,5,-5]

  Own Id: OTP-19942
  Related Id(s): PR-9374

  *** HIGHLIGHT ***

> #### Full runtime dependencies of syntax_tools-4.1
>
> compiler-9.0, erts-16.0, kernel-10.3, stdlib-8.0

# tftp-1.3

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of tftp-1.3
>
> erts-6.0, kernel-6.0, stdlib-5.0

# tools-4.2

## Fixed Bugs and Malfunctions

- Fixed "unbalanced parenthesis" issue when pressing TAB in emacs erlang shell.

  Own Id: OTP-19921
  Related Id(s): GH-8569, PR-10642

## Improvements and New Features

- Tools such as the debugger, `beam_lib`, and `xref` no longer support BEAM
  files created before OTP 13B.

  Own Id: OTP-19906
  Related Id(s): PR-10519

> #### Full runtime dependencies of tools-4.2
>
> compiler-8.5, erts-15.0, erts-15.0, kernel-10.0, runtime_tools-2.1, stdlib-6.0

# wx-2.6

## Improvements and New Features

- Vendor dependencies and OpenVEX statements in the otp repository is now
  scanned for vulnerabilities.

  Own Id: OTP-19652
  Related Id(s): PR-9790

- Documentation about how to validate the SBOM using sigstore has been added.

  Own Id: OTP-19766
  Related Id(s): GH-10151, PR-10187

> #### Full runtime dependencies of wx-2.6
>
> erts-12.0, kernel-8.0, stdlib-5.0

# xmerl-2.2

## Improvements and New Features

- Only minor internal changes.

  Own Id: OTP-19964

> #### Full runtime dependencies of xmerl-2.2
>
> erts-6.0, kernel-8.4, stdlib-2.5

# Thanks to

Alexandre Rodrigues, Andreas Hasselberg, Bentheburrito, Bernhard M. Wiedemann,
Daniel Gorin, Daniel Kukula, dependabotbot, Eksperimental,
erlang-bot-appbot, felipe stival, Fernando Areias, Ievgen Pyrogov, Ilya
Averyanov, Ilya Klyuchnikov, Jan Uhlig, Johannes Christ, Jonatan Männchen, José
Valim, Loïc Hoguin, loscher, Maria Scott, Marko Mindek, matt, Mend Renovate,
Michael Daniels, Michal Muskala, Olexandr88, Paul Guyot, Paulo F. Oliveira,
Paulo Tomé, Preet, Richard Carlsson, Robert Ismo, Robin Morisset, Sam Weaver,
Sébastien Saint-Sevin, Simon Cornish, Stefan Grundmann, Takeru Ohta, Vadim
Yanitskiy, Vance Shipley, Wade Mealing, Wei Huang, yagogarea, Zabrane, ???



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-announce/attachments/20260211/3ebf8220/attachment-0001.htm>


More information about the erlang-announce mailing list