Erlang/OTP 21.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:21.0

Highlights #

OTP-14370
Application(s):
erts

*** POTENTIAL INCOMPATIBILITY ***

Truly asynchronous auto-connect. Earlier, when erlang:send was aimed toward an unconnected node, the function would not return until the connection setup had completed (or failed). Now the function returns directly after the message has been enqueued and the connection setup started.

The same applies to all distributed operations that may trigger auto-connect, i.e. '!', send, link, monitor, monitor_node, exit/2 and group_leader.

The interface for all these functions are unchanged as they do not return connection failures. The only exception is erlang:monitor where a *possible incompatibility* is introduced: An attempt to monitor a process on a primitive node (such as erl_interface or jinterface), where remote process monitoring is not implemented, will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node.

OTP-14459
Application(s):
erts, kernel

New functionality for implementation of alternative carriers for the Erlang distribution has been introduced. This mainly consists of support for usage of distribution controller processes (previously only ports could be used as distribution controllers). For more information see ERTS User's Guide ➜ How to implement an Alternative Carrier for the Erlang Distribution ➜ Distribution Module.

OTP-14497
Application(s):
compiler, erts

*** POTENTIAL INCOMPATIBILITY ***

Support for "tuple calls" have been removed from the run-time system. Tuple calls was an undocumented and unsupported feature which allowed the module argument for an apply operation to be a tuple: Var = dict:new(), Var:size(). This "feature" frequently caused confusion, especially when such call failed. The stacktrace would point out functions that don't exist in the source code.

For legacy code that need to use parameterized modules or tuple calls for some other reason, there is a new compiler option called tuple_calls. When this option is given, the compiler will generate extra code that emulates the old behavior for calls where the module is a variable.

OTP-14502
Application(s):
erts

Creation of small maps with literal keys has been optimized to be faster and potentially use less memory. The keys are combined into a literal key tuple which is put into the literal pool. The key tuple can be shared between many instances of maps having the same keys.

OTP-14518
Application(s):
erts, otp

*** POTENTIAL INCOMPATIBILITY ***

The non-smp emulators have been removed. This means that the configure options --disable-threads and --enable-plain-emulator have been removed and configure will now refuse to build Erlang/OTP on platforms without thread support.

In order to achieve a similar setup as the non-smp emulator, it is possible to start Erlang/OTP with the +S 1 option.

OTP-14589
Application(s):
erts

Implementation of true asynchronous signaling between processes in order to improve scalability. Signals affected include exit, monitor, demonitor, monitor triggered, link, unlink, and group leader.

OTP-14626
Application(s):
compiler, erts

Loaded BEAM code in a 64-bit system requires less memory because of better packing of operands for instructions.

These memory savings were achieved by major improvements to the beam_makeops scripts used when building the run time system and BEAM compiler. There is also new for documentation for beam_makeops that describes how new BEAM instructions and loader transformations can be implemented. The documentation is found in here in a source directory or git repository: erts/emulator/internal_doc/beam_makeops.md. An online version can be found here: https://github.com/erlang/otp/blob/master/erts/emulator/internal_doc/beam_makeops.md

OTP-14692
Application(s):
compiler, erts

There is a new syntax in 'try/catch' for retrieving the stacktrace without calling 'erlang:get_stacktrace/0'. See the reference manual for a description of the new syntax. The 'erlang:get_stacktrace/0' BIF is now deprecated.

OTP-14899
Application(s):
erts, kernel

seq_trace labels may now be any erlang term.

OTP-14928
Application(s):
erts

*** POTENTIAL INCOMPATIBILITY ***

The number of driver async threads will now default to 1 as the standard drivers do not use them anymore. Users that changed this value to tweak the file driver should replace +A with +SDio since it now uses dirty IO schedulers instead of async threads.

OTP-14968
Application(s):
compiler
Related Id(s):
ERL-563

When compiling modules with huge functions, the compiler would generate a lot of atoms for its internal, sometimes so many that the atom table would overflow. The compiler has been rewritten to generate far less internal atoms to avoid filling the atom table.

OTP-15037
Application(s):
compiler, erts
Related Id(s):
PR-1784 , PR-1802

Two new guards BIFs operating on maps have been added: map_get/2 and is_map_key/2. They do the same as maps:get/2 and maps:is_key/2, respectively, except that they are allowed to be used in guards.

OTP-15087
Application(s):
compiler
Related Id(s):
PR-1810

Part of EEP-44 has been implemented.

There is a new predefined macro called OTP_RELEASE which is an integer indicating the OTP release number (its value is 21 in this release).

There are new preprocessor directives -if(Condition). and -elif(Condition).. The if/elif supports the builtin function defined(Symbol).

OTP-15142
Application(s):
ssl

First version with support for DTLS

Potential Incompatibilities #

OTP-11694
Application(s):
erts

The erlang:system_flag(scheduler_wall_time,Bool) call is now reference counted and will be turned off if the (last) process that started the performance statistics dies. Thus it is no longer possible to start the statistics with rpc:call(Node, erlang, system_flag, [scheduler_wall_time, true]) since it will be turned off directly afterwards when the rpc process dies.

OTP-13073
Application(s):
stdlib
Related Id(s):
PR-1595

The semantics of timeout parameter {clean_timeout,infinity} to gen_statem:call/3 has been changed to use a proxy process for the call. With this change clean_timeout implicates a proxy process with no exceptions. This may be a hard to observe incompatibility: in the presence of network problems a late reply could arrive in the caller's message queue when catching errors. That will not happen after this correction.

The semantics of timeout parameter infinity has not been changed.

OTP-13295
Application(s):
erts, kernel, sasl, stdlib

A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide.

Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code.

Notice the following potential incompatibilities:

-- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger.

In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger.

-- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged.

By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP.

Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level.

To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events.

Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version.

OTP-13761
Application(s):
kernel
Related Id(s):
ERL-503

No resolver backend returns V4Mapped IPv6 addresses any more. This was inconsistent before, some did, some did not. To facilitate working with such addresses a new function inet:ipv4_mapped_ipv6_address/1 has been added.

OTP-14256
Application(s):
erts

The file driver has been rewritten as a NIF, decreasing the latency of file operations. Notable incompatibilities are:

-- The use_threads option for file:sendfile/5 no longer has any effect; we either use non-blocking sendfile(2) or fall back to file:read + gen_tcp:send.

-- The file-specific DTrace probes have been removed. The same effect can be achieved with normal tracing together with the nif__entry/nif__return probes to track scheduling.

OTP-14370
Application(s):
erts

*** HIGHLIGHT ***

Truly asynchronous auto-connect. Earlier, when erlang:send was aimed toward an unconnected node, the function would not return until the connection setup had completed (or failed). Now the function returns directly after the message has been enqueued and the connection setup started.

The same applies to all distributed operations that may trigger auto-connect, i.e. '!', send, link, monitor, monitor_node, exit/2 and group_leader.

The interface for all these functions are unchanged as they do not return connection failures. The only exception is erlang:monitor where a *possible incompatibility* is introduced: An attempt to monitor a process on a primitive node (such as erl_interface or jinterface), where remote process monitoring is not implemented, will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node.

OTP-14439
Application(s):
compiler, dialyzer, erts, stdlib

Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories.

escript, erlc, dialyzer and typer no longer load an .erlang at all.

OTP-14469
Application(s):
sasl

The old and outdated "Status Inspection" tool (modules si and si_sasl_sup) is removed.

OTP-14497
Application(s):
compiler, erts

*** HIGHLIGHT ***

Support for "tuple calls" have been removed from the run-time system. Tuple calls was an undocumented and unsupported feature which allowed the module argument for an apply operation to be a tuple: Var = dict:new(), Var:size(). This "feature" frequently caused confusion, especially when such call failed. The stacktrace would point out functions that don't exist in the source code.

For legacy code that need to use parameterized modules or tuple calls for some other reason, there is a new compiler option called tuple_calls. When this option is given, the compiler will generate extra code that emulates the old behavior for calls where the module is a variable.

OTP-14508
Application(s):
erts

When an exception is thrown, include the arguments of the call in the stacktrace for BIFs band, bor, bsl, bsr, bxor, div, rem and the operators +, -, * and /.

OTP-14518
Application(s):
erts, otp

*** HIGHLIGHT ***

The non-smp emulators have been removed. This means that the configure options --disable-threads and --enable-plain-emulator have been removed and configure will now refuse to build Erlang/OTP on platforms without thread support.

In order to achieve a similar setup as the non-smp emulator, it is possible to start Erlang/OTP with the +S 1 option.

OTP-14543
Application(s):
erts, kernel, stdlib
Related Id(s):
ERL-370

File operations used to accept filenames containing null characters (integer value zero). This caused the name to be truncated and in some cases arguments to primitive operations to be mixed up. Filenames containing null characters inside the filename are now *rejected* and will cause primitive file operations to fail.

Also environment variable operations used to accept names and values of environment variables containing null characters (integer value zero). This caused operations to silently produce erroneous results. Environment variable names and values containing null characters inside the name or value are now *rejected* and will cause environment variable operations to fail.

Primitive environment variable operations also used to accept the $= character in environment variable names causing various problems. $= characters in environment variable names are now also *rejected*.

Also os:cmd/1 now reject null characters inside its command.

erlang:open_port/2 will also reject null characters inside the port name from now on.

OTP-14577
Application(s):
stdlib

filelib:wildcard() now allows characters with a special meaning to be escaped using backslashes.

This is an incompatible change, but note that the use of backslashes in wildcards would already work differently on Windows and Unix. Existing calls to filelib:wildcard() needs to be updated. On Windows, directory separators must always be written as a slash.

OTP-14666
Application(s):
erts, kernel

os:putenv and os:getenv no longer access the process environment directly and instead work on a thread-safe emulation. The only observable difference is that it's *not* kept in sync with libc getenv(3) / putenv(3), so those who relied on that behavior in drivers or NIFs will need to add manual synchronization.

On Windows this means that you can no longer resolve DLL dependencies by modifying the PATH just before loading the driver/NIF. To make this less of a problem, the emulator now adds the target DLL's folder to the DLL search path.

OTP-14768
Application(s):
ssl

For security reasons no longer support 3-DES cipher suites by default

OTP-14769
Application(s):
ssl

For security reasons RSA-key exchange cipher suites are no longer supported by default

OTP-14789
Application(s):
ssl

The interoperability option to fallback to insecure renegotiation now has to be explicitly turned on.

OTP-14824
Application(s):
ssl

Drop support for SSLv2 enabled clients. SSLv2 has been broken for decades and never supported by the Erlang SSL/TLS implementation. This option was by default disabled and enabling it has proved to sometimes break connections not using SSLv2 enabled clients.

OTP-14851
Application(s):
ssh

The option exec has new option values defined to make it much more easy to implement an own exec server.

An option called exec for daemons implementing the handling of 'exec' requests has existed a long time but has been undocumented. The old undocumented value - as well as its behavior - is kept for compatibility EXCEPT that error messages are changed and are sent as "stderror" text.

OTP-14882
Application(s):
ssl

Remove CHACHA20_POLY1305 ciphers form default for now. We have discovered interoperability problems, ERL-538, that we believe needs to be solved in crypto.

OTP-14928
Application(s):
erts

*** HIGHLIGHT ***

The number of driver async threads will now default to 1 as the standard drivers do not use them anymore. Users that changed this value to tweak the file driver should replace +A with +SDio since it now uses dirty IO schedulers instead of async threads.

OTP-14961
Application(s):
erts, tools

Added instrument:allocations and instrument:carriers for retrieving information about memory utilization and fragmentation.

The old instrument interface has been removed, as have the related options +Mim and +Mis.

OTP-14964
Application(s):
erts
Related Id(s):
OTP-14589

The process suspend functionality used by the erlang:suspend_process/2 BIF has been reimplemented using the newly introduced true asynchronous signaling between processes. This mainly to reduce memory usage in the process control block of all processes, but also in order to simplify the implementation.

WARNING: You can easily create deadlocks if processes suspends each other (directly or in circles). In ERTS versions prior to ERTS version 10.0, the runtime system prevented such deadlocks, but this prevention has now been removed due to performance reasons.

Other ERTS internal functionality that used the previous process suspend functionality have also been reimplemented to use asynchronous signaling instead.

OTP-14986
Application(s):
erts
Related Id(s):
PR-1745

erlang:process_info/1 has been changed to no longer include messages by default. Instead erlang:process_info/2 should be used.

OTP-15002
Application(s):
ssh
Related Id(s):
OTP-15030

The type specifications in SSH are completly reworked and the following types are renamed:

ssh:ssh_connection_ref() is changed to ssh:connection_ref(),

ssh:ssh_daemon_ref() is changed to ssh:daemon_ref(),

ssh:ssh_channel_id() is changed to ssh:channel_id().

OTP-15071
Application(s):
kernel

The included_applications key are no longer duplicated as application environment variable. Earlier, the included applications could be read both with application:get[_all]_env(...) and application:get[_all]_key(...) functions. Now, it can only be read with application:get[_all]_key(...).

OTP-15072
Application(s):
stdlib
Related Id(s):
1786 , OTP-15114 , PR

The lib module is removed:

-- lib:error_message/2 is removed.

-- lib:flush_receive/0 is removed.

-- lib:nonl/1 is removed.

-- lib:progname/0 is replaced by ct:get_progname/0.

-- lib:send/2 is removed.

-- lib:sendw/2 is removed.

OTP-15103
Application(s):
stdlib
Related Id(s):
ERL-607

In control sequences of the functions io:fwrite/2,3 and io_lib:fwrite/2,3 containing p or P, a field width of value 0 means that no line breaks are inserted. This is in contrast to the old behaviour, where 0 used to insert line breaks after every subterm. To insert line breaks after every subterm, a field width of value 1 can be used.

OTP-15118
Application(s):
erts, kernel

Owner and group changes through file:write_file_info, file:change_owner, and file:change_group will no longer report success on permission errors.

asn1-5.0.6 #

OTP-15036
Application(s):
asn1, edoc, eldap, syntax_tools

Update to use the new string api instead of the old.

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

common_test-1.16 #

OTP-14810
Application(s):
common_test

Use the compiler option nowarn_export_all to disable export_all warnings when automatically compiling test suites.

OTP-14902
Application(s):
common_test, observer, public_key, ssl

Use uri_string module instead of http_uri.

Full runtime dependencies of common_test-1.16: 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.2 #

OTP-14855
Application(s):
compiler
Related Id(s):
ERL-549

Fixed an error in an optimization pass that caused impossible tuple matching.

OTP-14992
Application(s):
compiler
Related Id(s):
ERL-572

The exception thrown when a list comprehension was given a non-list term was not always correct.

OTP-15115
Application(s):
compiler
Related Id(s):
PR-1831

The compiler could produce incorrect code in rare circumstances when the [{inline,F/A}] option was used.

OTP-14439
Application(s):
compiler, dialyzer, erts, stdlib

*** POTENTIAL INCOMPATIBILITY ***

Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories.

escript, erlc, dialyzer and typer no longer load an .erlang at all.

OTP-14497
Application(s):
compiler, erts

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

Support for "tuple calls" have been removed from the run-time system. Tuple calls was an undocumented and unsupported feature which allowed the module argument for an apply operation to be a tuple: Var = dict:new(), Var:size(). This "feature" frequently caused confusion, especially when such call failed. The stacktrace would point out functions that don't exist in the source code.

For legacy code that need to use parameterized modules or tuple calls for some other reason, there is a new compiler option called tuple_calls. When this option is given, the compiler will generate extra code that emulates the old behavior for calls where the module is a variable.

OTP-14505
Application(s):
compiler

In code such as example({ok, Val}) -> {ok, Val}. a tuple would be built. The compiler will now automatically rewrite the code to example({ok,Val}=Tuple) -> Tuple. which will reduce code size, execution time, and remove GC pressure.

OTP-14525
Application(s):
compiler

The optimization of case expression where only one of the case arms can execute successfully has been improved.

OTP-14594
Application(s):
compiler
Related Id(s):
ERL-444

Some uses of binary matching has been slightly improved, eliminating unnecessary register shuffling.

OTP-14615
Application(s):
compiler
Related Id(s):
PR-1558

There is a new {compile_info,Info} option for the compiler that allows BEAM-based languages such as Elixir and LFE to add their own compiler versions.

OTP-14626
Application(s):
compiler, erts

*** HIGHLIGHT ***

Loaded BEAM code in a 64-bit system requires less memory because of better packing of operands for instructions.

These memory savings were achieved by major improvements to the beam_makeops scripts used when building the run time system and BEAM compiler. There is also new for documentation for beam_makeops that describes how new BEAM instructions and loader transformations can be implemented. The documentation is found in here in a source directory or git repository: erts/emulator/internal_doc/beam_makeops.md. An online version can be found here: https://github.com/erlang/otp/blob/master/erts/emulator/internal_doc/beam_makeops.md

OTP-14654
Application(s):
compiler

Size calculations for binary constructions has been somewhat optimized, producing smaller code.

OTP-14683
Application(s):
compiler, erts

When the value returned from a 'catch' expression is ignored, no stacktrace will be built if an exception is caught. That will save time and produce less garbage. There are also some minor optimizations of 'try/catch' both in the compiler and run-time system.

OTP-14692
Application(s):
compiler, erts

*** HIGHLIGHT ***

There is a new syntax in 'try/catch' for retrieving the stacktrace without calling 'erlang:get_stacktrace/0'. See the reference manual for a description of the new syntax. The 'erlang:get_stacktrace/0' BIF is now deprecated.

OTP-14712
Application(s):
compiler

The following is an internal change in the compiler, that is not noticeable for normal use of the compiler: The module v3_life has been removed. Its functionality has been simplified and integrated into v3_codegen.

OTP-14774
Application(s):
compiler

The optimization of binary matching that delays creation of sub binaries (see the Efficiency Guide) could be thwarted by the argument order and could be necessary to change the argument order. The compiler has now become smarter and can handle any argument order.

OTP-14808
Application(s):
compiler
Related Id(s):
ERL-514

When the compiler was faced with complex case expressions it would unnecessarily allocate stack elements and shuffle data between x and y registers. Improved code generation to only allocate a stack frame when strictly necessary.

OTP-14830
Application(s):
compiler, erts

There is a new option 'makedep_side_effect' for the compiler and -MMD for 'erlc' that generates dependencies and continues to compile as normal.

OTP-14968
Application(s):
compiler
Related Id(s):
ERL-563

*** HIGHLIGHT ***

When compiling modules with huge functions, the compiler would generate a lot of atoms for its internal, sometimes so many that the atom table would overflow. The compiler has been rewritten to generate far less internal atoms to avoid filling the atom table.

OTP-15003
Application(s):
compiler, stdlib

External funs with literal values for module, name, and arity (e.g. erlang:abs/1) are now treated as literals. That means more efficient code that produces less garbage on the heap.

OTP-15037
Application(s):
compiler, erts
Related Id(s):
PR-1784 , PR-1802

*** HIGHLIGHT ***

Two new guards BIFs operating on maps have been added: map_get/2 and is_map_key/2. They do the same as maps:get/2 and maps:is_key/2, respectively, except that they are allowed to be used in guards.

OTP-15044
Application(s):
compiler
Related Id(s):
ERL-614

A call or apply of a literal external fun will be replaced with a direct call.

OTP-15087
Application(s):
compiler
Related Id(s):
PR-1810

*** HIGHLIGHT ***

Part of EEP-44 has been implemented.

There is a new predefined macro called OTP_RELEASE which is an integer indicating the OTP release number (its value is 21 in this release).

There are new preprocessor directives -if(Condition). and -elif(Condition).. The if/elif supports the builtin function defined(Symbol).

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

crypto-4.3 #

OTP-14956
Application(s):
crypto
Related Id(s):
ERL-579

Removed two undocumented and erroneous functions (crypto:dh_generate_parameters/2 and crypto:dh_check/1).

OTP-15088
Application(s):
crypto

Fixed bug causing VM crash if doing runtime upgrade of a crypto module built against OpenSSL older than 0.9.8h. Bug exists since OTP-20.2.

OTP-13370
Application(s):
crypto
Related Id(s):
PR-1573

A new rand plugin algorithm has been implemented in crypto, that is: crypto_cache. It uses strong random bytes as randomness source and caches them to get good speed. See crypto:rand_seed_alg/1.

OTP-14864
Application(s):
crypto

Diffie-Hellman key functions are re-written with the EVP_PKEY api.

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

debugger-4.2.5 #

OTP-14957
Application(s):
debugger
Related Id(s):
PR-1741

Fix a bug where calling a fun inside a binary would crash the Debugger.

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

dialyzer-3.3 #

OTP-14439
Application(s):
compiler, dialyzer, erts, stdlib

*** POTENTIAL INCOMPATIBILITY ***

Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories.

escript, erlc, dialyzer and typer no longer load an .erlang at all.

OTP-14493
Application(s):
dialyzer
Related Id(s):
PR-1434

Dialyzer can no longer read BEAM files created with OTP 19 or earlier.

OTP-14937
Application(s):
dialyzer
Related Id(s):
PR-1719

Speed up the computation of MD5 sums.

OTP-14970
Application(s):
dialyzer
Related Id(s):
PR-1722

Fix a situation where Dialyzer unnecessarily discarded contract information, resulting in missed warnings.

OTP-14982
Application(s):
dialyzer
Related Id(s):
OTP-14970 , PR-1722

The (not recommended) option -Woverspecs is somewhat refined, and generates warnings in a few more cases.

OTP-15079
Application(s):
dialyzer
Related Id(s):
ERL-593

Do not emit warnings for fun expressions residing in code that cannot be run. This is consistent with how Dialyzer treats other code that cannot be run.

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

diameter-2.1.5 #

OTP-15045
Application(s):
diameter

Fix documentation typos.

Full runtime dependencies of diameter-2.1.5: erts-10.0, kernel-3.2, ssl-9.0, stdlib-2.4

edoc-0.9.3 #

OTP-15117
Application(s):
edoc

Types and function specifications including the map() type are pretty-printed correctly.

OTP-15036
Application(s):
asn1, edoc, eldap, syntax_tools

Update to use the new string api instead of the old.

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

eldap-1.2.4 #

OTP-15036
Application(s):
asn1, edoc, eldap, syntax_tools

Update to use the new string api instead of the old.

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

erl_docgen-0.8 #

OTP-14979
Application(s):
erl_docgen, otp

Add a hoverable element to the titles in the html documentation with a link to github where the documentation can be edited.

Make the anchors in the html User's Guide and system documentation use the title of the sections instead of a generated id.

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

erl_interface-3.10.3 #

OTP-15033
Application(s):
erl_interface

Fix bug where calling erl_init on certain platforms could result in a buffer overflow bug.

OTP-15105
Application(s):
erl_interface
Related Id(s):
ERL-629

Fixed erl_call -m to not deallocate module source binary before it has been read.

OTP-15114
Application(s):
erl_interface
Related Id(s):
ERL-634 , OTP-15072

The program erl_call calls erl_eval:eval_str/1 when it used to call lib:eval_str/1. This means that erl_call will fail when trying interact with an Erlang node running Erlang/OTP 20 or earlier.

erts-10.0 #

OTP-14019
Application(s):
erts, kernel, stdlib
Related Id(s):
ERL-550

The type specifications for file:posix/0 and inet:posix/0 have been updated according to which errors file and socket operations should be able to return.

OTP-14537
Application(s):
erts
Related Id(s):
PR1529

Fix error printout from run_erl and a bug that could cause unintended fds to be leaked into the started program.

OTP-14543
Application(s):
erts, kernel, stdlib
Related Id(s):
ERL-370

*** POTENTIAL INCOMPATIBILITY ***

File operations used to accept filenames containing null characters (integer value zero). This caused the name to be truncated and in some cases arguments to primitive operations to be mixed up. Filenames containing null characters inside the filename are now *rejected* and will cause primitive file operations to fail.

Also environment variable operations used to accept names and values of environment variables containing null characters (integer value zero). This caused operations to silently produce erroneous results. Environment variable names and values containing null characters inside the name or value are now *rejected* and will cause environment variable operations to fail.

Primitive environment variable operations also used to accept the $= character in environment variable names causing various problems. $= characters in environment variable names are now also *rejected*.

Also os:cmd/1 now reject null characters inside its command.

erlang:open_port/2 will also reject null characters inside the port name from now on.

OTP-14652
Application(s):
erts

Fix bugs related to the bookkeeping of microstate accounting states.

OTP-14666
Application(s):
erts, kernel

*** POTENTIAL INCOMPATIBILITY ***

os:putenv and os:getenv no longer access the process environment directly and instead work on a thread-safe emulation. The only observable difference is that it's *not* kept in sync with libc getenv(3) / putenv(3), so those who relied on that behavior in drivers or NIFs will need to add manual synchronization.

On Windows this means that you can no longer resolve DLL dependencies by modifying the PATH just before loading the driver/NIF. To make this less of a problem, the emulator now adds the target DLL's folder to the DLL search path.

OTP-14713
Application(s):
erts
Related Id(s):
ERL-500

Corrected erlang:is_builtin(erlang, M, F) to return true for apply/2 and yield/0.

OTP-14719
Application(s):
erts

Fixed a bug where the PATH environment variable wasn't updated correctly on a release downgrade, effectively keeping the PATH of the new release.

OTP-14782
Application(s):
erts
Related Id(s):
ERL-511

A receive optimization that avoids scanning the entire message queue when receiving a message containing a freshly created reference could in rare circumstances (involving recursive calls to the functions that does the receive) cause the receive to hang. This has been corrected.

OTP-14909
Application(s):
erts
Related Id(s):
PR-1692

Fix building of Erlang/OTP on platforms which have small data area with short addressing. For example the PowerPC/RTEMS platform.

OTP-14931
Application(s):
erts

Fixed a crash when enif_make_binary is called with a binary produced by enif_inspect_binary in a different environment.

OTP-14932
Application(s):
erts

Fixed a crash when enif_make_binary is called more than once with a binary that had previously been added to an enif_ioq.

OTP-14943
Application(s):
erts
Related Id(s):
ERL-576

The erl_child_setup program now ignores SIGTERM signals.

OTP-14977
Application(s):
erts

Force 64-bit alignment on pre-allocators on architectures which needs it.

OTP-14978
Application(s):
erts

Fixed a bug where dirty scheduler picked up non-dirty work.

OTP-15001
Application(s):
erts, kernel

Calls to gen_tcp:send/2 on closed sockets now returns {error, closed} instead of {error,enotconn}.

OTP-15008
Application(s):
erts

erlang:monotonic_time/1 failed with badarg when passing the perf_counter time unit as argument.

OTP-15013
Application(s):
erts

Fix bug where rapid init:restart() calls would sometimes crash because a code load request leaked in between the restarts.

OTP-15015
Application(s):
erts
Related Id(s):
OTP-14890

Improve float_to_list(F, [{decimals,D}]) to closer conform with io_lib:format("~.*f", [D,F]).

There are however, still cases when float_to_list does not produce the exact same result as io_lib:format, especially for large values F and/or many decimals D.

OTP-15024
Application(s):
erts

Fixed a deadlock that would occur on certain allocators when a reallocation failed with +ramv enabled.

OTP-15029
Application(s):
erts

Fix bug that made it impossible to use an erl_tracer as the seq_trace trace receiver.

OTP-15032
Application(s):
erts

Fix bug where a large (> 1 GB) emulator generated error logger message would cause the emulator to crash.

OTP-15062
Application(s):
erts
Related Id(s):
ERL-615

The emulator will no longer crash when reading the file information of an ordinary file that has an NTFS reparse point, such as files stored in a OneDrive-mapped folder.

OTP-15080
Application(s):
erts

Fixed bug in enif_binary_to_term which could cause memory corruption for immediate terms (atoms, small integers, pids, ports, empty lists).

OTP-15085
Application(s):
erts

Fixed bug in erlang:system_profile/2 that could cause superfluous {profile,_,active,_,_} messages for terminating processes.

OTP-15090
Application(s):
erts

On OSs with per thread CPU time support, change cpu_timestamp in erlang:trace/3 to use it instead of per process CPU time. This makes this option useable on such OSs when running multiple schedulers.

OTP-15108
Application(s):
erts
Related Id(s):
ERL-621

Fix segfault in abort_signal_task which could happen if a port terminated while there were outstanding port tasks that were not signals, for example a ready_input/ready_output event.

OTP-15109
Application(s):
erts

Fixed bug in ets that could cause VM crash if process A terminates after fixating a table and process B deletes the table at "the same time". The table fixation could be done with ets:safe_fixtable or if process A terminates in the middle of a long running select or match call.

OTP-15118
Application(s):
erts, kernel

*** POTENTIAL INCOMPATIBILITY ***

Owner and group changes through file:write_file_info, file:change_owner, and file:change_group will no longer report success on permission errors.

OTP-15119
Application(s):
erts
Related Id(s):
PR-1826

Fix a bug error reporting from escripts on windows where the error message would get garbled.

OTP-15125
Application(s):
erts

Fix segfault when a process is interally re-scheduled while being traced for in out events. This bug was introduced in erts-8.0 (OTP-19.0).

OTP-11462
Application(s):
erts

It is now possible to open device files and FIFOs with file:open/2.

OTP-11694
Application(s):
erts

*** POTENTIAL INCOMPATIBILITY ***

The erlang:system_flag(scheduler_wall_time,Bool) call is now reference counted and will be turned off if the (last) process that started the performance statistics dies. Thus it is no longer possible to start the statistics with rpc:call(Node, erlang, system_flag, [scheduler_wall_time, true]) since it will be turned off directly afterwards when the rpc process dies.

OTP-13295
Application(s):
erts, kernel, sasl, stdlib

*** POTENTIAL INCOMPATIBILITY ***

A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide.

Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code.

Notice the following potential incompatibilities:

-- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger.

In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger.

-- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged.

By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP.

Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level.

To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events.

Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version.

OTP-13760
Application(s):
erts
Related Id(s):
PR-1592

gen_sctp:connect_init/4 or rather connect in inet_drv.c for SCTP has been fixed to not check the write file descriptor for writeability after a connect, since for SCTP (SOCK_SEQPACKET) that property does not seem to be any kind of indicator for when a connect has finished. This fixes connects that the OS returned as "in progress" that was misinterpreted by gen_sctp:connect_init as failed.

OTP-14256
Application(s):
erts

*** POTENTIAL INCOMPATIBILITY ***

The file driver has been rewritten as a NIF, decreasing the latency of file operations. Notable incompatibilities are:

-- The use_threads option for file:sendfile/5 no longer has any effect; we either use non-blocking sendfile(2) or fall back to file:read + gen_tcp:send.

-- The file-specific DTrace probes have been removed. The same effect can be achieved with normal tracing together with the nif__entry/nif__return probes to track scheduling.

OTP-14346
Application(s):
erts

The I/O polling functionality of erts has been re-written to better make use of the OSs polling mechanisms. This change means that erts will now always prefer to use a kernel-polling mechanism if possible. Also all of the I/O polling has been moved to dedicated threads instead of being placed in the scheduler loops.

As a result of this, the erl options +K and +secio have been removed. It is still possible to disable kernel-poll, but it has to be done at compile time through the configure option --disable-kernel-poll.

The new erl options +IOt and +IOp can be used to change how many IO poll threads and poll sets that erts should use. See their respective documentation for more details.

OTP-14370
Application(s):
erts

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

Truly asynchronous auto-connect. Earlier, when erlang:send was aimed toward an unconnected node, the function would not return until the connection setup had completed (or failed). Now the function returns directly after the message has been enqueued and the connection setup started.

The same applies to all distributed operations that may trigger auto-connect, i.e. '!', send, link, monitor, monitor_node, exit/2 and group_leader.

The interface for all these functions are unchanged as they do not return connection failures. The only exception is erlang:monitor where a *possible incompatibility* is introduced: An attempt to monitor a process on a primitive node (such as erl_interface or jinterface), where remote process monitoring is not implemented, will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node.

OTP-14439
Application(s):
compiler, dialyzer, erts, stdlib

*** POTENTIAL INCOMPATIBILITY ***

Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories.

escript, erlc, dialyzer and typer no longer load an .erlang at all.

OTP-14459
Application(s):
erts, kernel

*** HIGHLIGHT ***

New functionality for implementation of alternative carriers for the Erlang distribution has been introduced. This mainly consists of support for usage of distribution controller processes (previously only ports could be used as distribution controllers). For more information see ERTS User's Guide ➜ How to implement an Alternative Carrier for the Erlang Distribution ➜ Distribution Module.

OTP-14492
Application(s):
erts

Add support for the lcc compiler and in extension the Elbrus 2000 platform.

OTP-14497
Application(s):
compiler, erts

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

Support for "tuple calls" have been removed from the run-time system. Tuple calls was an undocumented and unsupported feature which allowed the module argument for an apply operation to be a tuple: Var = dict:new(), Var:size(). This "feature" frequently caused confusion, especially when such call failed. The stacktrace would point out functions that don't exist in the source code.

For legacy code that need to use parameterized modules or tuple calls for some other reason, there is a new compiler option called tuple_calls. When this option is given, the compiler will generate extra code that emulates the old behavior for calls where the module is a variable.

OTP-14502
Application(s):
erts

*** HIGHLIGHT ***

Creation of small maps with literal keys has been optimized to be faster and potentially use less memory. The keys are combined into a literal key tuple which is put into the literal pool. The key tuple can be shared between many instances of maps having the same keys.

OTP-14508
Application(s):
erts

*** POTENTIAL INCOMPATIBILITY ***

When an exception is thrown, include the arguments of the call in the stacktrace for BIFs band, bor, bsl, bsr, bxor, div, rem and the operators +, -, * and /.

OTP-14518
Application(s):
erts, otp

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

The non-smp emulators have been removed. This means that the configure options --disable-threads and --enable-plain-emulator have been removed and configure will now refuse to build Erlang/OTP on platforms without thread support.

In order to achieve a similar setup as the non-smp emulator, it is possible to start Erlang/OTP with the +S 1 option.

OTP-14575
Application(s):
erts

Modules that use floating point constants compiled with R15 or earlier will need to be re-compiled before they can be loaded.

OTP-14589
Application(s):
erts

*** HIGHLIGHT ***

Implementation of true asynchronous signaling between processes in order to improve scalability. Signals affected include exit, monitor, demonitor, monitor triggered, link, unlink, and group leader.

OTP-14604
Application(s):
erts

Added a PGO (profile guided optimization) pass to the build step of erts. This can be disabled by passing --disable-pgo to configure.

OTP-14610
Application(s):
erts
Related Id(s):
PR-1480

Improved the performance of binary:split and binary:match.

OTP-14613
Application(s):
erts

It is not longer possible to disable dirty schedulers when building erlang.

OTP-14626
Application(s):
compiler, erts

*** HIGHLIGHT ***

Loaded BEAM code in a 64-bit system requires less memory because of better packing of operands for instructions.

These memory savings were achieved by major improvements to the beam_makeops scripts used when building the run time system and BEAM compiler. There is also new for documentation for beam_makeops that describes how new BEAM instructions and loader transformations can be implemented. The documentation is found in here in a source directory or git repository: erts/emulator/internal_doc/beam_makeops.md. An online version can be found here: https://github.com/erlang/otp/blob/master/erts/emulator/internal_doc/beam_makeops.md

OTP-14637
Application(s):
erts
Related Id(s):
ERL-327 , PR-1524

file:read_file has been changed to read the content of files that report a size of 0 even when data can be read from them. An example of such a file is /proc/cpuinfo on Linux.

OTP-14651
Application(s):
erts

It is no longer possible to disable the temp_alloc allocator. Disabling it caused serious performance degradations and was never what was wanted.

OTP-14667
Application(s):
erts

The reduction cost of sending messages is now constant. It will no longer scale according to the length of the receiving process' message queue.

OTP-14680
Application(s):
erts

Improved loading of modules with -on_load directive, to no longer block all schedulers when the load operation is completed.

OTP-14682
Application(s):
erts

On platforms with real-time signals available, SIGRTMIN+1 is now used as the internal scheduler suspend signal instead of SIGUSR2.

OTP-14683
Application(s):
compiler, erts

When the value returned from a 'catch' expression is ignored, no stacktrace will be built if an exception is caught. That will save time and produce less garbage. There are also some minor optimizations of 'try/catch' both in the compiler and run-time system.

OTP-14687
Application(s):
erts

The guarantees and non-guarantees of erlang:get_stacktrace/0 are now documented.

OTP-14692
Application(s):
compiler, erts

*** HIGHLIGHT ***

There is a new syntax in 'try/catch' for retrieving the stacktrace without calling 'erlang:get_stacktrace/0'. See the reference manual for a description of the new syntax. The 'erlang:get_stacktrace/0' BIF is now deprecated.

OTP-14780
Application(s):
erts

New 'used' option for binary_to_term/2 that will also return number of bytes actually read from the binary. This enables easy access to any extra data in the binary located directly after the returned term.

OTP-14795
Application(s):
erts
Related Id(s):
ERL-88

Added more statistics for erlang:system_info({allocator,A}) in the mbcs_pool section.

OTP-14797
Application(s):
erts

Added enif_ioq_peek_head to retrieve Erlang terms from NIF IO queues without having to resort to copying.

OTP-14830
Application(s):
compiler, erts

There is a new option 'makedep_side_effect' for the compiler and -MMD for 'erlc' that generates dependencies and continues to compile as normal.

OTP-14884
Application(s):
erts, stdlib

Added ets:whereis/1 for retrieving the table identifier of a named table.

OTP-14899
Application(s):
erts, kernel

*** HIGHLIGHT ***

seq_trace labels may now be any erlang term.

OTP-14901
Application(s):
erts

Optimized the common case of monitor followed by send to the same local process. The monitor signal is now delayed in order to be piggybacked with the sent message and thereby only get one lock operation on the message queue of the receiver. A delayed monitor signal is flushed if no send has been done at the latest when the process is scheduled out.

OTP-14903
Application(s):
erts, hipe

Make hipe compiled code work on x86_64 (amd64) with OS security feature PIE, where executable code can be loaded into a random location. Old behavior, if hipe was enabled, was to disable PIE build options for the VM.

OTP-14928
Application(s):
erts

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

The number of driver async threads will now default to 1 as the standard drivers do not use them anymore. Users that changed this value to tweak the file driver should replace +A with +SDio since it now uses dirty IO schedulers instead of async threads.

OTP-14934
Application(s):
erts
Related Id(s):
PR-1708

Optimize == and /= for binaries with different sizes to be constant in time instead of proportional to the size of their common prefix.

OTP-14948
Application(s):
erts

Refactorings making some internal process flags available for other usage.

OTP-14951
Application(s):
erts

Removed need for HiPE to allocate native executable memory in low 2GB address space on x86_64. Command line option +MXscs is thereby obsolete and ignored.

OTP-14954
Application(s):
erts

Added enif_make_map_from_arrays for creating a populated map, analogous to enif_make_list_from_array.

OTP-14959
Application(s):
erts

Added configuration switches for busy-wait and wake up thresholds for dirty schedulers, and changing these settings for normal schedulers will no longer affect dirty schedulers.

Refer to the documentation for details. The new switches are +sbwtdcpu, +sbwtdio, +swtdcpu, and +swtdio.

The default busy wait threshold for dirty scheduler threads has also been lowered to short.

OTP-14960
Application(s):
erts

The list of "taints" now also includes dynamic loaded drivers in addition to NIF libraries. Statically linked drivers and NIF libraries that are part of erts are not included. The "taints" are returned by system_info(taints) and printed in the header of erl_crash.dump files.

OTP-14961
Application(s):
erts, tools

*** POTENTIAL INCOMPATIBILITY ***

Added instrument:allocations and instrument:carriers for retrieving information about memory utilization and fragmentation.

The old instrument interface has been removed, as have the related options +Mim and +Mis.

OTP-14964
Application(s):
erts
Related Id(s):
OTP-14589

*** POTENTIAL INCOMPATIBILITY ***

The process suspend functionality used by the erlang:suspend_process/2 BIF has been reimplemented using the newly introduced true asynchronous signaling between processes. This mainly to reduce memory usage in the process control block of all processes, but also in order to simplify the implementation.

WARNING: You can easily create deadlocks if processes suspends each other (directly or in circles). In ERTS versions prior to ERTS version 10.0, the runtime system prevented such deadlocks, but this prevention has now been removed due to performance reasons.

Other ERTS internal functionality that used the previous process suspend functionality have also been reimplemented to use asynchronous signaling instead.

OTP-14965
Application(s):
erts

Added the nifs option to ?MODULE:module_info/1 for listing a module's installed NIF functions.

OTP-14966
Application(s):
erts

New implementation of erlang:process_info/[1,2].

In the general case when inspecting another process, the new implementation sends an asynchronous process-info request signal to the other process and waits for the result instead of locking the other process and reading the result directly. In some special cases where no conflicts occur, signal order wont be violated, and the amount of data requested is guaranteed to be small, the inspected process may be inspected directly.

Appropriate amount of reductions are now also bumped when inspecting a process.

OTP-14975
Application(s):
erts
Related Id(s):
PR-1597

Removed process start time from crash dump in order to save memory in process control block.

OTP-14976
Application(s):
erts

Optimize erlang:put/2 when updating existing key with a new immediate value (atom, small integer, pid, port).

OTP-14986
Application(s):
erts
Related Id(s):
PR-1745

*** POTENTIAL INCOMPATIBILITY ***

erlang:process_info/1 has been changed to no longer include messages by default. Instead erlang:process_info/2 should be used.

OTP-14987
Application(s):
erts

New erlang:system_info(ets_count) to get total number of ets tables existing at the local node.

OTP-14994
Application(s):
erts

New NIF functions: enif_mutex_name, enif_cond_name, enif_rwlock_name, enif_thread_name, enif_vfprintf, enif_vsnprintf.

OTP-15026
Application(s):
erts

When erlang:system_flag(backtrace_depth, 0) has been called, all exceptions will now contain the entry for *one* function (despite the zero). It used to be that a hand-made stack backtrace passed to erlang:raise/3 would be be truncated to an empty list.

OTP-15031
Application(s):
erts

Fixed bug for named ets tables which could cause unexpected results from matchspec iteration functions (ets:select* and ets:match*) if the table was deleted and recreated with the same name during the iteration. The iteration could incorrectly continue through the recreated table. The expected correct behavior is now for the iteration call to fail with a badarg exception if the table is deleted before the iteration has completed.

OTP-15037
Application(s):
compiler, erts
Related Id(s):
PR-1784 , PR-1802

*** HIGHLIGHT ***

Two new guards BIFs operating on maps have been added: map_get/2 and is_map_key/2. They do the same as maps:get/2 and maps:is_key/2, respectively, except that they are allowed to be used in guards.

OTP-15081
Application(s):
erts

Release run-queue lock while cleaning up terminated dirty process.

OTP-15086
Application(s):
erts, kernel
Related Id(s):
PR-1694

The callback module passed as -epmd_module to erl has been expanded to be able to do name and port resolving.

Documentation has also been added in the erl_epmd reference manual and ERTS User's Guide How to Implement an Alternative Service Discovery for Erlang Distribution.

Full runtime dependencies of erts-10.0: kernel-6.0, sasl-3.0.1, stdlib-3.5

et-1.6.2 #

OTP-14861
Application(s):
et, eunit, mnesia, parsetools, reltool

Calls to erlang:get_stacktrace() are removed.

Full runtime dependencies of et-1.6.2: erts-9.0, kernel-5.3, runtime_tools-1.10, stdlib-3.4, wx-1.2

eunit-2.3.6 #

OTP-14861
Application(s):
et, eunit, mnesia, parsetools, reltool

Calls to erlang:get_stacktrace() are removed.

Full runtime dependencies of eunit-2.3.6: erts-9.0, kernel-5.3, stdlib-3.4

ftp-1.0 #

OTP-14113
Application(s):
inets

Split inets and create separate ftp and tftp apps.

Full runtime dependencies of ftp-1.0: erts-7.0, kernel-6.0, stdlib-3.5

hipe-3.18 #

OTP-14785
Application(s):
hipe
Related Id(s):
PR-1632

Optimize receive statements that are only waiting for messages containing a reference created before the receive. All messages that existed in the queue when the reference was created will be bypassed, as they cannot possibly contain the reference. This optimization has existed for vanilla BEAM since OTP R14.

OTP-14900
Application(s):
hipe
Related Id(s):
PR-1621 , PR-1685

Add validation pass to hipe compiler to detect internal errors causing primop calls that may trigger an unsafe GC at run-time. The pass can be disabled with option no_verify_gcsafe.

OTP-14903
Application(s):
erts, hipe

Make hipe compiled code work on x86_64 (amd64) with OS security feature PIE, where executable code can be loaded into a random location. Old behavior, if hipe was enabled, was to disable PIE build options for the VM.

OTP-14941
Application(s):
hipe
Related Id(s):
PR-1718

Inline more type test BIFs; is_number, is_bitstring, is_map.

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

inets-7.0 #

OTP-14726
Application(s):
inets

Fixed HTTP content injection bug in httpc (ERL-456).

OTP-14729
Application(s):
inets

Fixed support for URI-references in HTTP 'Location' header (ERL-333).

OTP-15006
Application(s):
inets

Fix broken 'Content-Type' handling in httpc (ERL-536).

OTP-15021
Application(s):
inets

Fix handling of relative paths in the script_alias property of httpd (ERL-574).

OTP-15025
Application(s):
inets

Fix httpd:reload_config/2 with path() as the first argument (ERL-578).

OTP-15042
Application(s):
inets

Improved gracefulness.

OTP-14113
Application(s):
inets

Split inets and create separate ftp and tftp apps.

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

jinterface-1.9 #

OTP-14844
Application(s):
jinterface

Add module package name for Java 9

kernel-6.0 #

OTP-10551
Application(s):
kernel

Clarify the documentation of rpc:multicall/5.

OTP-13133
Application(s):
kernel
Related Id(s):
PR-1557

The DNS resolver when getting econnrefused from a server retained an invalid socket so look up towards the next server(s) also failed.

OTP-13761
Application(s):
kernel
Related Id(s):
ERL-503

*** POTENTIAL INCOMPATIBILITY ***

No resolver backend returns V4Mapped IPv6 addresses any more. This was inconsistent before, some did, some did not. To facilitate working with such addresses a new function inet:ipv4_mapped_ipv6_address/1 has been added.

OTP-14019
Application(s):
erts, kernel, stdlib
Related Id(s):
ERL-550

The type specifications for file:posix/0 and inet:posix/0 have been updated according to which errors file and socket operations should be able to return.

OTP-14501
Application(s):
kernel

Fix name resolving in IPv6 only environments when doing the initial distributed connection.

OTP-14543
Application(s):
erts, kernel, stdlib
Related Id(s):
ERL-370

*** POTENTIAL INCOMPATIBILITY ***

File operations used to accept filenames containing null characters (integer value zero). This caused the name to be truncated and in some cases arguments to primitive operations to be mixed up. Filenames containing null characters inside the filename are now *rejected* and will cause primitive file operations to fail.

Also environment variable operations used to accept names and values of environment variables containing null characters (integer value zero). This caused operations to silently produce erroneous results. Environment variable names and values containing null characters inside the name or value are now *rejected* and will cause environment variable operations to fail.

Primitive environment variable operations also used to accept the $= character in environment variable names causing various problems. $= characters in environment variable names are now also *rejected*.

Also os:cmd/1 now reject null characters inside its command.

erlang:open_port/2 will also reject null characters inside the port name from now on.

OTP-14666
Application(s):
erts, kernel

*** POTENTIAL INCOMPATIBILITY ***

os:putenv and os:getenv no longer access the process environment directly and instead work on a thread-safe emulation. The only observable difference is that it's *not* kept in sync with libc getenv(3) / putenv(3), so those who relied on that behavior in drivers or NIFs will need to add manual synchronization.

On Windows this means that you can no longer resolve DLL dependencies by modifying the PATH just before loading the driver/NIF. To make this less of a problem, the emulator now adds the target DLL's folder to the DLL search path.

OTP-14681
Application(s):
kernel

Fixed connection tick toward primitive hidden nodes (erl_interface) that could cause faulty tick timeout in rare cases when payload data is sent to hidden node but not received.

OTP-14991
Application(s):
kernel
Related Id(s):
PR1705

Make group react immediately on an EXIT-signal from shell in e.g ssh.

OTP-15001
Application(s):
erts, kernel

Calls to gen_tcp:send/2 on closed sockets now returns {error, closed} instead of {error,enotconn}.

OTP-15071
Application(s):
kernel

*** POTENTIAL INCOMPATIBILITY ***

The included_applications key are no longer duplicated as application environment variable. Earlier, the included applications could be read both with application:get[_all]_env(...) and application:get[_all]_key(...) functions. Now, it can only be read with application:get[_all]_key(...).

OTP-15118
Application(s):
erts, kernel

*** POTENTIAL INCOMPATIBILITY ***

Owner and group changes through file:write_file_info, file:change_owner, and file:change_group will no longer report success on permission errors.

OTP-13295
Application(s):
erts, kernel, sasl, stdlib

*** POTENTIAL INCOMPATIBILITY ***

A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide.

Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code.

Notice the following potential incompatibilities:

-- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger.

In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger.

-- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged.

By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP.

Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level.

To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events.

Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version.

OTP-13713
Application(s):
kernel
Related Id(s):
PR-1645

The function inet:i/0 has been documented.

OTP-14359
Application(s):
kernel
Related Id(s):
PR-1816

Typespecs for netns and bind_to_device options have been added to gen_tcp, gen_udp and gen_sctp functions.

OTP-14459
Application(s):
erts, kernel

*** HIGHLIGHT ***

New functionality for implementation of alternative carriers for the Erlang distribution has been introduced. This mainly consists of support for usage of distribution controller processes (previously only ports could be used as distribution controllers). For more information see ERTS User's Guide ➜ How to implement an Alternative Carrier for the Erlang Distribution ➜ Distribution Module.

OTP-14899
Application(s):
erts, kernel

*** HIGHLIGHT ***

seq_trace labels may now be any erlang term.

OTP-14969
Application(s):
kernel, ssl
Related Id(s):
ERL-598 , OTP-14465

The SSL distribution protocol -proto inet_tls has stopped setting the SSL option server_name_indication. New verify funs for client and server in inet_tls_dist has been added, not documented yet, that checks node name if present in peer certificate. Usage is still also yet to be documented.

OTP-15009
Application(s):
kernel
Related Id(s):
ERL-601

Changed timeout of gen_server calls to auth server from default 5 seconds to infinity.

OTP-15086
Application(s):
erts, kernel
Related Id(s):
PR-1694

The callback module passed as -epmd_module to erl has been expanded to be able to do name and port resolving.

Documentation has also been added in the erl_epmd reference manual and ERTS User's Guide How to Implement an Alternative Service Discovery for Erlang Distribution.

OTP-15137
Application(s):
kernel
Related Id(s):
PR-1838

Included config file specified with relative path in sys.config are now first searched for relative to the directory of sys.config itself. If not found, it is also searched for relative to the current working directory. The latter is for backwards compatibility.

Full runtime dependencies of kernel-6.0: erts-10.0, sasl-3.0, stdlib-3.5

mnesia-4.15.4 #

OTP-14861
Application(s):
et, eunit, mnesia, parsetools, reltool

Calls to erlang:get_stacktrace() are removed.

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

observer-2.8 #

OTP-14993
Application(s):
observer
Related Id(s):
PR-1666

Added possibility to garbage collect selected processes and fixed a crash when the saved config file contained bad data.

OTP-14902
Application(s):
common_test, observer, public_key, ssl

Use uri_string module instead of http_uri.

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

os_mon-2.4.5 #

OTP-14513
Application(s):
os_mon

Fix disksup to handle mount paths with spaces in them.

Full runtime dependencies of os_mon-2.4.5: erts-6.0, kernel-3.0, mnesia-4.12, otp_mibs-1.0.9, sasl-2.4, snmp-4.25.1, stdlib-2.0

otp_mibs-1.2 #

OTP-15141
Application(s):
otp_mibs

The otp_mibs application has been deprecated and will be removed in a future release.

Full runtime dependencies of otp_mibs-1.2: erts-6.0, kernel-3.0, mnesia-4.12, snmp-4.25.1, stdlib-2.0

parsetools-2.1.7 #

OTP-14861
Application(s):
et, eunit, mnesia, parsetools, reltool

Calls to erlang:get_stacktrace() are removed.

Full runtime dependencies of parsetools-2.1.7: erts-6.0, kernel-3.0, stdlib-2.5

public_key-1.6 #

OTP-14788
Application(s):
public_key
Related Id(s):
OTP-14624

Update calls to the base64 module to conform to that module's type specifications.

OTP-14902
Application(s):
common_test, observer, public_key, ssl

Use uri_string module instead of http_uri.

OTP-14962
Application(s):
public_key
Related Id(s):
ERL-542 , OTP-15102

A new function - public_key:pkix_verify_hostname_match_fun/1 - returns a fun to be given as option match_fun to public_key:pkix_verify_hostname/3 or via ssl.

The fun makes the verify hostname matching according to the specific rules for the protocol in the argument. Presently only https is supported.

OTP-15093
Application(s):
public_key

Compleate PKCS-8 encoding support and enhance the decoding of 'PrivateKeyInfo' to conform to the rest of Erlang public_key API.

OTP-15113
Application(s):
public_key, ssh

A new moduli file is generated. This file is used for the recommended diffie-hellman-group-exchange-sha256 key exchange algorithm in SSH.

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

reltool-0.7.6 #

OTP-14861
Application(s):
et, eunit, mnesia, parsetools, reltool

Calls to erlang:get_stacktrace() are removed.

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

runtime_tools-1.13 #

OTP-14904
Application(s):
runtime_tools

New utility module scheduler which makes it easier to measure scheduler utilization.

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

sasl-3.2 #

OTP-13295
Application(s):
erts, kernel, sasl, stdlib

*** POTENTIAL INCOMPATIBILITY ***

A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide.

Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code.

Notice the following potential incompatibilities:

-- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger.

In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger.

-- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged.

By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP.

Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level.

To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events.

Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version.

OTP-14469
Application(s):
sasl

*** POTENTIAL INCOMPATIBILITY ***

The old and outdated "Status Inspection" tool (modules si and si_sasl_sup) is removed.

OTP-14950
Application(s):
sasl
Related Id(s):
PR-1560

When creating the release tar file, systools now includes sys.config.src if it exists in the $ROOT/releases/<vsn>/ directory. This is to allow adjustments, e.g. resolving environment variables, after unpacking the release, but before installing it. This functionality requires a custom tool which uses sys.config.src as input and creates a correct sys.config file.

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

ssh-4.7 #

OTP-14955
Application(s):
ssh

If the daemon port listener is restarted, it could potentially fail with eaddrinuse if the timing is unlucky. It will now retry and exponentially back off the listener restart a few times before failing.

OTP-15084
Application(s):
ssh

A channel callback module always got the module name as reason in a call to terminate. Now it will get the proper Reason, usually 'normal'.

OTP-14851
Application(s):
ssh

*** POTENTIAL INCOMPATIBILITY ***

The option exec has new option values defined to make it much more easy to implement an own exec server.

An option called exec for daemons implementing the handling of 'exec' requests has existed a long time but has been undocumented. The old undocumented value - as well as its behavior - is kept for compatibility EXCEPT that error messages are changed and are sent as "stderror" text.

OTP-14880
Application(s):
ssh

Updated ssh_connection:shell/2 documentation.

OTP-14896
Application(s):
ssh

The experimental ssh_dbg module is completely re-written. Its purpose is to make tracing and debugging easier on deployed systems.

OTP-14988
Application(s):
ssh

The SSH supervisor structure has been slightly changed. This makes stopping the ssh application considerably faster if there are open connections. This is important in for example restarts.

OTP-15002
Application(s):
ssh
Related Id(s):
OTP-15030

*** POTENTIAL INCOMPATIBILITY ***

The type specifications in SSH are completly reworked and the following types are renamed:

ssh:ssh_connection_ref() is changed to ssh:connection_ref(),

ssh:ssh_daemon_ref() is changed to ssh:daemon_ref(),

ssh:ssh_channel_id() is changed to ssh:channel_id().

OTP-15019
Application(s):
ssh

The internal timer handling in SSH is now based on the gen_statem timers.

OTP-15028
Application(s):
ssh

Removed the undocumented and unused modules ssh_client_key.erl and ssh_server_key.erl.

OTP-15030
Application(s):
ssh
Related Id(s):
OTP-15002

The Reference Manual pages are partly updated.

The ssh page is now generated from specs and types, is restructured and is partly rephrased.

The ssh_channel, ssh_connection, ssh_client_key_api, ssh_server_key_api and ssh_sftp pages are updated with links, correct type names and some minor changes.

OTP-15041
Application(s):
ssh

The behaviors ssh_channel and ssh_daemon_channel are renamed to ssh_client_channel and ssh_server_channel respectively.

The old modules are kept for compatibility but should preferably be replaced when updating callback modules referring them.

OTP-15051
Application(s):
ssh

New test suite for channels.

OTP-15069
Application(s):
ssh
Related Id(s):
ERL-617

The rekey_limit option could now set the max time as well as the previously max data amount.

OTP-15082
Application(s):
ssh

Changed process exit supervision from links to monitors.

OTP-15083
Application(s):
ssh

Better handling of misbehaving channel callback modules.

OTP-15113
Application(s):
public_key, ssh

A new moduli file is generated. This file is used for the recommended diffie-hellman-group-exchange-sha256 key exchange algorithm in SSH.

Full runtime dependencies of ssh-4.7: crypto-4.2, erts-6.0, kernel-3.0, public_key-1.5.2, stdlib-3.3

ssl-9.0 #

OTP-14974
Application(s):
ssl

Correct handling of ECDH suites.

OTP-15050
Application(s):
ssl

Proper handling of clients that choose to send an empty answer to a certificate request

OTP-14465
Application(s):
ssl

Distribution over SSL (inet_tls) has, to improve performance, been rewritten to not use intermediate processes and ports.

OTP-14547
Application(s):
ssl

Add suport for ECDHE_PSK cipher suites

OTP-14768
Application(s):
ssl

*** INCOMPATIBILITY with possibly ***

For security reasons no longer support 3-DES cipher suites by default

OTP-14769
Application(s):
ssl

*** INCOMPATIBILITY with possible ***

For security reasons RSA-key exchange cipher suites are no longer supported by default

OTP-14789
Application(s):
ssl

*** INCOMPATIBILITY with possibly ***

The interoperability option to fallback to insecure renegotiation now has to be explicitly turned on.

OTP-14824
Application(s):
ssl

*** POTENTIAL INCOMPATIBILITY ***

Drop support for SSLv2 enabled clients. SSLv2 has been broken for decades and never supported by the Erlang SSL/TLS implementation. This option was by default disabled and enabling it has proved to sometimes break connections not using SSLv2 enabled clients.

OTP-14882
Application(s):
ssl

*** INCOMPATIBILITY with possibly ***

Remove CHACHA20_POLY1305 ciphers form default for now. We have discovered interoperability problems, ERL-538, that we believe needs to be solved in crypto.

OTP-14888
Application(s):
ssl

Generalize DTLS packet multiplexing to make it easier to add future DTLS features and uses.

OTP-14902
Application(s):
common_test, observer, public_key, ssl

Use uri_string module instead of http_uri.

OTP-14969
Application(s):
kernel, ssl
Related Id(s):
ERL-598 , OTP-14465

The SSL distribution protocol -proto inet_tls has stopped setting the SSL option server_name_indication. New verify funs for client and server in inet_tls_dist has been added, not documented yet, that checks node name if present in peer certificate. Usage is still also yet to be documented.

OTP-15056
Application(s):
ssl

Deprecate ssl:ssl_accept/[1,2,3] in favour of ssl:handshake/[1,2,3]

OTP-15102
Application(s):
ssl
Related Id(s):
ERL-542 , OTP-14962

Customizes the hostname verification of the peer certificate, as different protocols that use TLS such as HTTP or LDAP may want to do it differently

OTP-15106
Application(s):
ssl

Add utility function for converting erlang cipher suites to a string represenation (ERL-600).

OTP-15142
Application(s):
ssl

*** HIGHLIGHT ***

First version with support for DTLS

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

stdlib-3.5 #

OTP-14015
Application(s):
stdlib

gen_statem improvements.

When using an exception that is valid but not allowed in a state enter call, the reason has been changed from {bad_action_from_state_function,Action} to {bad_state_enter_action_from_state_function,Action}.

Timer parsing has been improved. Many erroneous timeout tuples was not handled correctly.

The documentation has been updated, in particular the User's Guide and the pointer to it from the Reference Manual is much more obvious.

OTP-14019
Application(s):
erts, kernel, stdlib
Related Id(s):
ERL-550

The type specifications for file:posix/0 and inet:posix/0 have been updated according to which errors file and socket operations should be able to return.

OTP-14543
Application(s):
erts, kernel, stdlib
Related Id(s):
ERL-370

*** POTENTIAL INCOMPATIBILITY ***

File operations used to accept filenames containing null characters (integer value zero). This caused the name to be truncated and in some cases arguments to primitive operations to be mixed up. Filenames containing null characters inside the filename are now *rejected* and will cause primitive file operations to fail.

Also environment variable operations used to accept names and values of environment variables containing null characters (integer value zero). This caused operations to silently produce erroneous results. Environment variable names and values containing null characters inside the name or value are now *rejected* and will cause environment variable operations to fail.

Primitive environment variable operations also used to accept the $= character in environment variable names causing various problems. $= characters in environment variable names are now also *rejected*.

Also os:cmd/1 now reject null characters inside its command.

erlang:open_port/2 will also reject null characters inside the port name from now on.

OTP-14958
Application(s):
stdlib
Related Id(s):
PR-1735

Make io_lib:unscan_format/1 work with pad char and default precision.

OTP-14971
Application(s):
stdlib
Related Id(s):
PR-1743

The control sequence modifiers t and l can be used together in the same control sequence which makes it possible to have Unicode atoms and no detection of printable character lists at the same time.

OTP-15035
Application(s):
stdlib
Related Id(s):
ERL-613

Fix a bug in the Erlang code linter: the check of guard expressions no longer returns false if the map syntax is used. The bug affected the Erlang shell, the Debugger, and other modules evaluating abstract code.

OTP-15049
Application(s):
stdlib

A sys debug fun of type {Fun,State} should not be possible to install twice. This was, however, possible if the current State was 'undefined', which was mistaken for non-existing fun. This has been corrected.

OTP-15101
Application(s):
stdlib

Fix io:putchars/2 stacktrace rewriting at errors to point to a valid function.

OTP-13019
Application(s):
stdlib
Related Id(s):
PR-1490

The gen_server has gotten a new callback handle_continue/2 for check pointing the state. This is useful at least when implementing behaviours on top of gen_server and for some start up scenarios.

OTP-13073
Application(s):
stdlib
Related Id(s):
PR-1595

*** POTENTIAL INCOMPATIBILITY ***

The semantics of timeout parameter {clean_timeout,infinity} to gen_statem:call/3 has been changed to use a proxy process for the call. With this change clean_timeout implicates a proxy process with no exceptions. This may be a hard to observe incompatibility: in the presence of network problems a late reply could arrive in the caller's message queue when catching errors. That will not happen after this correction.

The semantics of timeout parameter infinity has not been changed.

OTP-13295
Application(s):
erts, kernel, sasl, stdlib

*** POTENTIAL INCOMPATIBILITY ***

A new logging API is added to Erlang/OTP, see the logger(3) manual page, and section Logging in the Kernel User's Guide.

Calls to error_logger are automatically redirected to the new API, and legacy error logger event handlers can still be used. It is, however, recommended to use the Logger API directly when writing new code.

Notice the following potential incompatibilities:

-- Kernel configuration parameters error_logger still works, but is overruled if the default handler's output destination is configured with Kernel configuration parameter logger.

In general, parameters for configuring error logger are overwritten by new parameters for configuring Logger.

-- The concept of SASL error logging is deprecated, meaning that by default the SASL application does not affect which log events are logged.

By default, supervisor reports and crash reports are logged by the default Logger handler started by Kernel, and end up at the same destination (terminal or file) as other standard log event from Erlang/OTP.

Progress reports are not logged by default, but can be enabled by setting the primary log level to info, for example with the Kernel configuration parameter logger_level.

To obtain backwards compatibility with the SASL error logging functionality from earlier releases, set Kernel configuration parameter logger_sasl_compatible to true. This prevents the default Logger handler from logging any supervisor-, crash-, or progress reports. Instead, SASL adds a separate Logger handler during application start, which takes care of these log events. The SASL configuration parameters sasl_error_logger and sasl_errlog_type specify the destination (terminal or file) and severity level to log for these events.

Since Logger is new in Erlang/OTP 21.0, we do reserve the right to introduce changes to the Logger API and functionality in patches following this release. These changes might or might not be backwards compatible with the initial version.

OTP-13413
Application(s):
stdlib

Add functions calendar:system_time_to_local_time/2 and calendar:system_time_to_universal_time/2.

OTP-13764
Application(s):
stdlib
Related Id(s):
PR-1574

Functions rand:uniform_real/0 and rand:uniform_real_s/1 have been added. They produce uniformly distributed numbers in the range 0.0 =< X < 1.0 that are as close to random real numbers as Normalized IEEE 754 Double Precision allows. Because the random real number exactly 0.0 is infinitely improbable they will never return exactly 0.0.

These properties are useful when you need to call for example math:log(X) or 1 / X on a random value X, since that will never fail with a number from these new functions.

OTP-14012
Application(s):
stdlib

Added maps:iterator/0 and maps:next/1 to be used for iterating over the key-value associations in a map.

OTP-14439
Application(s):
compiler, dialyzer, erts, stdlib

*** POTENTIAL INCOMPATIBILITY ***

Changed the default behaviour of .erlang loading: .erlang is no longer loaded from the current directory. c:erlangrc(PathList) can be used to search and load an .erlang file from user specified directories.

escript, erlc, dialyzer and typer no longer load an .erlang at all.

OTP-14496
Application(s):
stdlib

Added new uri_string module to stdlib for handling URIs (RFC 3986).

OTP-14503
Application(s):
stdlib

Update Unicode specification to version 10.0.

OTP-14577
Application(s):
stdlib

*** POTENTIAL INCOMPATIBILITY ***

filelib:wildcard() now allows characters with a special meaning to be escaped using backslashes.

This is an incompatible change, but note that the use of backslashes in wildcards would already work differently on Windows and Unix. Existing calls to filelib:wildcard() needs to be updated. On Windows, directory separators must always be written as a slash.

OTP-14586
Application(s):
stdlib

The supervisor now stores its child specifications in a map instead of a list. This causes a significant improvement when starting many children under a non-simple_one_for_one supervisor.

OTP-14624
Application(s):
stdlib
Related Id(s):
PR-1565

The base64 module is optimized.

Note that the functions encode/1, decode/1, and mime_decode/1 fail unless called with an argument of the documented type. They used to accept any iodata().

OTP-14675
Application(s):
stdlib
Related Id(s):
PR-102

Add function lists:search/2.

OTP-14747
Application(s):
stdlib

uri_string module extended with functions for handling application/x-www-form-urlencoded query strings based on the HTML5 specification.

OTP-14764
Application(s):
stdlib

Add functions calendar:rfc3339_to_system_time/1,2 and calendar:system_time_to_rfc3339/1,2.

OTP-14826
Application(s):
stdlib
Related Id(s):
1540 , PR

The stack traces returned by the functions of the erl_eval module more accurately reflect where the exception occurred.

OTP-14834
Application(s):
stdlib
Related Id(s):
1608 , PR

Add options atime, mtime, ctime, uid, and gid to the erl_tar:add/3,4 functions.

OTP-14884
Application(s):
erts, stdlib

Added ets:whereis/1 for retrieving the table identifier of a named table.

OTP-14910
Application(s):
stdlib

Improved URI normalization functions in the uri_string module.

OTP-14983
Application(s):
stdlib

The new functions io_lib:fwrite/3 and io_lib:format/3 take a third argument, an option list. The only option is chars_limit, which is used for limiting the number of returned characters. The limit is soft, which means that the number of returned characters exceeds the limit with at most a smallish amount. If the limit is set, the functions format/3 and fwrite/3 try to distribute the number of characters evenly over the control sequences pPswW. Furthermore, the control sequences pPwP try to distribute the number of characters evenly over substructures.

A modification of the control sequences pPwW is that even if there is no limit on the number of returned characters, all associations of a map are printed to the same depth. The aim is to give a more consistent output as the order of map keys is not defined. As before, if the depth is less than the number of associations of a map, the selection of associations to print is arbitrary.

OTP-14996
Application(s):
stdlib
Related Id(s):
ERL-557 , PR-1703

Add functions ordsets:is_empty/1 and sets:is_empty/1.

OTP-14998
Application(s):
stdlib

Improve performance of string:uppercase/1, string:lowercase/1 and string:casefold/1 when handling ASCII characters.

OTP-15003
Application(s):
compiler, stdlib

External funs with literal values for module, name, and arity (e.g. erlang:abs/1) are now treated as literals. That means more efficient code that produces less garbage on the heap.

OTP-15047
Application(s):
stdlib

sys:statistics(Pid,get) did not report 'out' messages from gen_server. This is now corrected.

OTP-15048
Application(s):
stdlib

A sys debug function can now have the format {Id,Fun,State} in addition to the old {Fun,State}. This allows installing multiple instances of a debug fun.

OTP-15072
Application(s):
stdlib
Related Id(s):
1786 , OTP-15114 , PR

*** POTENTIAL INCOMPATIBILITY ***

The lib module is removed:

-- lib:error_message/2 is removed.

-- lib:flush_receive/0 is removed.

-- lib:nonl/1 is removed.

-- lib:progname/0 is replaced by ct:get_progname/0.

-- lib:send/2 is removed.

-- lib:sendw/2 is removed.

OTP-15078
Application(s):
stdlib

Function ets:delete_all_objects/1 now yields the scheduler thread for large tables that take significant time to clear. This to improve real time characteristics of other runnable processes.

OTP-15103
Application(s):
stdlib
Related Id(s):
ERL-607

*** POTENTIAL INCOMPATIBILITY ***

In control sequences of the functions io:fwrite/2,3 and io_lib:fwrite/2,3 containing p or P, a field width of value 0 means that no line breaks are inserted. This is in contrast to the old behaviour, where 0 used to insert line breaks after every subterm. To insert line breaks after every subterm, a field width of value 1 can be used.

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

syntax_tools-2.1.5 #

OTP-15098
Application(s):
syntax_tools
Related Id(s):
ERIERL-177

Fix a bug regarding reverting map types.

OTP-15036
Application(s):
asn1, edoc, eldap, syntax_tools

Update to use the new string api instead of the old.

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

tftp-1.0 #

OTP-14113
Application(s):
inets

Split inets and create separate ftp and tftp apps.

Full runtime dependencies of tftp-1.0: kernel-6.0, stdlib-3.5

tools-3.0 #

OTP-14961
Application(s):
erts, tools

*** POTENTIAL INCOMPATIBILITY ***

Added instrument:allocations and instrument:carriers for retrieving information about memory utilization and fragmentation.

The old instrument interface has been removed, as have the related options +Mim and +Mis.

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

wx-1.8.4 #

OTP-15027
Application(s):
wx

Changed implementation so wx can now be built towards wxWidgets-3.1.1.

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

xmerl-1.3.17 #

OTP-15039
Application(s):
xmerl

Fix typos in documentation.

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