Erlang/OTP 27.0-rc1 is the first release candidate of three before the OTP 27.0 release.
The intention with this release is to get feedback from our users. All feedback is welcome, even if it is only to say that it works for you. We encourage users to try it out and give us feedback either by creating an issue at https://github.com/erlang/otp/issues or by posting to Erlang Forums.
All artifacts for the release can be downloaded from the Erlang/OTP Github release and you can view the new documentation at https://erlang.org/documentation/doc-15.0-rc1/doc. You can also install the latest release using kerl like this:
kerl build 27.0-rc1 27.0-rc1.
Erlang/OTP 27 is a new major release with new features, improvements as well as a few incompatibilities. Some of the new features are highlighted below.
Many thanks to all contributors!
EEP-59 has been implemented. Documentation attributes in source files can now be used to document functions, types, callbacks, and modules.
The entire Erlang/OTP documentation is now using the new documentation system.
Triple-Quoted Strings has been implemented as per EEP 64 to allow a string to encompass a complete paragraph.
Adjacent string literals without intervening white space is now a syntax error, to avoid possible confusion with triple-quoted strings.
Sigils on string literals (both ordinary and triple-quoted) have
been implemented as per
EEP 66. For example,
~"Björn"
or ~b"Björn"
are now equivalent to <<"Björn"/utf8>>
.
The compiler will now merge consecutive updates of the same record.
Safe destructive update of tuples has been implemented in the compiler and runtime system. This allows the VM to update tuples in-place when it is safe to do so, thus improving performance by doing less copying but also by producing less garbage.
The maybe
expression is now enabled by default, eliminating the need
for enabling the maybe_expr
feature.
Native coverage support has been implemented in the JIT. It will
automatically be used by the cover
tool to reduce the execution
overhead when running cover-compiled code. There are also new APIs
to support native coverage without using the cover
tool.
The compiler will now raise a warning when updating record/map literals
to catch a common mistake. For example, the compiler will now emit a
warning for #r{a=1}#r{b=2}
.
The erl
command now supports the -S
flag, which is similar to
the -run
flag, but with some of the rough edges filed off.
By default, escripts will now be compiled instead of interpreted. That
means that the compiler
application must be installed.
The default process limit has been raised to 1048576
processes.
The erlang:system_monitor/2
functionality is now able to monitor long
message queues in the system.
The obsolete and undocumented support for opening a port to an external
resource by passing an atom (or a string) as first argument to
open_port()
, implemented by the vanilla driver,
has been removed. This feature has been scheduled for removal in OTP 27
since the release of OTP 26.
The pid
field has been removed from erlang:fun_info/1,2
.
Multiple trace sessions are now supported.
Several new functions that accept funs have been added to module timer
.
The functions is_equal/2
, map/2
, and filtermap/2
have been added to
the modules sets
, ordsets
, and gb_sets
.
There are new efficient ets
traversal functions with guaranteed atomicity.
For example, ets:next/2
followed by ets:lookup/2
can now be replaced
with ets:next_lookup/1
.
The new function ets:update_element/4
is similar to ets:update_element/3
,
but takes a default tuple as the fourth argument, which will be inserted
if no previous record with that key exists.
binary:replace/3,4
now supports using a fun for supplying the
replacement binary.
The new function proc_lib:set_label/1
can be used to add a descriptive
term to any process that does not have a registered name. The name will
be shown by tools such as c:i/0
and observer
, and it will be included
in crash reports produced by processes using gen_server
, gen_statem
,
gen_event
, and gen_fsm
.
Added functions to retrieve the next higher or lower key/element from
gb_trees
and gb_sets
, as well as returning iterators that start at
given keys/elements.
Calls to ct:capture_start/0
and ct:capture_stop/0
are now synchronous to
ensure that all output is captured.
The default CSS will now include a basic dark mode handling if it is preferred by the browser.
crypto_dyn_iv_init/3
and crypto_dyn_iv_update/3
that were marked as deprecated in Erlang/OTP 25 have been removed.--gui
option for Dialyzer has been removed.ssl
client can negotiate and handle certificate status request (OCSP
stapling support on the client side).tprof
, which combines the functionality of eprof
and cprof
under one interface. It also adds heap profiling.xmerl_xml
, a new export module xmerl_xml_indent
that provides out-of-the box indented output has been added.For more details about new features and potential incompatibilities see the README.
]]>Erlang/OTP 26.2 is the second maintenance patch package for OTP 26, with mostly bug fixes as well as improvements.
For details about bugfixes and potential incompatibilities see the Erlang 26.2 README
The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp
Download links for this and previous versions are found here
]]>Erlang/OTP 26.1 is the first maintenance patch package for OTP 26, with mostly bug fixes as well as improvements.
For details about bugfixes and potential incompatibilities see the Erlang 26.1 README
The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp
Download links for this and previous versions are found here
]]>For details about new features, bugfixes and potential incompatibilities see the Erlang 26.0 README or the Erlang/OTP 26.0 downloads page.
Below are some of the highlights of the release:
There is also a Blogpost about the highlights.
Leex
has been extended with optional column number support.lists
has been extended with enumerate/3
that allows a step value to be supplied.proc_lib:start*/*
has become synchronous when the started process fails. This requires that a failing process use a new function proc_lib:init_fail/2,3
, or exits, to indicate failure. All OTP behaviours have been fixed to do this.There are a lot of new features and improvements in the Erlang shell:
erl.exe
has the same functionality as a normal Unix shell and that werl.exe
is just a symlink to erl.exe
. This makes the Windows Erlang terminal experience identical to that of Unix.Creation and matching of binaries with segments of fixed sizes have been optimized.
Creation and matching of UTF-8 segments have been optimized.
Appending to binaries has been optimized.
The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time.
Thanks to the optimizations above the performance of the base64
module has been significantly improved. For example, on an x86_64 system with the JIT both encode and decode are almost three times faster than in Erlang/OTP 25.
Map comprehensions as suggested in EEP 58 has now been implemented.
Some map operations have been optimized by changing the internal sort order of atom keys.
This changes the (undocumented) order of how atom keys in small maps are printed and returned by maps:to_list/1
and maps:next/1
. The new order is unpredictable and may change between different invocations of the Erlang VM.
Introducing the new function maps:iterator/2
for creating an interator that return the map elements in a deterministic order.
There are also new modifiers k
and K
for the format string in io:format()
to support printing map elements ordered.
Added the new built-in type dynamic()
introduced in EEP 61, PR introducing EEP 61 improving support for gradual type checkers.
Dialyzer has a new incremental mode that be invoked by giving the --incremental
option when running Dialyzer.
This new incremental mode is likely to become the default in a future release.
Multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe.
Support for UTF-8 atoms and strings in the NIF
interface including new functions enif_make_new_atom
, enif_make_new_atom_len
and enif_get_string_length
.
The BIFs min/2
and max/2
are now allowed to be used in guards and match specs.
Improved the selective receive optimization, which can now be enabled for references returned from other
functions. This greatly improves the performance of gen_server:send_request/3
, gen_server:wait_response/2
, and similar functions.
New trace feature call_memory
. Similar to call_time
tracing, but instead of measure accumulated time in traced functions it measures accumulated heap space consumed by traced functions. It can be used to compare how much different functions are contributing to garbage collection being triggered.
It is no longer necessary to enable a feature in the runtime system in order to load modules that are using it. It is sufficient to enable the feature in the compiler when compiling it.
inet:setopts/2
has got 3 new options: reuseport
, reuseport_lb
and exclusiveaddruse
.
Fix so that -fno-omit-frame-pointer
is applied to all of the Erlang VM when using the JIT so that tools, such as perf
, can crawl the process stacks.
In the lists
module, the zip family of functions now takes options to allow handling lists of different lengths.
Added the zip:zip_get_crc32/2
function to retrieve the CRC32
checksum from an opened ZIP archive.
gen_server
optimized by caching callback functions
The modules Erlang DNS resolver inet_res
and helper modules have been updated for RFC6891; to handle OPT RR with DNSSEC OK (DO) bit.
Introduced application:get_supervisor/1
.
Cache OTP boot code paths, to limit how many folders that are being accessed during a module lookup. Can be disabled with -cache_boot_path false
.
Change the client default verify
option to verify_peer
.
Note that this makes it mandatory to also supply trusted CA certificates or explicitly set verify
to verify_none
. This also applies when using the so called anonymous test cipher suites defined in TLS versions pre TLS-1.3.
-proto_dist
inet_tls
), the SSL option {ktls, true}
.Mitigate memory usage from large certificate chains by lowering the maximum handshake size. This should not effect the common cases, if needed it can be configured to a higher value.
For security reasons the SHA1
and DSA
algorithms are no longer among the default values.
use_srtp
hello extension to facilitate for DTLS
users to implement SRTP
functionality.For more details about new features and potential incompatibilities see the readme
Many thanks to all contributors!
Download links for this and previous versions are found here
]]>The intention with this release is to get feedback from our users. All feedback is welcome, even if it is only to say that it works for you. We encourage users to try it out and give us feedback either by creating an issue here https://github.com/erlang/otp/issues or by posting to Erlangforums.
All artifacts for the release can be downloaded from the Erlang/OTP Github release and you can view the new documentation at https://erlang.org/documentation/doc-14.0-rc3/doc/. You can also install the latest release using kerl like this: kerl build 26.0-rc3 26.0-rc3.
Erlang/OTP 26 is a new major release with new features, improvements as well as a few incompatibilities. Some of the new features are highlighted below.
Many thanks to all contributors!
Below are some highlights of the release:
Leex
has been extended with optional column number support.lists
has been extended with
enumerate/3
that allows a step value to be supplied.proc_lib:start*/*
has become synchronous when the
started process fails. This requires that a failing
process use a new function proc_lib:init_fail/2,3
, or
exits, to indicate failure. All OTP behaviours have
been fixed to do this.dynamic()
introduced in EEP 61, PR introducing EEP 61 improving support for gradual type checkers.verify
option to verify_peer
.
Note that this makes it mandatory to also supply trusted CA certificates or explicitly set
verify
to verify_none
. This also applies when using the so called
anonymous test cipher suites defined in TLS versions pre TLS-1.3.There are a lot of new features and improvements in the Erlang shell:
erl.exe
has the same
functionality as a normal Unix shell and that werl.exe
is just a
symlink to erl.exe
. This makes the Windows Erlang terminal
experience identical to that of Unix.Creation and matching of binaries with segments of fixed sizes have been optimized.
Creation and matching of UTF-8 segments have been optimized.
Appending to binaries has been optimized.
The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time.
Thanks to the optimizations above the performance of the base64
module has been
significantly improved. For example, on an x86_64 system with the JIT both encode and
decode are almost three times faster than in Erlang/OTP 25.
Map comprehensions as suggested in EEP 58 has now been implemented.
Some map operations have been optimized by changing the
internal sort order of atom keys. This changes the
(undocumented) order of how atom keys in small maps are
printed and returned by maps:to_list/1
and maps:next/1
.
The new order is unpredictable and may change between
different invocations of the Erlang VM.
Introducing the new function maps:iterator/2
for creating an interator
that return the map elements in a deterministic order.
There are also new modifiers k
and K
for the format
string in io:format()
to support printing map elements
ordered.
--incremental
option when running Dialyzer.
This new incremental mode is likely to become the
default in a future release.Multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe.
Support for UTF-8 atoms and strings in the NIF
interface including new functions enif_make_new_atom
,
enif_make_new_atom_len
and enif_get_string_length
.
The BIFs min/2
and max/2
are now allowed to be used in
guards and match specs.
Improved the selective receive optimization, which can
now be enabled for references returned from other
functions. This greatly improves the performance of
gen_server:send_request/3
, gen_server:wait_response/2
,
and similar functions.
New trace feature call_memory
. Similar to call_time
tracing, but instead of measure accumulated time in
traced functions it measures accumulated heap space
consumed by traced functions. It can be used to compare
how much different functions are contributing to
garbage collection being triggered.
It is no longer necessary to enable a feature in the runtime system in order to load modules that are using it. It is sufficient to enable the feature in the compiler when compiling it.
inet:setopts/2
has got 3 new options: reuseport
, reuseport_lb
and exclusiveaddruse
.
Fix so that -fno-omit-frame-pointer
is applied to all
of the Erlang VM when using the JIT so that tools, such
as perf
, can crawl the process stacks.
In the lists
module, the zip family of functions now takes
options to allow handling lists of different lengths.
Added the zip:zip_get_crc32/2
function to retrieve the
CRC32
checksum from an opened ZIP archive.
gen_server
optimized by caching callback functions
The modules Erlang DNS resolver inet_res
and helper
modules have been updated for RFC6891; to handle OPT RR
with DNSSEC OK (DO) bit.
Introduced application:get_supervisor/1
.
Cache OTP boot code paths, to limit how many folders
that are being accessed during a module lookup. Can be
disabled with -cache_boot_path false
.
-proto_dist
inet_tls
), the SSL option {ktls, true}
.Mitigate memory usage from large certificate chains by lowering the maximum handshake size. This should not effect the common cases, if needed it can be configured to a higher value.
For security reasons the SHA1
and DSA
algorithms are no longer among the default values.
use_srtp
hello extension
to facilitate for DTLS
users to implement SRTP
functionality.For more details about new features and potential incompatibilities see the readme
]]>Erlang/OTP 26.0-rc2 is the second release candidate of three before the OTP 26.0 release. The release candidate 2 fixes some bugs found in the first release candidate and there are also a few additional features.
The intention with this release is to get feedback from our users. All feedback is welcome, even if it is only to say that it works for you. We encourage users to try it out and give us feedback either by creating an issue here https://github.com/erlang/otp/issues or by posting to Erlangforums.
All artifacts for the release can be downloaded from the Erlang/OTP Github release and you can view the new documentation at https://erlang.org/documentation/doc-14.0-rc2/doc/. You can also install the latest release using kerl like this: kerl build 26.0-rc2 26.0-rc2.
Erlang/OTP 26 is a new major release with new features, improvements as well as a few incompatibilities. Some of the new features are highlighted below.
Many thanks to all contributors!
Below are some highlights of the release:
Leex
has been extended with optional column number support.lists
has been extended with
enumerate/3
that allows a step value to be supplied.proc_lib:start*/*
has become synchronous when the
started process fails. This requires that a failing
process use a new function proc_lib:init_fail/2,3
, or
exits, to indicate failure. All OTP behaviours have
been fixed to do this.dynamic()
introduced in EEP 61, PR introducing EEP 61 improving support for gradual type checkers.verify
option to verify_peer
.
Note that this makes it mandatory to also supply trusted CA certificates or explicitly set
verify
to verify_none
. This also applies when using the so called
anonymous test cipher suites defined in TLS versions pre TLS-1.3.There are a lot of new features and improvements in the Erlang shell:
erl.exe
has the same
functionality as a normal Unix shell and that werl.exe
is just a
symlink to erl.exe
. This makes the Windows Erlang terminal
experience identical to that of Unix.Creation and matching of binaries with segments of fixed sizes have been optimized.
Creation and matching of UTF-8 segments have been optimized.
Appending to binaries has been optimized.
The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time.
Thanks to the optimizations above the performance of the base64
module has been
significantly improved. For example, on an x86_64 system with the JIT both encode and
decode are almost three times faster than in Erlang/OTP 25.
Map comprehensions as suggested in EEP 58 has now been implemented.
Some map operations have been optimized by changing the
internal sort order of atom keys. This changes the
(undocumented) order of how atom keys in small maps are
printed and returned by maps:to_list/1
and maps:next/1
.
The new order is unpredictable and may change between
different invocations of the Erlang VM.
Introducing the new function maps:iterator/2
for creating an interator
that return the map elements in a deterministic order.
There are also new modifiers k
and K
for the format
string in io:format()
to support printing map elements
ordered.
--incremental
option when running Dialyzer.
This new incremental mode is likely to become the
default in a future release.Multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe.
Support for UTF-8 atoms and strings in the NIF
interface including new functions enif_make_new_atom
,
enif_make_new_atom_len
and enif_get_string_length
.
The BIFs min/2
and max/2
are now allowed to be used in
guards and match specs.
Improved the selective receive optimization, which can
now be enabled for references returned from other
functions. This greatly improves the performance of
gen_server:send_request/3
, gen_server:wait_response/2
,
and similar functions.
New trace feature call_memory
. Similar to call_time
tracing, but instead of measure accumulated time in
traced functions it measures accumulated heap space
consumed by traced functions. It can be used to compare
how much different functions are contributing to
garbage collection being triggered.
It is no longer necessary to enable a feature in the runtime system in order to load modules that are using it. It is sufficient to enable the feature in the compiler when compiling it.
inet:setopts/2
has got 3 new options: reuseport
, reuseport_lb
and exclusiveaddruse
.
Fix so that -fno-omit-frame-pointer
is applied to all
of the Erlang VM when using the JIT so that tools, such
as perf
, can crawl the process stacks.
In the lists
module, the zip family of functions now takes
options to allow handling lists of different lengths.
Added the zip:zip_get_crc32/2
function to retrieve the
CRC32
checksum from an opened ZIP archive.
gen_server
optimized by caching callback functions
The modules Erlang DNS resolver inet_res
and helper
modules have been updated for RFC6891; to handle OPT RR
with DNSSEC OK (DO) bit.
Introduced application:get_supervisor/1
.
Cache OTP boot code paths, to limit how many folders
that are being accessed during a module lookup. Can be
disabled with -cache_boot_path false
.
-proto_dist
inet_tls
), the SSL option {ktls, true}
.Mitigate memory usage from large certificate chains by lowering the maximum handshake size. This should not effect the common cases, if needed it can be configured to a higher value.
For security reasons the SHA1
and DSA
algorithms are no longer among the default values.
use_srtp
hello extension
to facilitate for DTLS
users to implement SRTP
functionality.For more details about new features and potential incompatibilities see the readme
]]>Erlang/OTP 25.3 is the third and final maintenance patch package for OTP 25, with mostly bug fixes as well as improvements.
Below are some highlights of the release:
Support for fully asynchronous distributed signaling where send operations never block. This functionality is by default disabled and can be enabled per process. For more information see the documentation of process_flag(async_dist, Bool).
The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp
Download links for this and previous versions are found here
]]>Erlang/OTP 26.0-rc1 is the first release candidate of three before the OTP 26.0 release.
The intention with this release is to get feedback from our users. All feedback is welcome, even if it is only to say that it works for you. We encourage users to try it out and give us feedback either by creating an issue here https://github.com/erlang/otp/issues or by posting to Erlangforums.
All artifacts for the release can be downloaded from the Erlang/OTP Github release and you can view the new documentation at https://erlang.org/documentation/doc-14.0-rc1/doc/. You can also install the latest release using kerl like this: kerl build 26.0-rc1 26.0-rc1.
Erlang/OTP 26 is a new major release with new features, improvements as well as a few incompatibilities. Some of the new features are highlighted below.
Many thanks to all contributors!
Below are some highlights of the release:
There are a lot of new features and improvements in the Erlang shell:
erl.exe
has the same
functionality as a normal Unix shell and that werl.exe
is just a
symlink to erl.exe
. This makes the Windows Erlang terminal
experience identical to that of Unix.Creation and matching of binaries with segments of fixed sizes have been optimized.
Creation and matching of UTF-8 segments have been optimized.
Appending to binaries has been optimized.
The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time.
Thanks to the optimizations above the performance of the base64
module has been
significantly improved. For example, on an x86_64 system with the JIT both encode and
decode are almost three times faster than in Erlang/OTP 25.
Map comprehensions as suggested in EEP 58 has now been implemented.
Some map operations have been optimized by changing the
internal sort order of atom keys. This changes the
(undocumented) order of how atom keys in small maps are
printed and returned by maps:to_list/1
and maps:next/1
.
The new order is unpredictable and may change between
different invocations of the Erlang VM.
Introducing the new function maps:iterator/2
for creating an interator
that return the map elements in a deterministic order.
There are also new modifiers k
and K
for the format
string in io:format()
to support printing map elements
ordered.
--incremental
option when running Dialyzer.
This new incremental mode is likely to become the
default in a future release.Multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe.
Support for UTF-8 atoms and strings in the NIF
interface including new functions enif_make_new_atom
,
enif_make_new_atom_len
and enif_get_string_length
.
The BIFs min/2
and max/2
are now allowed to be used in
guards and match specs.
Improved the selective receive optimization, which can
now be enabled for references returned from other
functions. This greatly improves the performance of
gen_server:send_request/3
, gen_server:wait_response/2
,
and similar functions.
New trace feature call_memory
. Similar to call_time
tracing, but instead of measure accumulated time in
traced functions it measures accumulated heap space
consumed by traced functions. It can be used to compare
how much different functions are contributing to
garbage collection being triggered.
It is no longer necessary to enable a feature in the runtime system in order to load modules that are using it. It is sufficient to enable the feature in the compiler when compiling it.
inet:setopts/2
has got 3 new options: reuseport
, reuseport_lb
and exclusiveaddruse
.
Fix so that -fno-omit-frame-pointer
is applied to all
of the Erlang VM when using the JIT so that tools, such
as perf
, can crawl the process stacks.
In the lists
module, the zip family of functions now takes
options to allow handling lists of different lengths.
Added the zip:zip_get_crc32/2
function to retrieve the
CRC32
checksum from an opened ZIP archive.
gen_server
optimized by caching callback functions
The modules Erlang DNS resolver inet_res
and helper
modules have been updated for RFC6891; to handle OPT RR
with DNSSEC OK (DO) bit.
Introduced application:get_supervisor/1
.
Cache OTP boot code paths, to limit how many folders
that are being accessed during a module lookup. Can be
disabled with -cache_boot_path false
.
-proto_dist
inet_tls
), the SSL option {ktls, true}
.Mitigate memory usage from large certificate chains by lowering the maximum handshake size. This should not effect the common cases, if needed it can be configured to a higher value.
For security reasons the SHA1
and DSA
algorithms are no longer among the default values.
use_srtp
hello extension
to facilitate for DTLS
users to implement SRTP
functionality.For more details about new features and potential incompatibilities see the readme
]]>Erlang/OTP 25.2 is the second maintenance patch package for OTP 25, with mostly bug fixes as well as improvements.
Below are some highlights of the release:
The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp
Download links for this and previous versions are found here
]]>Erlang/OTP 25.1 is the first maintenance patch package for OTP 25, with mostly bug fixes as well as quite many small improvements.
Below are some highlights of the release:
Crypto is now considered to be usable with the OpenSSL 3.0 cryptolib for production code. ENGINE and FIPS are not yet fully functional.
Changed the behaviour of the engine load/unload functions
ssl/tls/dtls
server using the ssl
application either directly or
indirectly via other applications. For example via
inets
(httpd
), cowboy
, etc. Note that the vulnerability
only affects servers that request client certification,
that is sets the option {verify, verify_peer}
.The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp
Download links for this and previous versions are found here
]]>