Patch Package: OTP 21.0
Git Tag: OTP-21.0
Date: 2018-05-29
Trouble Report Id: OTP-10551, OTP-11462, OTP-11694, OTP-13019,
OTP-13073, OTP-13133, OTP-13295, OTP-13370,
OTP-13413, OTP-13713, OTP-13760, OTP-13761,
OTP-13764, OTP-14012, OTP-14015, OTP-14019,
OTP-14113, OTP-14256, OTP-14346, OTP-14359,
OTP-14370, OTP-14439, OTP-14459, OTP-14465,
OTP-14469, OTP-14492, OTP-14493, OTP-14496,
OTP-14497, OTP-14501, OTP-14502, OTP-14503,
OTP-14505, OTP-14508, OTP-14513, OTP-14518,
OTP-14525, OTP-14537, OTP-14543, OTP-14547,
OTP-14575, OTP-14577, OTP-14586, OTP-14589,
OTP-14594, OTP-14604, OTP-14610, OTP-14613,
OTP-14615, OTP-14624, OTP-14626, OTP-14637,
OTP-14651, OTP-14652, OTP-14654, OTP-14666,
OTP-14667, OTP-14675, OTP-14680, OTP-14681,
OTP-14682, OTP-14683, OTP-14687, OTP-14692,
OTP-14712, OTP-14713, OTP-14719, OTP-14726,
OTP-14729, OTP-14747, OTP-14764, OTP-14768,
OTP-14769, OTP-14774, OTP-14780, OTP-14782,
OTP-14785, OTP-14788, OTP-14789, OTP-14795,
OTP-14797, OTP-14808, OTP-14824, OTP-14826,
OTP-14830, OTP-14834, OTP-14844, OTP-14851,
OTP-14855, OTP-14861, OTP-14864, OTP-14880,
OTP-14882, OTP-14884, OTP-14888, OTP-14896,
OTP-14899, OTP-14900, OTP-14901, OTP-14902,
OTP-14903, OTP-14904, OTP-14909, OTP-14910,
OTP-14928, OTP-14931, OTP-14932, OTP-14934,
OTP-14937, OTP-14941, OTP-14943, OTP-14948,
OTP-14950, OTP-14951, OTP-14954, OTP-14955,
OTP-14956, OTP-14957, OTP-14958, OTP-14959,
OTP-14960, OTP-14961, OTP-14964, OTP-14965,
OTP-14966, OTP-14968, OTP-14969, OTP-14970,
OTP-14971, OTP-14974, OTP-14975, OTP-14976,
OTP-14977, OTP-14978, OTP-14979, OTP-14983,
OTP-14986, OTP-14988, OTP-14991, OTP-14992,
OTP-14993, OTP-14994, OTP-14996, OTP-14998,
OTP-15001, OTP-15002, OTP-15003, OTP-15006,
OTP-15008, OTP-15009, OTP-15013, OTP-15015,
OTP-15019, OTP-15021, OTP-15024, OTP-15025,
OTP-15026, OTP-15027, OTP-15028, OTP-15029,
OTP-15030, OTP-15031, OTP-15032, OTP-15033,
OTP-15035, OTP-15036, OTP-15037, OTP-15039,
OTP-15041, OTP-15042, OTP-15044, OTP-15045,
OTP-15047, OTP-15048, OTP-15049, OTP-15050,
OTP-15056, OTP-15062, OTP-15069, OTP-15071,
OTP-15072, OTP-15078, OTP-15079, OTP-15080,
OTP-15081, OTP-15082, OTP-15084, OTP-15085,
OTP-15086, OTP-15087, OTP-15088, OTP-15090,
OTP-15091, OTP-15093
Seq num: ERL-327, ERL-370, ERL-444, ERL-500, ERL-503,
ERL-511, ERL-514, ERL-549, ERL-550, ERL-557,
ERL-563, ERL-572, ERL-576, ERL-579, ERL-593,
ERL-598, ERL-601, ERL-613, ERL-614, ERL-615,
ERL-617, ERL-88
System: OTP
Release: 21
Application: asn1-5.0.6, common_test-1.16, compiler-7.2,
crypto-4.3, debugger-4.2.5, dialyzer-3.3,
diameter-2.1.5, edoc-0.9.3, eldap-1.2.4,
erl_docgen-0.8, erl_interface-3.10.3,
erts-10.0, et-1.6.2, eunit-2.3.6, ftp-1.0,
hipe-3.18, inets-7.0, jinterface-1.9,
kernel-6.0, mnesia-4.15.4, observer-2.8,
os_mon-2.4.5, parsetools-2.1.7,
public_key-1.6, reltool-0.7.6,
runtime_tools-1.13, sasl-3.2, ssh-4.7,
ssl-9.0, stdlib-3.5, syntax_tools-2.1.5,
tftp-1.0, tools-3.0, wx-1.8.4, xmerl-1.3.17
Predecessor: OTP
Check out the git tag OTP-21.0, and build a full OTP system including
documentation.
---------------------------------------------------------------------
--- HIGHLIGHTS ------------------------------------------------------
---------------------------------------------------------------------
OTP-14370 Application(s): erts
*** POTENTIAL INCOMPATIBILITY ***
Truly asynchronous auto-connect. Earlier, when
erlang:send was done toward an unconnected node, the
function would not return until the connection setup
had completed (or failed). Now the function returns
directly after the signal 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-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).
---------------------------------------------------------------------
--- 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 with the Kernel configuration parameter
logger_progress_reports.
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.
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. Two 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 done toward an unconnected node, the
function would not return until the connection setup
had completed (or failed). Now the function returns
directly after the signal 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
An option exec for daemons implementing the 'exec' has
existed a long time but has been undocumented. The old
behaviour is kept for compatibility EXCEPT that error
messages are changed and are sent as "stderror" text.
A new option value is defined to make it much more easy
to implement an own exec server.
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 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, 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.
---------------------------------------------------------------------
--- asn1-5.0.6 ------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 ------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 ----------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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.
--- Improvements and New Features ---
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 ------------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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.
--- Improvements and New Features ---
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 --------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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 ----------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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-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 --------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
OTP-15045 Application(s): diameter
Fix documentation typos.
Full runtime dependencies of diameter-2.1.5: erts-6.4, kernel-3.2,
ssl-6.0, stdlib-2.4
---------------------------------------------------------------------
--- edoc-0.9.3 ------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 -----------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 --------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
OTP-15091 Application(s): erl_docgen
Update makefile so db_funcs.xsl is a part of the
installed application.
--- Improvements and New Features ---
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 --------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
OTP-15033 Application(s): erl_interface
Fix bug where calling erl_init on certain platforms
could result in a buffer overflow bug.
---------------------------------------------------------------------
--- erts-10.0 -------------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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.
--- Improvements and New Features ---
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 with the Kernel configuration parameter
logger_progress_reports.
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.
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. Two 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 done toward an unconnected node, the
function would not return until the connection setup
had completed (or failed). Now the function returns
directly after the signal 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
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-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 --------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 -----------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 ---------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 -------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 -------------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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.
--- Improvements and New Features ---
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 --------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
OTP-14844 Application(s): jinterface
Add module package name for Java 9
---------------------------------------------------------------------
--- kernel-6.0 ------------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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(...).
--- Improvements and New Features ---
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 with the Kernel configuration parameter
logger_progress_reports.
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.
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.
Full runtime dependencies of kernel-6.0: erts-10.0, sasl-3.0,
stdlib-3.5
---------------------------------------------------------------------
--- mnesia-4.15.4 ---------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 ----------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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.
--- Improvements and New Features ---
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 ----------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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
---------------------------------------------------------------------
--- parsetools-2.1.7 ------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 --------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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.
--- Improvements and New Features ---
OTP-14902 Application(s): common_test, observer, public_key, ssl
Use uri_string module instead of http_uri.
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.
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 ---------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 ----------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 --------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 with the Kernel configuration parameter
logger_progress_reports.
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.
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 ---------------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
OTP-14880 Application(s): ssh
Updated ssh_connection:shell/2 documentation.
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'.
--- Improvements and New Features ---
OTP-14851 Application(s): ssh
*** POTENTIAL INCOMPATIBILITY ***
An option exec for daemons implementing the 'exec' has
existed a long time but has been undocumented. The old
behaviour is kept for compatibility EXCEPT that error
messages are changed and are sent as "stderror" text.
A new option value is defined to make it much more easy
to implement an own exec server.
OTP-14896 Application(s): ssh
The undocumented ssh_dbg module is completely
re-written to facilitate tracing/debugging.
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 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 unused 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-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
Change process exit supervision with monitor instead of
link
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 ---------------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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
--- Improvements and New Features ---
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]
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 ------------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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.
--- Improvements and New Features ---
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 with the Kernel configuration parameter
logger_progress_reports.
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.
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, 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.
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 ----------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 --------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 -------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 --------------------------------------------------------
---------------------------------------------------------------------
--- Improvements and New Features ---
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 ----------------------------------------------------
---------------------------------------------------------------------
--- Fixed Bugs and Malfunctions ---
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
---------------------------------------------------------------------
---------------------------------------------------------------------
---------------------------------------------------------------------