Erlang/OTP 22.0

This release of Erlang/OTP can be built from source or installed using pre-built packages for your OS or third-party tools (such as kerl or asdf).

docker run -it erlang:22.0

Highlights #

OTP-13397
Application(s):
erts

Add support for Erlang Distribution protocol to split the payload of large signals into several fragments. This allows other processes to communicate uninterrupted during the transmission of these signals.

OTP-14831
Application(s):
erts, kernel

A simple socket API is provided through the socket module. This is a low level API that does *not* replace gen_[tcp|udp|sctp]. It is intended to *eventually* replace the inet driver, but not the high level gen-modules (gen_tcp, gen_udp and gen_sctp). It also provides a basic API that facilitates the implementation of other protocols, that is TCP, UDP and SCTP.

Known issues are; No support for the Windows OS (currently).

OTP-14894
Application(s):
compiler
Related Id(s):
ERL-714

The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible.

Most noticeable is that the binary matching optimizations are now applicable in many more circumstances than before.

Another noticeable change is that type optimizations are now applied across local function calls, and will remove a lot more redundant type tests than before.

OTP-15055
Application(s):
ssl

Use new logger API in ssl. Introduce log levels and verbose debug logging for SSL.

OTP-15128
Application(s):
erts, stdlib

ETS option write_concurrency now also affects and improves the scalability of ordered_set tables. The implementation is based on a data structure called contention adapting search tree, where the lock granularity adapts to the actual amount of concurrency exploited by the applications in runtime.

OTP-15439
Application(s):
erts

The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. In OTP 22, length/1 will yield when called with long lists.

OTP-15456
Application(s):
compiler

All compiler options that can be given in the source file can now also be given in the option list or from the command line for erlc.

Specifically, the option {nowarn_deprecated_function,MFAs} was only recognized when given in the file with the attribute -compile(). The option {nowarn_unused_function,FAs} was incorrectly documented to only work in a file, but it also worked when given in the option list.

OTP-15483
Application(s):
ssl
Related Id(s):
ERL-924

Add new API function str_to_suite/1, cipher_suites/3 (list cipher suites as rfc or OpenSSL name strings) and suite_to_openssl_str/1

OTP-15575
Application(s):
tools

The cover tool now uses the counters module instead of ets for updating the counters for how many times a line has been executed. By default, Cover will work with distributed nodes, but a new function cover:local_only/0 allows running the Cover in a restricted but faster local-only mode.

The increase in speed will vary depending on the type of code being cover-compiled, but as an example, the compiler test suite runs more than twice as fast with the new Cover.

OTP-15591
Application(s):
ssl

Basic support for TLS 1.3 Server for experimental use. The client is not yet functional, for more information see the Standards Compliance chapter of the User's Guide.

OTP-15596
Application(s):
erts, hipe, otp

In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are:

There are new BEAM instructions for binary matching that the HiPE native code compiler does not support.

The new optimizations in the Erlang compiler create new combination of instructions that HiPE currently does not handle correctly.

If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code.

OTP-15640
Application(s):
erts

Added the NIF function enif_term_type, which helps avoid long sequences of enif_is_xyz by returning the type of the given term. This is especially helpful for NIFs that serialize terms, such as JSON encoders, where it can improve both performance and readability.

OTP-15644
Application(s):
crypto
Related Id(s):
OTP-14732 , OTP-15451 , PR-1857 , PR-2068 , PR-2095

*** POTENTIAL INCOMPATIBILITY ***

A new API is implemented in crypto. See the CRYPTO user's guide, chapter New and Old API for more information.

The old api with the crypto:block_* and crypto:stream_* interfaces are kept for compatibility, but implemented with the new api. Please note that since the error checking is more thorough, there might be arguments with for example faulty lengths that are no longer accepted.

OTP-15655
Application(s):
crypto
Related Id(s):
ERL-864 , PR-2173 , PR-2186

The new hash_info/1 and cipher_info/1 functions returns maps with information about the hash or cipher in the argument.

OTP-15691
Application(s):
snmp
Related Id(s):
ERIERL-324

[snmp|agent] Add a get-mechanism callback module (and a corresponding behaviour). The agent calls this module to handle each get (get, get-next and get-bulk) request.

OTP-15715
Application(s):
compiler, erts

Internal documentation has now been added to the *Erts* and *Compiler* applications.

The internal documents for *Erts* describe miscellaneous interesting implementation details. Those details can change at any time.

The internal documentation for *Compiler* documents the API for the Core Erlang modules. While we will not change those APIs without good reason, we don't give the same guarantees about backward compatibility as for the rest of the APIs in OTP.

Potential Incompatibilities #

OTP-14865
Application(s):
ssl

TLS-1.0, TLS-1.1 and DTLS-1.0 are now considered legacy and not supported by default

OTP-15381
Application(s):
stdlib

The gen_* behaviours have been changed so that if logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report.

To accomplish this the format of "System Events" as defined in the man page for sys has been clarified and cleaned up, a new function sys:get_log/1 has been added, and sys:get_debug/3 has been deprecated. Due to these changes, code that relies on the internal badly documented format of "System Events", need to be corrected.

OTP-15563
Application(s):
compiler, stdlib
Related Id(s):
ERL-845 , OTP-15562

Do not allow function specifications for functions residing in other modules.

OTP-15571
Application(s):
reltool

A new element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}.

This supports the use of {rel, Name, Vsn, RelApps, [{load_dot_erlang, false}]} to prevent the boot script from running the .erlang file.

The incompatibilities are as follows:

* The return from reltool:get_config/1 and reltool:get_config/3 includes the new rel tuple for all releases where the load_dot_erlang option is set to false.
* The return from reltool:get_config/3 includes the new rel tuple for ALL releases if the InclDefs parameter is set to true.

OTP-15621
Application(s):
erl_interface, otp

The limited support for VxWorks is deprecated as of OTP 22, and will be removed in OTP 23.

OTP-15622
Application(s):
erl_interface

The old legacy erl_interface library (functions with prefix erl_) is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library. Reasonably new gcc compilers will issue deprecation warnings. In order to disable these warnings, define the macro EI_NO_DEPR_WARN.

OTP-15644
Application(s):
crypto
Related Id(s):
OTP-14732 , OTP-15451 , PR-1857 , PR-2068 , PR-2095

*** HIGHLIGHT ***

A new API is implemented in crypto. See the CRYPTO user's guide, chapter New and Old API for more information.

The old api with the crypto:block_* and crypto:stream_* interfaces are kept for compatibility, but implemented with the new api. Please note that since the error checking is more thorough, there might be arguments with for example faulty lengths that are no longer accepted.

OTP-15677
Application(s):
crypto

Fixed a bug in error return for crypto:poly1305/2. It returned the atom notsup instead of the exception notsup.

OTP-15678
Application(s):
crypto

The cipher chacha20 was introduced in OpenSSL 1.1.0. However, it could in a very odd situation, fail for versions less than OpenSSL 1.1.0d. It is therefore disabled for those versions.

OTP-15692
Application(s):
kernel
Related Id(s):
PR-2170

In OTP-21.3, a warning was introduced for duplicated applications/keys in configuration. This warning would be displayed both when the configuration was given as a file on system start, and during runtime via application:set_env/1,2.

The warning is now changed to a badarg exception in application:set_env/1,2. If the faulty configuration is given in a configuration file on system start, the startup will fail.

OTP-15712
Application(s):
erl_interface
Related Id(s):
OTP-15774

Added support to receive, decode, encode and send both bit strings and export funs (fun M:F/A).

New functions ei_decode_bitstring and ei_encode_bitstring have been added in order to decode and encode bit strings where the number of bits is not necessary divisible by 8 (a whole number of bytes). The existing functions ei_decode_fun and ei_encode_fun can now also handle export funs.

Before this change, bit strings and export funs sent to an erl_interface c-node were encoded using an undocumented fallback tuple format. For bit strings {Binary,BitsInLastByte} and for export funs {M,F}. Existing c-node implementations expecting these tuples must be changed to instead use ei_decode_bitstring and ei_decode_fun. As a temporary solution you can also build erl_interface with macro EI_COMPAT=21 or call ei_set_compat_rel(21) to receive the old fallback tuples.

OTP-15774
Application(s):
jinterface
Related Id(s):
OTP-15712

Added support to receive export funs (fun M:F/A).

Before this change, export funs sent to a jinterface node were encoded using an undocumented fallback tuple format {M,F}. Existing jinterface implementations expecting these tuples must be changed to instead use the existing OtpErlangExternalFun class.

OTP-15779
Application(s):
dialyzer

The format of the raw analysis result tagged with fun_app_args is changed to {fun_app_args, [ArgNs, Args, Type]}.

OTP-15804
Application(s):
mnesia
Related Id(s):
PR-2216

Include stacktrace in exception if a dirty activity errors, thus if user have matched on the error thrown it may not match any more.

OTP-22.0 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

OTP-14625
Application(s):
otp

Configure scripts in different OTP applications are now executed in parallel during the build of OTP.

OTP-15220
Application(s):
otp

Documented how atoms are ordered in the reference manual.

OTP-15596
Application(s):
erts, hipe, otp

*** HIGHLIGHT ***

In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are:

There are new BEAM instructions for binary matching that the HiPE native code compiler does not support.

The new optimizations in the Erlang compiler create new combination of instructions that HiPE currently does not handle correctly.

If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code.

OTP-15621
Application(s):
erl_interface, otp

*** POTENTIAL INCOMPATIBILITY ***

The limited support for VxWorks is deprecated as of OTP 22, and will be removed in OTP 23.

asn1-5.0.9 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

OTP-15697
Application(s):
asn1
Related Id(s):
PR-2159

Corrected problems with the following value definitions:

-- value of SEQUENCE OF CHOICE with extensions

-- value of CHOICE with extensions

-- DEFAULT used with OCTET STRING

Full runtime dependencies of asn1-5.0.9: erts-7.0, kernel-3.0, stdlib-2.0

common_test-1.17.3 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

OTP-15633
Application(s):
common_test, stdlib
Related Id(s):
PR-1787

Use ssh instead of rsh as the default remote shell.

Full runtime dependencies of common_test-1.17.3: compiler-6.0, crypto-3.6, debugger-4.1, erts-7.0, ftp-1.0.0, inets-6.0, kernel-4.0, observer-2.1, runtime_tools-1.8.16, sasl-2.4.2, snmp-5.1.2, ssh-4.0, stdlib-3.5, syntax_tools-1.7, tools-2.8, xmerl-1.3.8

compiler-7.4 #

OTP-15760
Application(s):
compiler, stdlib
Related Id(s):
ERL-907

record_info/2 is a pseudo-function that requires literal arguments known at compile time. Therefore, the following usage is illegal: fun record/info/2. The compiler would crash when during compilation of that kind of code. Corrected to issue a compilation error.

OTP-14894
Application(s):
compiler
Related Id(s):
ERL-714

*** HIGHLIGHT ***

The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible.

Most noticeable is that the binary matching optimizations are now applicable in many more circumstances than before.

Another noticeable change is that type optimizations are now applied across local function calls, and will remove a lot more redundant type tests than before.

OTP-15273
Application(s):
compiler
Related Id(s):
ERL-639

Funs are no longer created when they are only used locally, greatly improving the performance of named funs and "fun-wrapped" macros.

OTP-15456
Application(s):
compiler

*** HIGHLIGHT ***

All compiler options that can be given in the source file can now also be given in the option list or from the command line for erlc.

Specifically, the option {nowarn_deprecated_function,MFAs} was only recognized when given in the file with the attribute -compile(). The option {nowarn_unused_function,FAs} was incorrectly documented to only work in a file, but it also worked when given in the option list.

OTP-15563
Application(s):
compiler, stdlib
Related Id(s):
ERL-845 , OTP-15562

*** POTENTIAL INCOMPATIBILITY ***

Do not allow function specifications for functions residing in other modules.

OTP-15715
Application(s):
compiler, erts

*** HIGHLIGHT ***

Internal documentation has now been added to the *Erts* and *Compiler* applications.

The internal documents for *Erts* describe miscellaneous interesting implementation details. Those details can change at any time.

The internal documentation for *Compiler* documents the API for the Core Erlang modules. While we will not change those APIs without good reason, we don't give the same guarantees about backward compatibility as for the rest of the APIs in OTP.

OTP-15749
Application(s):
compiler, stdlib
Related Id(s):
ERL-904

There are new compiler options nowarn_removed and {nowarn_removed,Items} to suppress warnings for functions and modules that have been removed from OTP.

Full runtime dependencies of compiler-7.4: crypto-3.6, erts-9.0, hipe-3.12, kernel-4.0, stdlib-2.5

crypto-4.5 #

OTP-15677
Application(s):
crypto

*** POTENTIAL INCOMPATIBILITY ***

Fixed a bug in error return for crypto:poly1305/2. It returned the atom notsup instead of the exception notsup.

OTP-15678
Application(s):
crypto

*** POTENTIAL INCOMPATIBILITY ***

The cipher chacha20 was introduced in OpenSSL 1.1.0. However, it could in a very odd situation, fail for versions less than OpenSSL 1.1.0d. It is therefore disabled for those versions.

OTP-14461
Application(s):
crypto, stdlib
Related Id(s):
PR-1857

A new rand module algorithm, exro928ss (Xoroshiro928**), has been implemented. It has got a really long period and good statistical quality for all output bits, while still being only about 50% slower than the default algorithm.

The same generator is also used as a long period counter in a new crypto plugin for the rand module, algorithm crypto_aes. This plugin uses AES-256 to scramble the counter which buries any detectable statistical artifacts. Scrambling is done in chunks which are cached to get good amortized speed (about half of the default algorithm).

OTP-14732
Application(s):
crypto
Related Id(s):
PR-2068 , PR-2095

Crypto's single C-file is split into multiple files. The different coding styles in the different parts are unified into a single style.

OTP-15129
Application(s):
crypto, erts

Build configuration of the crypto application has been moved from the erts application into the crypto application.

OTP-15564
Application(s):
crypto
Related Id(s):
PR-2129

Adds two hash functions blake2b and blake2s (64 bit hash and 32 bit hash respectively). These are modern and standard hash functions used in blockchains and encrypted communication protocols. The hash functions are available in OpenSSL since version 1.1.1.

OTP-15644
Application(s):
crypto
Related Id(s):
OTP-14732 , OTP-15451 , PR-1857 , PR-2068 , PR-2095

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

A new API is implemented in crypto. See the CRYPTO user's guide, chapter New and Old API for more information.

The old api with the crypto:block_* and crypto:stream_* interfaces are kept for compatibility, but implemented with the new api. Please note that since the error checking is more thorough, there might be arguments with for example faulty lengths that are no longer accepted.

OTP-15655
Application(s):
crypto
Related Id(s):
ERL-864 , PR-2173 , PR-2186

*** HIGHLIGHT ***

The new hash_info/1 and cipher_info/1 functions returns maps with information about the hash or cipher in the argument.

OTP-15683
Application(s):
crypto

Obey additional OpenSSL configure flags when compiling the C-part of the CRYPTO application: no-bf, no-blake2, no-chacha, no-cmac, no-dh, no-dsa, no-md4, no-poly1305, no-rc2, no-rc4 and no-rmd160.

OTP-15771
Application(s):
crypto

A new function crypto:supports/1 is introduced. The single argument takes an atom as argument: hashes, public_keys, ciphers, macs, curves or rsa_opts. The return value is a list of supported algorithms.

The difference with the existing crypto:supports/0 is, apart from the argument and the return value, that the old function reports what is supported by the old api, and the new function reports algorithms in the new api.

Full runtime dependencies of crypto-4.5: erts-9.0, kernel-5.3, stdlib-3.4

debugger-4.2.7 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

Full runtime dependencies of debugger-4.2.7: compiler-5.0, erts-9.0, kernel-5.3, stdlib-3.4, wx-1.2

dialyzer-4.0 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

OTP-15135
Application(s):
dialyzer

By default Dialyzer inserts line breaks in types, contracts, and Erlang Code when formatting results. Use the new --no_indentation option to get the old behavior of not inserting line breaks.

OTP-15752
Application(s):
dialyzer

Use bit syntax in warnings instead of Core Erlang syntax, for readability.

OTP-15779
Application(s):
dialyzer

*** POTENTIAL INCOMPATIBILITY ***

The format of the raw analysis result tagged with fun_app_args is changed to {fun_app_args, [ArgNs, Args, Type]}.

Full runtime dependencies of dialyzer-4.0: compiler-7.0, erts-9.0, hipe-3.16.1, kernel-5.3, stdlib-3.4, syntax_tools-2.0, wx-1.2

edoc-0.11 #

OTP-15761
Application(s):
edoc, syntax_tools

Correct links in the documentation.

Full runtime dependencies of edoc-0.11: erts-6.0, inets-5.10, kernel-3.0, stdlib-2.5, syntax_tools-1.6.14, xmerl-1.3.7

eldap-1.2.8 #

OTP-15775
Application(s):
eldap

Fix dialyzer warnings in eldap when not matching the return value of ssl:close/1.

Full runtime dependencies of eldap-1.2.8: asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-2.0

erl_docgen-0.9.1 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

Full runtime dependencies of erl_docgen-0.9.1: edoc-0.7.13, erts-9.0, stdlib-3.4, xmerl-1.3.7

erl_interface-3.12 #

OTP-15773
Application(s):
erl_interface, erts

The vxworks configure has been updated to respect the environment CFLAGS.

OTP-15340
Application(s):
erl_interface, erts, megaco, odbc
Related Id(s):
OTP-14625

Minor adjustments made to build system for parallel configure.

OTP-15621
Application(s):
erl_interface, otp

*** POTENTIAL INCOMPATIBILITY ***

The limited support for VxWorks is deprecated as of OTP 22, and will be removed in OTP 23.

OTP-15622
Application(s):
erl_interface

*** POTENTIAL INCOMPATIBILITY ***

The old legacy erl_interface library (functions with prefix erl_) is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library. Reasonably new gcc compilers will issue deprecation warnings. In order to disable these warnings, define the macro EI_NO_DEPR_WARN.

OTP-15712
Application(s):
erl_interface
Related Id(s):
OTP-15774

*** POTENTIAL INCOMPATIBILITY ***

Added support to receive, decode, encode and send both bit strings and export funs (fun M:F/A).

New functions ei_decode_bitstring and ei_encode_bitstring have been added in order to decode and encode bit strings where the number of bits is not necessary divisible by 8 (a whole number of bytes). The existing functions ei_decode_fun and ei_encode_fun can now also handle export funs.

Before this change, bit strings and export funs sent to an erl_interface c-node were encoded using an undocumented fallback tuple format. For bit strings {Binary,BitsInLastByte} and for export funs {M,F}. Existing c-node implementations expecting these tuples must be changed to instead use ei_decode_bitstring and ei_decode_fun. As a temporary solution you can also build erl_interface with macro EI_COMPAT=21 or call ei_set_compat_rel(21) to receive the old fallback tuples.

erts-10.4 #

OTP-15535
Application(s):
erts
Related Id(s):
PR-2055

Do not allocate new bitstring/binary when an empty binary is appended.

OTP-15543
Application(s):
erts
Related Id(s):
PR-2089

Document that process_info(_, current_function) can return {current_function, undefined} in case of execution of native code.

OTP-15672
Application(s):
erts

Fixed bug in ets:select, ets:match and friends which could cause the table to remain fixated (as if ets:safe_fixtable had been called) after the call returned. This could happen for protected tables if another concurrent running process transferred table ownership to the process during its ets:select/match call. Ownership can be transferred using either ets:give_away or the heir table option.

OTP-15693
Application(s):
erts

Fixed a Windows-specific bug in file:list_dir/1 that caused it to misbehave on network shares.

OTP-15694
Application(s):
erts
Related Id(s):
ERL-863

Fixed bug when calling enif_whereis_* from NIF resource destructor. Symptoms could be emulator crash or hanging scheduler threads.

OTP-15698
Application(s):
erts

Fixed a bug in the error case of apply/3, where the exception would erroneously have an empty argument list in some cases.

OTP-15707
Application(s):
erts, stdlib

A bug has been fixed in the maps implementation that could cause a crash or memory usage to grow until the machine ran out of memory. This could happen when inserting a new key-value pair with a key K1 containing a binary B1 into a map M having a key K2 with a binary B2 if the following conditions were met:

-- B1 =/= B2

-- size(B1) >= 4294967296

-- size(B2) >= 4294967296

-- size(M) >= 32

-- (size(B1) rem 4294967296) == (size(B2) rem 4294967296)

-- the first (size(B1) rem 4294967296) bytes are the same both in B1 and B2

-- substituting B1 in K1 with B2 would create a term with the same value as K2

The root cause of the problem is that the maps implementation only hashed the first (X rem 4294967296) bytes of binaries so that different binaries could get the same hash value independently of the hash seed.

OTP-15708
Application(s):
erts

term_to_binary() and distributed sends will now throw a system_limit exception instead of producing erroneous results when trying to encode a binary larger than 4 GB.

OTP-15773
Application(s):
erl_interface, erts

The vxworks configure has been updated to respect the environment CFLAGS.

OTP-15788
Application(s):
erts

Fix configure to not enable PGO (profile guided optimizations) when linking of the PGO binary fails. For instance this happens when there is no gcov lib installed.

OTP-15791
Application(s):
erts

Fix bug on OpenBSD where sockets using active, true or active, N could cause the system to live lock. The bug was introduced in erts-10.2 (OTP-21.2).

OTP-13397
Application(s):
erts

*** HIGHLIGHT ***

Add support for Erlang Distribution protocol to split the payload of large signals into several fragments. This allows other processes to communicate uninterrupted during the transmission of these signals.

OTP-14831
Application(s):
erts, kernel

*** HIGHLIGHT ***

A simple socket API is provided through the socket module. This is a low level API that does *not* replace gen_[tcp|udp|sctp]. It is intended to *eventually* replace the inet driver, but not the high level gen-modules (gen_tcp, gen_udp and gen_sctp). It also provides a basic API that facilitates the implementation of other protocols, that is TCP, UDP and SCTP.

Known issues are; No support for the Windows OS (currently).

OTP-15011
Application(s):
erts
Related Id(s):
PR-2147

Added NIF functions enif_set_pid_undefined, enif_is_pid_undefined and enif_compare_pids.

OTP-15063
Application(s):
erts

Underutilized memory segments (carriers) can now move between all allocator instances, rather than just between instances of the same type, which greatly reduces memory usage in some scenarios.

OTP-15075
Application(s):
erts

The emulator will now mark free blocks in pooled carriers with madvise(2) + MADV_FREE (or similar), letting the OS reclaim the associated physical memory if necessary.

OTP-15095
Application(s):
erts

New ERL_NIF_SELECT_CANCEL feature added to enif_select in order to cancel (or "deselect") a read or write event on a previously selected file descriptor.

OTP-15128
Application(s):
erts, stdlib

*** HIGHLIGHT ***

ETS option write_concurrency now also affects and improves the scalability of ordered_set tables. The implementation is based on a data structure called contention adapting search tree, where the lock granularity adapts to the actual amount of concurrency exploited by the applications in runtime.

OTP-15129
Application(s):
crypto, erts

Build configuration of the crypto application has been moved from the erts application into the crypto application.

OTP-15195
Application(s):
erts
Related Id(s):
PR-1812

Anonymous functions that don't capture environment are now created at load-time instead of in run-time.

OTP-15211
Application(s):
erts
Related Id(s):
PR-1889

Optimize updates of maps with identical keys and values. E.g. in the example below the original Map will be reused as the return of the update.

1> Map = #{ a => b }. #{ a => b } 2> Map#{ a := b }.

OTP-15238
Application(s):
erts
Related Id(s):
PR-1803

Optimize binary:match/2 and binary:matches/2 to use memchr internally.

OTP-15261
Application(s):
erts

The runtime system used to terminate when a message larger than 2 Gb was passed over the distribution. The send operation will now instead throw a system_limit exception.

OTP-15336
Application(s):
erts, sasl
Related Id(s):
PR-1825

Change the first module called by erts to be named erl_init instead of otp_ring0. systools in sasl have been updated to reflect this change.

OTP-15340
Application(s):
erl_interface, erts, megaco, odbc
Related Id(s):
OTP-14625

Minor adjustments made to build system for parallel configure.

OTP-15349
Application(s):
erts
Related Id(s):
PR-2084

Two new NIF interface functions enif_select_read and enif_select_write. They are similar to existing enif_select but allow a custom event message as an argument.

OTP-15351
Application(s):
erts
Related Id(s):
ERL-749

The embedded copy of zlib has been updated from 1.2.8 to 1.2.11.

Note that this copy is only used as a fallback when the target platform doesn't provide any zlib development libraries. If your system provides zlib then it will be used even if it is older than 1.2.11.

OTP-15362
Application(s):
erts
Related Id(s):
PR-2127

New NIF function enif_make_monitor_term.

OTP-15427
Application(s):
erts

Appending lists (The ++ operator) will now yield properly on large inputs.

OTP-15439
Application(s):
erts

*** HIGHLIGHT ***

The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. In OTP 22, length/1 will yield when called with long lists.

OTP-15513
Application(s):
erts
Related Id(s):
ERL-773

Processes sending messages are now punished with a reduction cost based on message size. That is, a process sending a large message will yield earlier than before.

OTP-15581
Application(s):
erts
Related Id(s):
OTP-15580

The transitory emulator option +ztma true (introduced in OTP 21.3) has been removed.

OTP-15596
Application(s):
erts, hipe, otp

*** HIGHLIGHT ***

In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are:

There are new BEAM instructions for binary matching that the HiPE native code compiler does not support.

The new optimizations in the Erlang compiler create new combination of instructions that HiPE currently does not handle correctly.

If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code.

OTP-15610
Application(s):
erts

The termination behaviour of processes has changed to allow processes to yield while sending link exit/monitor down signals.

The erl crash dump has been expanded to now also include processes that are termeinating but have not yet terminated.

OTP-15611
Application(s):
erts, kernel

The dist messages EXIT, EXIT2 and MONITOR_DOWN have been updated with new versions that send the reason term as part of the payload of the message instead of as part of the control message.

The old versions are still present and can be used when communicating with nodes that don't support the new versions.

OTP-15612
Application(s):
erts

When sending messages, exit, exit2 and monitor down distributed signals, the process sending will now yield appropriately.

This means that a terminating process will yield and possibly be suspended on busy distribution entries while they are terminating. This means that any memory held by such processes will not be released until after all exit/monitor down signals have been sent.

OTP-15613
Application(s):
erts

All external pids/ports/refs created by erlang:list_to_pid/port/ref debug functions now compare equal to any other pid/port/ref with the same number from that node.

Before this change they compared differently because the node creation of the pid/port/ref did not compare equal to any real pid/port/ref creation.

This will mostly effect pids/ports/refs typed in the shell.

OTP-15615
Application(s):
erts, stdlib

The persistent_term functions put/2 and erase/1 are now yielding.

OTP-15617
Application(s):
erts

A new erlang:dist_ctrl_set_opt(DHandle, get_size, Value) option has been added. This option makes it possible to configure the distribution channel identified by DHandle so that erlang:dist_ctrl_get_data(DHandle) also returns the size of the data to pass over the channel.

OTP-15623
Application(s):
erts, stdlib
Related Id(s):
PR-2190

Previously, all ETS tables used centralized counter variables to keep track of the number of items stored and the amount of memory consumed. These counters can cause scalability problems (especially on big NUMA systems). This change adds an implementation of a decentralized counter and modifies the implementation of ETS so that ETS tables of type ordered_set with write_concurrency enabled use the decentralized counter. Experiments indicate that this change substantially improves the scalability of ETS ordered_set tables with write_concurrency enabled in scenarios with frequent ets:insert/2 and ets:delete/2 calls.

OTP-15631
Application(s):
erts

The iolist_size/1 function is now yielding which means that an Erlang/OTP system will be responsive even if the applications running on the system frequently call iolist_size/1 with large iolists.

OTP-15635
Application(s):
erts

A simple test suite for the net module has been added.

OTP-15640
Application(s):
erts

*** HIGHLIGHT ***

Added the NIF function enif_term_type, which helps avoid long sequences of enif_is_xyz by returning the type of the given term. This is especially helpful for NIFs that serialize terms, such as JSON encoders, where it can improve both performance and readability.

OTP-15674
Application(s):
erts
Related Id(s):
PR-2177

The last call optimization is now applied to BIFs. When calling a BIF in the tail position of a function, the return address and stack frame will now be discarded before calling the BIF. As a consequence of this change, the immediate caller of a tail-called BIF will no longer be available in stack backtraces.

OTP-15703
Application(s):
erts

Fix GC bug where distributed messages in a processes mailbox would cause extra GCs. This can be very expensive if there many messages in the mailbox.

OTP-15715
Application(s):
compiler, erts

*** HIGHLIGHT ***

Internal documentation has now been added to the *Erts* and *Compiler* applications.

The internal documents for *Erts* describe miscellaneous interesting implementation details. Those details can change at any time.

The internal documentation for *Compiler* documents the API for the Core Erlang modules. While we will not change those APIs without good reason, we don't give the same guarantees about backward compatibility as for the rest of the APIs in OTP.

OTP-15740
Application(s):
erts

The performance of non-bignum integer arithmetic has been improved.

OTP-15794
Application(s):
erts
Related Id(s):
PR-2219

The -remsh option to erl now automatically adds the local systems hostname to the target node if no nodename is given. e.g.

erl -name foo -remsh bar


erl -sname foo -remsh bar

Full runtime dependencies of erts-10.4: kernel-6.1, sasl-3.3, stdlib-3.5

hipe-3.19 #

OTP-15385
Application(s):
hipe
Related Id(s):
PR-1986

Add function hipe:erllvm_is_supported to check for the presences of a suitable version of the LLVM tool chain as well as supported hardware architecture. The old hipe:llvm_support_available has been removed.

OTP-15386
Application(s):
hipe
Related Id(s):
PR-1963

Fix hipe LLVM for FreeBSD and other non-linux unix to use /tmp/ instead of /dev/shm/.

OTP-15596
Application(s):
erts, hipe, otp

*** HIGHLIGHT ***

In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are:

There are new BEAM instructions for binary matching that the HiPE native code compiler does not support.

The new optimizations in the Erlang compiler create new combination of instructions that HiPE currently does not handle correctly.

If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code.

Full runtime dependencies of hipe-3.19: compiler-5.0, erts-9.3, kernel-5.3, stdlib-3.4, syntax_tools-1.6.14

inets-7.0.8 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

Full runtime dependencies of inets-7.0.8: erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, ssl-5.3.4, stdlib-3.5

jinterface-1.10 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

OTP-15774
Application(s):
jinterface
Related Id(s):
OTP-15712

*** POTENTIAL INCOMPATIBILITY ***

Added support to receive export funs (fun M:F/A).

Before this change, export funs sent to a jinterface node were encoded using an undocumented fallback tuple format {M,F}. Existing jinterface implementations expecting these tuples must be changed to instead use the existing OtpErlangExternalFun class.

kernel-6.4 #

OTP-15786
Application(s):
kernel
Related Id(s):
ERL-918

Fix so that when multiple -sname or -name are given to erl the first one is chosen. Before this fix distribution was not started at all when multiple name options were given.

OTP-15806
Application(s):
kernel

Fix inet_res configuration pointing to non-existing files to work again. This was broken in KERNEL-6.3 (OTP-21.3).

OTP-14831
Application(s):
erts, kernel

*** HIGHLIGHT ***

A simple socket API is provided through the socket module. This is a low level API that does *not* replace gen_[tcp|udp|sctp]. It is intended to *eventually* replace the inet driver, but not the high level gen-modules (gen_tcp, gen_udp and gen_sctp). It also provides a basic API that facilitates the implementation of other protocols, that is TCP, UDP and SCTP.

Known issues are; No support for the Windows OS (currently).

OTP-15491
Application(s):
kernel
Related Id(s):
PR-2019

Improved the documentation for the linger option.

OTP-15607
Application(s):
kernel
Related Id(s):
ERIERL-280

Global no longer tries more than once when connecting to other nodes.

OTP-15611
Application(s):
erts, kernel

The dist messages EXIT, EXIT2 and MONITOR_DOWN have been updated with new versions that send the reason term as part of the payload of the message instead of as part of the control message.

The old versions are still present and can be used when communicating with nodes that don't support the new versions.

OTP-15668
Application(s):
kernel
Related Id(s):
PR-2088

Kernel configuration parameter start_distribution = boolean() is added. If set to false, the system is started with all distribution functionality disabled. Defaults to true.

OTP-15692
Application(s):
kernel
Related Id(s):
PR-2170

*** POTENTIAL INCOMPATIBILITY ***

In OTP-21.3, a warning was introduced for duplicated applications/keys in configuration. This warning would be displayed both when the configuration was given as a file on system start, and during runtime via application:set_env/1,2.

The warning is now changed to a badarg exception in application:set_env/1,2. If the faulty configuration is given in a configuration file on system start, the startup will fail.

Full runtime dependencies of kernel-6.4: erts-10.2.5, sasl-3.0, stdlib-3.5

megaco-3.18.5 #

OTP-15262
Application(s):
megaco, runtime_tools
Related Id(s):
OTP-15129

Minor updates to build system necessary due to move of configuration of crypto application.

OTP-15340
Application(s):
erl_interface, erts, megaco, odbc
Related Id(s):
OTP-14625

Minor adjustments made to build system for parallel configure.

Full runtime dependencies of megaco-3.18.5: asn1-3.0, debugger-4.0, erts-7.0, et-1.5, kernel-3.0, runtime_tools-1.8.14, stdlib-2.5

mnesia-4.16 #

OTP-15550
Application(s):
mnesia
Related Id(s):
PR-2029

Optimize mnesia:read/1 if data have been written in the same transaction.

OTP-15689
Application(s):
mnesia
Related Id(s):
ERL-556 , PR-1695

Fixed bugs in table index plugin handling.

OTP-15588
Application(s):
mnesia
Related Id(s):
PR-2102

Optimized dumping of tables with plugin backends.

OTP-15804
Application(s):
mnesia
Related Id(s):
PR-2216

*** POTENTIAL INCOMPATIBILITY ***

Include stacktrace in exception if a dirty activity errors, thus if user have matched on the error thrown it may not match any more.

Full runtime dependencies of mnesia-4.16: erts-9.0, kernel-5.3, stdlib-3.4

observer-2.9.1 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

Full runtime dependencies of observer-2.9.1: erts-7.0, et-1.5, kernel-3.0, runtime_tools-1.8.14, stdlib-3.5, wx-1.2

odbc-2.12.4 #

OTP-15340
Application(s):
erl_interface, erts, megaco, odbc
Related Id(s):
OTP-14625

Minor adjustments made to build system for parallel configure.

Full runtime dependencies of odbc-2.12.4: erts-6.0, kernel-3.0, stdlib-2.0

os_mon-2.5 #

OTP-15770
Application(s):
os_mon
Related Id(s):
PR-2208

Fix typespec of cpu_sup:util().

OTP-14984
Application(s):
os_mon, snmp
Related Id(s):
OTP-15329

The application otp_mibs has been removed from OTP. Some of its components (mibs) have been moved to other apps (snmp), or removed completely (os_mon).

Full runtime dependencies of os_mon-2.5: erts-6.0, kernel-3.0, sasl-2.4, stdlib-2.0

public_key-1.6.7 #

OTP-15754
Application(s):
public_key
Related Id(s):
ERL-878

RSA options passed to crypto for encrypt and decrypt with public or private key.

OTP-15776
Application(s):
public_key

Fix dialyzer warnings caused by a faulty type specification for digest_type().

This change updates digest_type() and the functions operating with this argument type to accept both 'sha1' and 'sha' as digest_type().

OTP-13726
Application(s):
public_key

Add possibility to read PEM files encrypted with old PEM encryption using AES-256

OTP-15687
Application(s):
public_key
Related Id(s):
PR-2162

Relax decoding of certificates to so that "harmless" third party encoding errors may be accepted but not created by the public_key application. This adds acceptance of using an incorrect three character country code, the PKIX standard use two character country codes. It is also accepted that the country code is utf8 encoded but the specification says it should be ASCII.

Full runtime dependencies of public_key-1.6.7: asn1-3.0, crypto-3.8, erts-6.0, kernel-3.0, stdlib-3.5

reltool-0.8 #

OTP-15571
Application(s):
reltool

*** POTENTIAL INCOMPATIBILITY ***

A new element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}.

This supports the use of {rel, Name, Vsn, RelApps, [{load_dot_erlang, false}]} to prevent the boot script from running the .erlang file.

The incompatibilities are as follows:

* The return from reltool:get_config/1 and reltool:get_config/3 includes the new rel tuple for all releases where the load_dot_erlang option is set to false.
* The return from reltool:get_config/3 includes the new rel tuple for ALL releases if the InclDefs parameter is set to true.

Full runtime dependencies of reltool-0.8: erts-7.0, kernel-3.0, sasl-2.4, stdlib-3.4, tools-2.6.14, wx-1.2

runtime_tools-1.13.3 #

OTP-15262
Application(s):
megaco, runtime_tools
Related Id(s):
OTP-15129

Minor updates to build system necessary due to move of configuration of crypto application.

Full runtime dependencies of runtime_tools-1.13.3: erts-8.0, kernel-5.0, mnesia-4.12, stdlib-3.0

sasl-3.4 #

OTP-15336
Application(s):
erts, sasl
Related Id(s):
PR-1825

Change the first module called by erts to be named erl_init instead of otp_ring0. systools in sasl have been updated to reflect this change.

Full runtime dependencies of sasl-3.4: erts-10.2, kernel-5.3, stdlib-3.4, tools-2.6.14

snmp-5.3 #

OTP-14984
Application(s):
os_mon, snmp
Related Id(s):
OTP-15329

The application otp_mibs has been removed from OTP. Some of its components (mibs) have been moved to other apps (snmp), or removed completely (os_mon).

OTP-15691
Application(s):
snmp
Related Id(s):
ERIERL-324

*** HIGHLIGHT ***

[snmp|agent] Add a get-mechanism callback module (and a corresponding behaviour). The agent calls this module to handle each get (get, get-next and get-bulk) request.

Full runtime dependencies of snmp-5.3: crypto-3.3, erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, stdlib-2.5

ssh-4.7.7 #

OTP-15673
Application(s):
ssh

SSH uses the new crypto API.

Full runtime dependencies of ssh-4.7.7: crypto-4.5, erts-9.0, kernel-5.3, public_key-1.6.1, stdlib-3.4.1

ssl-9.3 #

OTP-14792
Application(s):
ssl

The distribution handshake with TLS distribution (inet_tls_dist) does now utilize the socket option {nodelay, true}, which decreases the distribution setup time significantly.

OTP-15710
Application(s):
ssl
Related Id(s):
ERL-893

Correct shutdown reason to avoid an incorrect crash report

OTP-15746
Application(s):
ssl
Related Id(s):
ERIERL-333

Enhance documentation and type specifications.

OTP-14865
Application(s):
ssl

*** POTENTIAL INCOMPATIBILITY ***

TLS-1.0, TLS-1.1 and DTLS-1.0 are now considered legacy and not supported by default

OTP-15055
Application(s):
ssl

*** HIGHLIGHT ***

Use new logger API in ssl. Introduce log levels and verbose debug logging for SSL.

OTP-15483
Application(s):
ssl
Related Id(s):
ERL-924

*** HIGHLIGHT ***

Add new API function str_to_suite/1, cipher_suites/3 (list cipher suites as rfc or OpenSSL name strings) and suite_to_openssl_str/1

OTP-15591
Application(s):
ssl

*** HIGHLIGHT ***

Basic support for TLS 1.3 Server for experimental use. The client is not yet functional, for more information see the Standards Compliance chapter of the User's Guide.

OTP-15626
Application(s):
ssl

Add support for PSK CCM ciphers from RFC 6655

Full runtime dependencies of ssl-9.3: crypto-4.2, erts-10.0, inets-5.10.7, kernel-6.0, public_key-1.5, stdlib-3.5

stdlib-3.9 #

OTP-15649
Application(s):
stdlib

Fix a bug in string:lexemes/2.

The bug was found when optimizing the handling of deep lists of Unicode characters in the string module.

OTP-15707
Application(s):
erts, stdlib

A bug has been fixed in the maps implementation that could cause a crash or memory usage to grow until the machine ran out of memory. This could happen when inserting a new key-value pair with a key K1 containing a binary B1 into a map M having a key K2 with a binary B2 if the following conditions were met:

-- B1 =/= B2

-- size(B1) >= 4294967296

-- size(B2) >= 4294967296

-- size(M) >= 32

-- (size(B1) rem 4294967296) == (size(B2) rem 4294967296)

-- the first (size(B1) rem 4294967296) bytes are the same both in B1 and B2

-- substituting B1 in K1 with B2 would create a term with the same value as K2

The root cause of the problem is that the maps implementation only hashed the first (X rem 4294967296) bytes of binaries so that different binaries could get the same hash value independently of the hash seed.

OTP-15751
Application(s):
stdlib

Since the introduction of the stack trace variable, the Erlang Pretty Printer has left out the exception class throw even when the stack trace variable cannot be left out, which is not correct Erlang code. The fix is to always include the exception class throw.

OTP-15760
Application(s):
compiler, stdlib
Related Id(s):
ERL-907

record_info/2 is a pseudo-function that requires literal arguments known at compile time. Therefore, the following usage is illegal: fun record/info/2. The compiler would crash when during compilation of that kind of code. Corrected to issue a compilation error.

OTP-14461
Application(s):
crypto, stdlib
Related Id(s):
PR-1857

A new rand module algorithm, exro928ss (Xoroshiro928**), has been implemented. It has got a really long period and good statistical quality for all output bits, while still being only about 50% slower than the default algorithm.

The same generator is also used as a long period counter in a new crypto plugin for the rand module, algorithm crypto_aes. This plugin uses AES-256 to scramble the counter which buries any detectable statistical artifacts. Scrambling is done in chunks which are cached to get good amortized speed (about half of the default algorithm).

OTP-14724
Application(s):
stdlib
Related Id(s):
PR-2056

Types related to server naming and starting have been exported from gen_statem. These are: server_name/0, server_ref/0, start_opt/0, start_ret/0 and enter_loop_opt/0.

OTP-14731
Application(s):
stdlib
Related Id(s):
PR-1969

The default algorithm for the rand module has been changed to exsss (Xorshift116**) which is a combination of the Xorshift116 (exsp) state update and a new scrambler "StarStar" from the 2018 paper "Scrambled Linear Pseudorandom Number Generators" by David Blackman and Sebastiano Vigna. This combination should not have the caveat of weak low bits that the previous default algorithm(s) have had, with the cost of about 10% lower speed. See GitHub pull request #1969.

OTP-14737
Application(s):
stdlib
Related Id(s):
PR-1855

The generic state machine behaviour gen_statem has gotten code cleanup and documentation improvements from GitHub Pull Request #1855, even though the PR itself was rejected.

OTP-15111
Application(s):
stdlib

Update Unicode specification to version 11.0.

OTP-15128
Application(s):
erts, stdlib

*** HIGHLIGHT ***

ETS option write_concurrency now also affects and improves the scalability of ordered_set tables. The implementation is based on a data structure called contention adapting search tree, where the lock granularity adapts to the actual amount of concurrency exploited by the applications in runtime.

OTP-15200
Application(s):
stdlib
Related Id(s):
PR-1878

Optimized maps:new/0 with trivial Erlang implementation, making use of literal terms (the empty map) not needing dynamic heap allocation.

OTP-15381
Application(s):
stdlib

*** POTENTIAL INCOMPATIBILITY ***

The gen_* behaviours have been changed so that if logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report.

To accomplish this the format of "System Events" as defined in the man page for sys has been clarified and cleaned up, a new function sys:get_log/1 has been added, and sys:get_debug/3 has been deprecated. Due to these changes, code that relies on the internal badly documented format of "System Events", need to be corrected.

OTP-15452
Application(s):
stdlib

The gen_statem behaviour engine loop has been optimized for better performance in particular when the callback module returns some actions, that is better performance for more realistic applications than the Echo Benchmark.

OTP-15563
Application(s):
compiler, stdlib
Related Id(s):
ERL-845 , OTP-15562

*** POTENTIAL INCOMPATIBILITY ***

Do not allow function specifications for functions residing in other modules.

OTP-15615
Application(s):
erts, stdlib

The persistent_term functions put/2 and erase/1 are now yielding.

OTP-15623
Application(s):
erts, stdlib
Related Id(s):
PR-2190

Previously, all ETS tables used centralized counter variables to keep track of the number of items stored and the amount of memory consumed. These counters can cause scalability problems (especially on big NUMA systems). This change adds an implementation of a decentralized counter and modifies the implementation of ETS so that ETS tables of type ordered_set with write_concurrency enabled use the decentralized counter. Experiments indicate that this change substantially improves the scalability of ETS ordered_set tables with write_concurrency enabled in scenarios with frequent ets:insert/2 and ets:delete/2 calls.

OTP-15633
Application(s):
common_test, stdlib
Related Id(s):
PR-1787

Use ssh instead of rsh as the default remote shell.

OTP-15680
Application(s):
stdlib
Related Id(s):
PR-2114

Added beam_lib:strip/2 and friends, which accept a list of chunks that should be preserved when stripping.

OTP-15705
Application(s):
stdlib

Optimize printing of maps with io_lib:write(). Also optimize pretty printing of strings (~s and ~ts) when limiting the output with the chars_limit option.

OTP-15749
Application(s):
compiler, stdlib
Related Id(s):
ERL-904

There are new compiler options nowarn_removed and {nowarn_removed,Items} to suppress warnings for functions and modules that have been removed from OTP.

OTP-15755
Application(s):
stdlib

Let the Erlang Pretty Printer put atomic parts on the same line.

OTP-15756
Application(s):
stdlib

Add option quote_singleton_atom_types to the Erlang Pretty Printer's functions. Setting the option to true adds quotes to all singleton atom types.

Full runtime dependencies of stdlib-3.9: compiler-5.0, crypto-3.3, erts-10.4, kernel-6.0, sasl-3.0

syntax_tools-2.2 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

OTP-15761
Application(s):
edoc, syntax_tools

Correct links in the documentation.

Full runtime dependencies of syntax_tools-2.2: compiler-7.0, erts-9.0, kernel-5.0, stdlib-3.4

tools-3.2 #

OTP-15534
Application(s):
tools
Related Id(s):
PR-2078

Add cprof and tags modules to .app file so that they are included in releases.

OTP-15699
Application(s):
tools
Related Id(s):
PR-2184

Improved documentation parsing in emacs erldoc functionality.

OTP-15575
Application(s):
tools

*** HIGHLIGHT ***

The cover tool now uses the counters module instead of ets for updating the counters for how many times a line has been executed. By default, Cover will work with distributed nodes, but a new function cover:local_only/0 allows running the Cover in a restricted but faster local-only mode.

The increase in speed will vary depending on the type of code being cover-compiled, but as an example, the compiler test suite runs more than twice as fast with the new Cover.

Full runtime dependencies of tools-3.2: compiler-5.0, erts-9.1, kernel-5.4, runtime_tools-1.8.14, stdlib-3.4

wx-1.8.8 #

OTP-14282
Application(s):
asn1, common_test, debugger, dialyzer, erl_docgen, inets, jinterface, observer, otp, syntax_tools, wx
Related Id(s):
PR-1891

All incorrect (that is, all) uses of "can not" has been corrected to "cannot" in source code comments, documentation, examples, and so on.

Full runtime dependencies of wx-1.8.8: erts-6.0, kernel-3.0, stdlib-2.0

xmerl-1.3.21 #

OTP-14703
Application(s):
xmerl
Related Id(s):
PR-1964

A typo in an error printout has been fixed.

Full runtime dependencies of xmerl-1.3.21: erts-6.0, kernel-3.0, stdlib-2.5