Initial Release | OTP 26.0 |
Git Tag | OTP-26.0 |
Date | 2023-05-16 |
Issue Id |
ERIERL-737
ERIERL-870
|
System | OTP |
Release | 26 |
Application |
|
Potential Incompatibilities |
Highlights #
- OTP-14835
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-5924
The Erlang shell has been improved to support the following features:
-- Auto-complete variables, record names, record field names, map keys, function parameter types and filenames.
-- Open external editor in the shell (with C-o) to edit the current expression in an editor.
-- Support defining records (with types), functions and function typespecs, and custom types in the shell.
-- Do not save pager commands, and input to io:getline in history.
- OTP-15903
-
- Application(s):
- ssl
Improved error checking and handling of ssl options.
- OTP-17932
-
*** POTENTIAL INCOMPATIBILITY ***
The TTY/terminal subsystem has been rewritten by moving more code to Erlang from the old linked-in driver and implementing all the I/O primitives needed in a NIF instead.
On Unix platforms the user should not notice a lot of difference, besides better handling of unicode characters and fixing of some long standing bugs.
Windows users will notice that erl.exe has the same functionality as a normal Unix shell and that werl.exe has been removed and replaced with a symlink to erl.exe. This makes the Windows Erlang terminal experience identical to that of Unix.
The re-write brings with it a number of bug fixes and feature additions:
-- The TTY is now reset when Erlang exits, fixing zsh to not break when terminating an Erlang session.
-- standard_error now uses the same unicode mode as standard_io.
-- Hitting backspace when searching the shell history with an empty search string no longer breaks the shell.
-- Tab expansion now works on remote nodes started using the JCL interface.
-- It is now possible to configure the shell slogan and the session slogans (that is the texts that appear when you start an Erlang shell). See the kernel documentation for more details.
-- Added shell:start_interactive for starting the interactive shell from a non-interactive Erlang session (for example an escript).
-- On Windows, when starting in detached mode the standard handler are now set to nul devices instead of being unset.
-- Standard I/O now always defaults to unicode mode if supported. Previously the default was latin1 if the runtime system had been started with -oldshell or -noshell (for example in an escript). To send raw bytes over standard out, one now explicitly has to specify io:setopts(standard_io, [{encoding, latin1}]).
- OTP-18029
-
- Application(s):
- erts, kernel
Add support for socket on Windows.
-- Pre release status.
-- Error codes not finalized.
-- No explicit support for Windows specific options (socket options, flags for read and write).
-- New async api for Windows (completion). See the Asynchronous calls chapter in the (Socket Usage) Users Guide.
-- To ensure platform independence, gen_tcp and gen_udp is *intended* to be used (not yet updated).
- OTP-18135
-
*** POTENTIAL INCOMPATIBILITY ***
As announced when OTP 25 was released, multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe.
If you have old code in the system that is not time warp safe, you now explicitly need to start the system in no time warp mode (or singe time warp mode if it is partially time warp safe) in order to avoid problems. When starting the system in no time warp mode, the system behaves as it did prior to the introduction of the extended time functionality introduced in OTP 18.
If you have code that is not time warp safe, you are strongly encouraged to change this so that you can use multi time warp mode. Compared to no time warp mode, multi time warp mode improves scalability and performance as well as accuracy and precision of time measurements.
- OTP-18137
-
There are several new optimization for binary syntax in the JIT:
-- 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.
- OTP-18185
-
- Application(s):
- compiler, erts
- Related Id(s):
- GH-6139
The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time.
- OTP-18188
-
- Application(s):
- dialyzer
- Related Id(s):
- PR-5997
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.
Incremental mode primarily differs from the previous, "classic", ways of running Dialyzer, in that its model is optimised around the common use case of regularly analysing a single codebase, tweaking the code, analysing it again, and so on, without explicit reference to the building and checking of a PLT.
In this mode the PLT file acts much more like a true cache, where users provide a codebase and a set of files they care about, and Dialyzer does the legwork in terms of deciding how to most efficiently report all of the relevant warnings given the cached results it may already have in the PLT (and if a PLT doesn't exist, incremental mode will create one).
- OTP-18228
-
- Application(s):
- stdlib
- Related Id(s):
- GH-5639
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 more than three times faster than in Erlang/OTP 25.
- OTP-18235
-
Support for Kernel TLS (kTLS), has been added to the SSL application, for TLS distribution (-proto_dist inet_tls), the SSL option {ktls, true}. Using this for general SSL sockets is uncomfortable, undocumented and not recommended since it requires very platform dependent raw options.
This, for now, only works for some not too old Linux distributions. Roughly, a kernel 5.2.0 or later with support for UserLand Protocols and the kernel module tls is required.
- OTP-18278
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-6260
The Erlang shell's auto-completion when typing tab has been changed to happen after the editing current line instead of before it.
This behaviour can be configured using a the shell_expand_location STDLIB configuration parameter.
- OTP-18297
-
- Application(s):
- compiler, stdlib
- Related Id(s):
- GH-6348
A limitation in the binary syntax has been removed. It is now possible to match binary patterns in parallel. Example: <<A:8>> = <<B:4,C:4>> = Bin
- OTP-18318
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6347
In the lists module, the zip family of functions now takes options to allow handling lists of different lengths.
- OTP-18334
-
- Application(s):
- erts
- Related Id(s):
- PR-6434
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.
- OTP-18367
-
- Application(s):
- compiler, erts, stdlib
- Related Id(s):
- GH-6544
The BIFs min/2 and max/2 are now allowed to be used in guards and match specs.
- OTP-18413
-
- Application(s):
- compiler, erts, stdlib, syntax_tools, tools
- Related Id(s):
- EEP-58 , PR-6727
Map comprehensions as suggested in EEP 58 has now been implemented.
- OTP-18414
-
- Application(s):
- erts, stdlib
- Related Id(s):
- PR-6151
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.
For applications where order is important, there is a new function maps:iterator/2 for creating iterators that return the map elements in a deterministic order. There are also new modifiers k and K for the format string for io:format() to support printing map elements ordered.
- OTP-18431
-
- Application(s):
- compiler, stdlib
- Related Id(s):
- PR-6739
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.
- OTP-18435
-
- Application(s):
- erts
- Related Id(s):
- PR-6827
The amount of significant bits in node local process identifiers and port identifiers has been extended from 28 bits to 60 bits on 64-bit runtime systems. This makes these identifiers large enough to in practice never having to be reused during the life time of a node.
- OTP-18440
-
- Application(s):
- erts
- Related Id(s):
- PR-6351
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.
- OTP-18445
-
- Application(s):
- erts, stdlib
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.
That means that to use feature maybe_expr in Erlang/OTP 26, it is sufficient to enable it during compilation.
In Erlang/OTP 27, feature maybe_expr will be enabled by default, but it will be possible to disable it.
- OTP-18459
-
- Application(s):
- ssl
Add encoding and decoding of use_srtp hello extension to facilitate for DTLS users to implement SRTP functionality.
- OTP-18491
-
- Application(s):
- parsetools
- Related Id(s):
- PR-6882
Leex has been extended with optional column number support.
- OTP-18495
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6943
The family of enumeration functions in module lists has been extended with enumerate/3 that allows a step value to be supplied.
- OTP-18498
-
- Application(s):
- erts
Reintroduced the optimization that turned anonymous functions without free variables into literals (OTP-15195). This optimization was lost during refactoring in OTP 24.
Alongside this fix, we plan to remove the "fun creator pid" feature in OTP 27. See Upcoming Potential Incompatibilities for more details.
- OTP-18500
-
- Application(s):
- stdlib
Update Unicode to version 15.0.0.
- OTP-18522
-
- Application(s):
- dialyzer, erts, stdlib
Added the new built-in type dynamic() introduced in EEP-61, improving support for gradual type checkers.
Potential Incompatibilities #
- OTP-14771
-
- Application(s):
- ssl
Remove less that 256 bit ECC from default supported ECC pre TLS-1.3
- OTP-17771
-
The enif_set_option() function has been introduced into the NIF API. It can be used in order to set the ERL_NIF_OPT_DELAY_HALT and/or ERL_NIF_OPT_ON_HALT options with which one can synchronize halt of the runtime system with flushing enabled and execution of NIFs. Halt of the runtime system without flushing enabled, now terminates the runtime system without execution of atexit/on_exit handlers that may have been installed into the runtime system which might be considered a potential incompatibility.
- OTP-17932
-
*** HIGHLIGHT ***
The TTY/terminal subsystem has been rewritten by moving more code to Erlang from the old linked-in driver and implementing all the I/O primitives needed in a NIF instead.
On Unix platforms the user should not notice a lot of difference, besides better handling of unicode characters and fixing of some long standing bugs.
Windows users will notice that erl.exe has the same functionality as a normal Unix shell and that werl.exe has been removed and replaced with a symlink to erl.exe. This makes the Windows Erlang terminal experience identical to that of Unix.
The re-write brings with it a number of bug fixes and feature additions:
-- The TTY is now reset when Erlang exits, fixing zsh to not break when terminating an Erlang session.
-- standard_error now uses the same unicode mode as standard_io.
-- Hitting backspace when searching the shell history with an empty search string no longer breaks the shell.
-- Tab expansion now works on remote nodes started using the JCL interface.
-- It is now possible to configure the shell slogan and the session slogans (that is the texts that appear when you start an Erlang shell). See the kernel documentation for more details.
-- Added shell:start_interactive for starting the interactive shell from a non-interactive Erlang session (for example an escript).
-- On Windows, when starting in detached mode the standard handler are now set to nul devices instead of being unset.
-- Standard I/O now always defaults to unicode mode if supported. Previously the default was latin1 if the runtime system had been started with -oldshell or -noshell (for example in an escript). To send raw bytes over standard out, one now explicitly has to specify io:setopts(standard_io, [{encoding, latin1}]).
- OTP-18135
-
*** HIGHLIGHT ***
As announced when OTP 25 was released, multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe.
If you have old code in the system that is not time warp safe, you now explicitly need to start the system in no time warp mode (or singe time warp mode if it is partially time warp safe) in order to avoid problems. When starting the system in no time warp mode, the system behaves as it did prior to the introduction of the extended time functionality introduced in OTP 18.
If you have code that is not time warp safe, you are strongly encouraged to change this so that you can use multi time warp mode. Compared to no time warp mode, multi time warp mode improves scalability and performance as well as accuracy and precision of time measurements.
- OTP-18140
-
- Application(s):
- erl_interface, erts, jinterface, kernel
- Related Id(s):
- PR-6072
As announced since the release of OTP 24, support for:
-- version 4 node container types in the external term format are now mandatory. That is, references supporting up to 5 32-bit integer identifiers, and process and port identifiers with support for 64-bit data storage. The distribution flag DFLAG_V4_NC is therefor now also mandatory. OTP has since OTP 24 supported this. Also note that the external format produced by term_to_binary() and term_to_iovec() will unconditionally produce pids, ports, and references supporting this larger format.
-- the new link protocol introduced in OTP 23.3 is now mandatory. The distribution flag DFLAG_UNLINK_ID is therefor now also mandatory.
Due to the above, OTP 26 nodes will refuse to connect to OTP nodes from releases prior to OTP 24.
- OTP-18168
-
With this change, stateless tickets generated by server with anti_replay option enabled can be used for creating ClientHello throughout ticket lifetime. Without this change, usability was limited to WindowSize number of seconds configured for anti_replay option.
- OTP-18210
-
Fixed a bug where duplicate keys were allowed in the .app file of an application. Duplicate keys are now rejected and the application will not start if they exist.
- OTP-18285
-
- Application(s):
- kernel, ssh, stdlib
- Related Id(s):
- PR-6262
Typing Ctrl+L in a shell now clears the screen and redraws the current line instead of only redrawing the current line. To only redraw the current line, you must now type Alt+L. This brings the behaviour of Ctrl+L closer to how bash and other shells work.
- OTP-18344
-
The following inet:setopts/2 options have been introduced:
-- reuseport -- Reuse of local port. Load balancing may or may not be provided depending on underlying OS.
-- reuseport_lb -- Reuse of local port. Load balancing provided.
-- exclusiveaddruse -- Exclusive address/port usage on Windows. This socket option is Windows specific and will silently be ignored on other systems.
The behavior of setting reuseaddr on Windows have changed in a *backwards incompatible* way. The underlying SO_REUSEADDR socket option is now only set if both the reusaddr and the reuseport inet options have been set. This since the underlying SO_REUSEADDR socket option on Windows behaves similar to how BSD behaves if both the underlying socket options SO_REUSEADDR and SO_REUSEPORT have been set. See the documentation of the reuseaddr option for more information.
- OTP-18438
-
- Application(s):
- ssl
- Related Id(s):
- GH-6679
For security reasons remove support for SHA1 and DSA algorithms from default values.
- OTP-18439
-
Dialyzer has enabled (by default) warnings about unknown types and functions.
Prior to this change, Dialyzer had warnings about unknown types and functions disabled (by default).
This default value has been overwritten; Dialyzer now warns about unknown types and functions (as requested by the community in GH-5695). Thus, the following two examples are equivalent, i.e., passing the -Wunknown function is enabled by default:
dialyzer moduler.erl -Wunknown -Wmissing_return
dialyzer moduler.erl -Wmissing_return
Dialyzer has a new flag, -Wno_unknown. Its purpose is to suppress warnings about unknown functions and types.
Users who wish to suppress these warnings can invoke Dialyzer using this flag. Example: dialyzer module.erl -Wno_unknown
- OTP-18455
-
- Application(s):
- ssl
- Related Id(s):
- GH-5899
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.
- OTP-18471
-
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.
All these start functions now consume the 'EXIT' message from a process link for all error returns. Previously it was only the start_link/* functions that did this, and only when the started function exited, not when it used init_ack/1,2 or init_fail/2,3 to create the return value.
- OTP-18488
-
- Application(s):
- reltool
- Related Id(s):
- PR-6836
Support for the experimental code archives feature has been removed from reltool.
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
- OTP-18505
-
- Application(s):
- erts
- Related Id(s):
- PR-6991
The default encoding of atoms by term_to_binary and term_to_iovec have changed from Latin1 to UTF-8. The old encoding can still be obtained with options {minor_version, 1}.
Apart from encoding code points between 128 and 255 with two bytes (UTF-8) instead of one, most atoms will occupy one less byte as the length field use only one byte instead of two if possible.
- OTP-18530
-
- Application(s):
- inets
IP display string will now always be in lower case, effects ipv6 addresses.
- OTP-18531
-
- Application(s):
- ssl
If a user cancel alert with level warning is received during handshake make it be handled the same regardless of TLS version. If it is received in connection in TLS-1.3 regard it as an error as it is inappropriate.
In TLS-1.3 all error alerts are considered FATAL regardless of legacy alert type. But make sure legacy type is printed in logs to not confuse users that are expecting the same legacy type as sent by peer.
- OTP-18536
-
- Application(s):
- inets
Removed deprecated functions
- OTP-18549
-
- Application(s):
- erts, runtime_tools
- Related Id(s):
- PR-7105
Removed the experimental erts_alloc_config module. It no longer produced good configurations and cannot be fixed in a reasonably backwards compatible manner. It has since OTP 25 been deprecated and scheduled for removal in OTP 26.
- OTP-18551
-
- Application(s):
- kernel
- Related Id(s):
- PR-7106
Removed code:is_module_native/1 since HiPE has been removed. It has since OTP 24 been deprecated and scheduled for removal in OTP 26.
Removed code:rehash/0 since the code path feature no longer is present. It has since OTP 19 been deprecated and has since OTP 24 been scheduled for removal in OTP 26.
- OTP-18552
-
- Application(s):
- erts
- Related Id(s):
- PR-6973
ERTS internal thread names have been changed. All threads created by ERTS now have a prefix erts_ followed by a type name potentially followed by an integer index. For example, normal schedulers are now named erts_sched_<IX>, dirty CPU schedulers erts_dcpus_<IX>, and dirty IO schedulers erts_dios_<IX>. NIF and driver thread names are truncated at 15 characters regardless of whether the underlying platform support more characters or not.
OTP-26.0 #
- OTP-18364
-
- Application(s):
- otp
Starting from Erlang/OTP 24, it has been possible to write expressions such as A = catch Expr without parentheses around the catch expression, but it was not mentioned in the documentation. It now is.
- OTP-18538
-
Removed configure option --enable-sanitizers. It was untested and broken. Address sanitizer for the emulator has better support by the asan build target.
- OTP-18053
-
- Application(s):
- erts, otp
- Related Id(s):
- PR-6101
Updated configure cache for Windows. This makes configure run faster on Windows as many more checks are cached.
- OTP-18209
-
- Application(s):
- otp
- Related Id(s):
- PR-5881
Fix the make target release, release_docs, install and install-docs now work when the target path contains whitespace and/or unicode characters.
- OTP-18492
-
- Application(s):
- otp
- Related Id(s):
- GH-6706
The documentation for the bit syntax has been updated to correct some factual errors and omissions.
- OTP-18511
-
- Application(s):
- otp, stdlib
- Related Id(s):
- PR-7017
The regular expression library powering the re module is likely to be changed in Erlang/OTP 27. See Upcoming Potential Incompatibilities.
asn1-5.1 #
- OTP-18534
-
- Application(s):
- asn1
- Related Id(s):
- ERIERL-737 , PR-7039
The ASN.1 compiler used to reject correctly specified RELATIVE-OID values containing other RELATIVE-OID values. This is now corrected.
- OTP-18441
-
- Application(s):
- asn1
Minor code improvements.
- OTP-18447
-
- Application(s):
- asn1, crypto, erts, kernel, public_key, runtime_tools
Handling of on_load modules during boot has been improved by adding an extra step in the boot order for embedded mode that runs all on_load handlers, instead of relying on explicit invocation of them, later, when the kernel supervision tree starts.
This is mostly a code improvement and OTP internal simplification to avoid future bugs and to simplify code maintenance.
Full runtime dependencies of asn1-5.1: erts-11.0, kernel-7.0, stdlib-3.13
common_test-1.25 #
- OTP-18377
-
- Application(s):
- common_test
- Related Id(s):
- PR-6437
This change improves Common Test docs (CT hook example code) and adds Emacs skeleton with hook code.
- OTP-18259
-
- Application(s):
- common_test
- Related Id(s):
- PR-5924
Updated common_test with a more robust way to fetch old releases, while ignoring the current release.
- OTP-18340
-
- Application(s):
- common_test
- re-write the XML ct module documentation into erlang types to make Dialyzer able to catch more precise errors
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
Full runtime dependencies of common_test-1.25: compiler-6.0, crypto-4.5, debugger-4.1, erts-7.0, ftp-1.0, inets-6.0, kernel-8.4, observer-2.1, runtime_tools-1.8.16, sasl-2.5, snmp-5.1.2, ssh-4.0, stdlib-4.0, syntax_tools-1.7, tools-3.2, xmerl-1.3.8
compiler-8.3 #
- OTP-18389
-
The compiler would silently accept singleton (unbound) type variables in a union type. Starting from Erlang/OTP 26, the compiler will generate a warning for this example. The warning can be disabled using the nowarn_singleton_typevar option. In Erlang/OTP 27, the warning will become an error.
- OTP-18126
-
- Application(s):
- compiler, erts
- Related Id(s):
- PR-6033
Optimized record updates.
- OTP-18137
-
*** HIGHLIGHT ***
There are several new optimization for binary syntax in the JIT:
-- 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.
- OTP-18185
-
- Application(s):
- compiler, erts
- Related Id(s):
- GH-6139
*** HIGHLIGHT ***
The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time.
- OTP-18297
-
- Application(s):
- compiler, stdlib
- Related Id(s):
- GH-6348
*** HIGHLIGHT ***
A limitation in the binary syntax has been removed. It is now possible to match binary patterns in parallel. Example: <<A:8>> = <<B:4,C:4>> = Bin
- OTP-18337
-
It is documented that $\^X is the ASCII code for Control X, where X is an uppercase or lowercase letter. However, this notation would work for any character X, even then it didn't make sense.
In Erlang/OTP 26, it is now documented that the following characters are also allowed to follow the \^ characters: @, [, \, ], ^, _, and ?. Attempt to use other characters will be rejected with a compiler error.
The value for $\^? is now 127 (instead of 31 as in earlier releases).
- OTP-18367
-
- Application(s):
- compiler, erts, stdlib
- Related Id(s):
- GH-6544
*** HIGHLIGHT ***
The BIFs min/2 and max/2 are now allowed to be used in guards and match specs.
- OTP-18413
-
- Application(s):
- compiler, erts, stdlib, syntax_tools, tools
- Related Id(s):
- EEP-58 , PR-6727
*** HIGHLIGHT ***
Map comprehensions as suggested in EEP 58 has now been implemented.
- OTP-18431
-
- Application(s):
- compiler, stdlib
- Related Id(s):
- PR-6739
*** HIGHLIGHT ***
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.
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18502
-
- Application(s):
- compiler
The compiler will now inline calls to maps:get/3.
- OTP-18574
-
- Application(s):
- compiler, erts
In Erlang/OTP 27, 0.0 will no longer be considered to be exactly equal to -0.0. See Upcoming Potential Incompatibilities.
Full runtime dependencies of compiler-8.3: crypto-5.1, erts-13.0, kernel-8.4, stdlib-5.0
crypto-5.2 #
- OTP-18571
-
- Application(s):
- crypto
Fix cmac_update aes_128_cbc for LibreSSL.
- OTP-18204
-
- Application(s):
- crypto
- Related Id(s):
- PR-6203
Add support for SHAKE128 and SHAKE256.
- OTP-18206
-
- Application(s):
- crypto
- Related Id(s):
- PR-6167
Make the -DOPENSSL_API_COMPAT flag work without warnings.
- OTP-18405
-
- Application(s):
- crypto, diameter, kernel, ssl
- Related Id(s):
- GH-6672 , PR-6700 , PR-6702 , PR-6768 , PR-6769 , PR-6812 , PR-6814
Replace size/1 with either tuple_size/1 or byte_size/1
The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer.
When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred.
When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1.
- OTP-18447
-
- Application(s):
- asn1, crypto, erts, kernel, public_key, runtime_tools
Handling of on_load modules during boot has been improved by adding an extra step in the boot order for embedded mode that runs all on_load handlers, instead of relying on explicit invocation of them, later, when the kernel supervision tree starts.
This is mostly a code improvement and OTP internal simplification to avoid future bugs and to simplify code maintenance.
Full runtime dependencies of crypto-5.2: erts-9.0, kernel-5.3, stdlib-3.9
dialyzer-5.1 #
- OTP-18237
-
When checking behaviors, Dialyzer could generate false warning that a callback function did not have the correct type according to the spec in the behavior definition.
- OTP-18276
-
- Application(s):
- dialyzer
- Related Id(s):
- GH-6333
In a spec, list(none()) used to mean none(). It has now been corrected to mean the empty list.
- OTP-18389
-
The compiler would silently accept singleton (unbound) type variables in a union type. Starting from Erlang/OTP 26, the compiler will generate a warning for this example. The warning can be disabled using the nowarn_singleton_typevar option. In Erlang/OTP 27, the warning will become an error.
- OTP-18485
-
Fixed a bug that prevented the --plts option from being used together with --add-to-plt.
- OTP-18562
-
- Application(s):
- dialyzer
Fixed a crash when analyzing code that contained illegal bitstring segment sizes.
- OTP-18564
-
- Application(s):
- dialyzer
- Related Id(s):
- GH-7153
Fixed a crash when formatting certain warnings that contained multi-byte unicode characters.
- OTP-18188
-
- Application(s):
- dialyzer
- Related Id(s):
- PR-5997
*** HIGHLIGHT ***
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.
Incremental mode primarily differs from the previous, "classic", ways of running Dialyzer, in that its model is optimised around the common use case of regularly analysing a single codebase, tweaking the code, analysing it again, and so on, without explicit reference to the building and checking of a PLT.
In this mode the PLT file acts much more like a true cache, where users provide a codebase and a set of files they care about, and Dialyzer does the legwork in terms of deciding how to most efficiently report all of the relevant warnings given the cached results it may already have in the PLT (and if a PLT doesn't exist, incremental mode will create one).
- OTP-18238
-
- Application(s):
- dialyzer
- Related Id(s):
- PR-6271
Dialyzer now produces clearer error messages for contract violations.
- OTP-18282
-
The name of a built-in type can now be reused as the name of type locally. That is useful when an OTP release introduces a new built-in type; having the possibility to redefine built-in types locally can make it easier to maintain code that works in multiple OTP releases.
- OTP-18310
-
- Application(s):
- dialyzer
There is new option -no_spec to ignore all specs. It is useful for debugging when one suspects that some specs could be incorrect.
- OTP-18342
-
Dialyzer's overloaded domain warning is now disabled by default, and can be enabled with the flag -Woverlapping_contract.
Dialyzer used to issue a warning for overloaded domains stating "such contracts are currently unsupported and are simply ignored".
These contracts are not "ignored" but rather, Dialyzer takes the union of the overloaded domains. This means that we lose the dependency from each corresponding input to output type. Because of this, the warning is really about not being able to establish a dependency between the input and output types of each respective overloaded function specification.
- OTP-18439
-
*** POTENTIAL INCOMPATIBILITY ***
Dialyzer has enabled (by default) warnings about unknown types and functions.
Prior to this change, Dialyzer had warnings about unknown types and functions disabled (by default).
This default value has been overwritten; Dialyzer now warns about unknown types and functions (as requested by the community in GH-5695). Thus, the following two examples are equivalent, i.e., passing the -Wunknown function is enabled by default:
dialyzer moduler.erl -Wunknown -Wmissing_return
dialyzer moduler.erl -Wmissing_return
Dialyzer has a new flag, -Wno_unknown. Its purpose is to suppress warnings about unknown functions and types.
Users who wish to suppress these warnings can invoke Dialyzer using this flag. Example: dialyzer module.erl -Wno_unknown
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18522
-
- Application(s):
- dialyzer, erts, stdlib
*** HIGHLIGHT ***
Added the new built-in type dynamic() introduced in EEP-61, improving support for gradual type checkers.
- OTP-18558
-
- Application(s):
- dialyzer, stdlib
- Related Id(s):
- PR-6852
Added the argparse module for simplified argument handling in escripts and similar.
Full runtime dependencies of dialyzer-5.1: compiler-8.0, erts-12.0, kernel-8.0, stdlib-5.0, syntax_tools-2.0, wx-2.0
diameter-2.3 #
- OTP-18405
-
- Application(s):
- crypto, diameter, kernel, ssl
- Related Id(s):
- GH-6672 , PR-6700 , PR-6702 , PR-6768 , PR-6769 , PR-6812 , PR-6814
Replace size/1 with either tuple_size/1 or byte_size/1
The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer.
When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred.
When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1.
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
*** POTENTIAL INCOMPATIBILITY ***
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
Full runtime dependencies of diameter-2.3: erts-10.0, kernel-3.2, ssl-9.0, stdlib-5.0
erl_docgen-1.5 #
- OTP-18338
-
- Application(s):
- erl_docgen
- Related Id(s):
- PR-6408
New XML tag <change>. Like a <note> box, but with a different (steel blue) color and label. Intended to contain talk about semantic differences between OTP releases.
- OTP-18501
-
- Application(s):
- erl_docgen
- Related Id(s):
- PR-6987
Add "since" attribute to XML taglist/tag elements to document OTP version when a particular option/feature was introduced. The version is shown out in the right margin, similar to "since" versions for functions.
Full runtime dependencies of erl_docgen-1.5: edoc-1.0, erts-11.0, kernel-8.0, stdlib-3.15, xmerl-1.3.7
erl_interface-5.4 #
- OTP-18140
-
- Application(s):
- erl_interface, erts, jinterface, kernel
- Related Id(s):
- PR-6072
*** POTENTIAL INCOMPATIBILITY ***
As announced since the release of OTP 24, support for:
-- version 4 node container types in the external term format are now mandatory. That is, references supporting up to 5 32-bit integer identifiers, and process and port identifiers with support for 64-bit data storage. The distribution flag DFLAG_V4_NC is therefor now also mandatory. OTP has since OTP 24 supported this. Also note that the external format produced by term_to_binary() and term_to_iovec() will unconditionally produce pids, ports, and references supporting this larger format.
-- the new link protocol introduced in OTP 23.3 is now mandatory. The distribution flag DFLAG_UNLINK_ID is therefor now also mandatory.
Due to the above, OTP 26 nodes will refuse to connect to OTP nodes from releases prior to OTP 24.
- OTP-16607
-
- Application(s):
- erl_interface
- Related Id(s):
- OTP-16608
The ei API for decoding/encoding terms is not fully 64-bit compatible since terms that have a representation on the external term format larger than 2 GB cannot be handled.
erts-14.0 #
- OTP-18016
-
- Application(s):
- erts
If a local fun was called while reloading the *exact same* module that defined said fun, there was a small window in which the call would land in code that was yet to be fully loaded.
- OTP-18248
-
Fix the TLS distribution to work when starting Erlang in embedded mode and a connection is done before kernel is fully started.
- OTP-18271
-
- Application(s):
- erts, kernel
- Related Id(s):
- PR-6279
erl -remsh has been improved to provide better error reasons and work when using a shell without terminal support (that is an "oldshell").
- OTP-18274
-
- Application(s):
- erts
- Related Id(s):
- PR-6048
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.
- OTP-18277
-
- Application(s):
- erts
- Related Id(s):
- PR-6306
Compilation server now support unicode paths in compilation server for filesystems that are encoded with unicode.
- OTP-18498
-
- Application(s):
- erts
*** HIGHLIGHT ***
Reintroduced the optimization that turned anonymous functions without free variables into literals (OTP-15195). This optimization was lost during refactoring in OTP 24.
Alongside this fix, we plan to remove the "fun creator pid" feature in OTP 27. See Upcoming Potential Incompatibilities for more details.
- OTP-18561
-
- Application(s):
- erts
Fixed a crash during tracing on certain platforms that cannot use the machine stack for Erlang code (mainly OpenBSD and Linux with musl).
- OTP-17771
-
*** POTENTIAL INCOMPATIBILITY ***
The enif_set_option() function has been introduced into the NIF API. It can be used in order to set the ERL_NIF_OPT_DELAY_HALT and/or ERL_NIF_OPT_ON_HALT options with which one can synchronize halt of the runtime system with flushing enabled and execution of NIFs. Halt of the runtime system without flushing enabled, now terminates the runtime system without execution of atexit/on_exit handlers that may have been installed into the runtime system which might be considered a potential incompatibility.
- OTP-17932
-
*** HIGHLIGHT ***
*** POTENTIAL INCOMPATIBILITY ***
The TTY/terminal subsystem has been rewritten by moving more code to Erlang from the old linked-in driver and implementing all the I/O primitives needed in a NIF instead.
On Unix platforms the user should not notice a lot of difference, besides better handling of unicode characters and fixing of some long standing bugs.
Windows users will notice that erl.exe has the same functionality as a normal Unix shell and that werl.exe has been removed and replaced with a symlink to erl.exe. This makes the Windows Erlang terminal experience identical to that of Unix.
The re-write brings with it a number of bug fixes and feature additions:
-- The TTY is now reset when Erlang exits, fixing zsh to not break when terminating an Erlang session.
-- standard_error now uses the same unicode mode as standard_io.
-- Hitting backspace when searching the shell history with an empty search string no longer breaks the shell.
-- Tab expansion now works on remote nodes started using the JCL interface.
-- It is now possible to configure the shell slogan and the session slogans (that is the texts that appear when you start an Erlang shell). See the kernel documentation for more details.
-- Added shell:start_interactive for starting the interactive shell from a non-interactive Erlang session (for example an escript).
-- On Windows, when starting in detached mode the standard handler are now set to nul devices instead of being unset.
-- Standard I/O now always defaults to unicode mode if supported. Previously the default was latin1 if the runtime system had been started with -oldshell or -noshell (for example in an escript). To send raw bytes over standard out, one now explicitly has to specify io:setopts(standard_io, [{encoding, latin1}]).
- OTP-18029
-
- Application(s):
- erts, kernel
*** HIGHLIGHT ***
Add support for socket on Windows.
-- Pre release status.
-- Error codes not finalized.
-- No explicit support for Windows specific options (socket options, flags for read and write).
-- New async api for Windows (completion). See the Asynchronous calls chapter in the (Socket Usage) Users Guide.
-- To ensure platform independence, gen_tcp and gen_udp is *intended* to be used (not yet updated).
- OTP-18053
-
- Application(s):
- erts, otp
- Related Id(s):
- PR-6101
Updated configure cache for Windows. This makes configure run faster on Windows as many more checks are cached.
- OTP-18126
-
- Application(s):
- compiler, erts
- Related Id(s):
- PR-6033
Optimized record updates.
- OTP-18131
-
- Application(s):
- erts
Optimized internal hash routines.
- OTP-18135
-
*** HIGHLIGHT ***
*** POTENTIAL INCOMPATIBILITY ***
As announced when OTP 25 was released, multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe.
If you have old code in the system that is not time warp safe, you now explicitly need to start the system in no time warp mode (or singe time warp mode if it is partially time warp safe) in order to avoid problems. When starting the system in no time warp mode, the system behaves as it did prior to the introduction of the extended time functionality introduced in OTP 18.
If you have code that is not time warp safe, you are strongly encouraged to change this so that you can use multi time warp mode. Compared to no time warp mode, multi time warp mode improves scalability and performance as well as accuracy and precision of time measurements.
- OTP-18137
-
*** HIGHLIGHT ***
There are several new optimization for binary syntax in the JIT:
-- 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.
- OTP-18140
-
- Application(s):
- erl_interface, erts, jinterface, kernel
- Related Id(s):
- PR-6072
*** POTENTIAL INCOMPATIBILITY ***
As announced since the release of OTP 24, support for:
-- version 4 node container types in the external term format are now mandatory. That is, references supporting up to 5 32-bit integer identifiers, and process and port identifiers with support for 64-bit data storage. The distribution flag DFLAG_V4_NC is therefor now also mandatory. OTP has since OTP 24 supported this. Also note that the external format produced by term_to_binary() and term_to_iovec() will unconditionally produce pids, ports, and references supporting this larger format.
-- the new link protocol introduced in OTP 23.3 is now mandatory. The distribution flag DFLAG_UNLINK_ID is therefor now also mandatory.
Due to the above, OTP 26 nodes will refuse to connect to OTP nodes from releases prior to OTP 24.
- OTP-18141
-
Optimization of process aliases made possible now that support for version 4 node container types in the external term format is mandatory.
- OTP-18185
-
- Application(s):
- compiler, erts
- Related Id(s):
- GH-6139
*** HIGHLIGHT ***
The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time.
- OTP-18227
-
- Application(s):
- erts
- Related Id(s):
- PR-6254
When erl -eval fails to execute a command, an error description is printed to standard_error.
- OTP-18334
-
- Application(s):
- erts
- Related Id(s):
- PR-6434
*** HIGHLIGHT ***
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.
- OTP-18344
-
*** POTENTIAL INCOMPATIBILITY ***
The following inet:setopts/2 options have been introduced:
-- reuseport -- Reuse of local port. Load balancing may or may not be provided depending on underlying OS.
-- reuseport_lb -- Reuse of local port. Load balancing provided.
-- exclusiveaddruse -- Exclusive address/port usage on Windows. This socket option is Windows specific and will silently be ignored on other systems.
The behavior of setting reuseaddr on Windows have changed in a *backwards incompatible* way. The underlying SO_REUSEADDR socket option is now only set if both the reusaddr and the reuseport inet options have been set. This since the underlying SO_REUSEADDR socket option on Windows behaves similar to how BSD behaves if both the underlying socket options SO_REUSEADDR and SO_REUSEPORT have been set. See the documentation of the reuseaddr option for more information.
- OTP-18360
-
- Application(s):
- erts
- Related Id(s):
- PR-6497
erlang:display/1 will now print large maps in a more readable way (similar to how small maps are printed).
- OTP-18367
-
- Application(s):
- compiler, erts, stdlib
- Related Id(s):
- GH-6544
*** HIGHLIGHT ***
The BIFs min/2 and max/2 are now allowed to be used in guards and match specs.
- OTP-18369
-
- Application(s):
- erts
Fail enif_init_resource_type and friends by returning NULL if not called during load/upgrade. Old behavior was undefined.
- OTP-18410
-
New option include_shared_binaries for the max_heap_size process limit. If set to true, large binaries (> 64 bytes), which may be referred by several processes, are included in the memory sum compared against the max_heap_size limit.
- OTP-18413
-
- Application(s):
- compiler, erts, stdlib, syntax_tools, tools
- Related Id(s):
- EEP-58 , PR-6727
*** HIGHLIGHT ***
Map comprehensions as suggested in EEP 58 has now been implemented.
- OTP-18414
-
- Application(s):
- erts, stdlib
- Related Id(s):
- PR-6151
*** HIGHLIGHT ***
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.
For applications where order is important, there is a new function maps:iterator/2 for creating iterators that return the map elements in a deterministic order. There are also new modifiers k and K for the format string for io:format() to support printing map elements ordered.
- OTP-18424
-
- Application(s):
- erts
- Related Id(s):
- PR-6716
Reduced memory usage of file:read_file_info/1,2
- OTP-18425
-
Add new function current_stacktrace for trace match specifications used by erlang:trace_pattern/3.
This new option puts the current stacktrace of the caller into the trace message sent to the trace receiver.
- OTP-18435
-
- Application(s):
- erts
- Related Id(s):
- PR-6827
*** HIGHLIGHT ***
The amount of significant bits in node local process identifiers and port identifiers has been extended from 28 bits to 60 bits on 64-bit runtime systems. This makes these identifiers large enough to in practice never having to be reused during the life time of a node.
- OTP-18440
-
- Application(s):
- erts
- Related Id(s):
- PR-6351
*** HIGHLIGHT ***
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.
- OTP-18445
-
- Application(s):
- erts, stdlib
*** HIGHLIGHT ***
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.
That means that to use feature maybe_expr in Erlang/OTP 26, it is sufficient to enable it during compilation.
In Erlang/OTP 27, feature maybe_expr will be enabled by default, but it will be possible to disable it.
- OTP-18447
-
- Application(s):
- asn1, crypto, erts, kernel, public_key, runtime_tools
Handling of on_load modules during boot has been improved by adding an extra step in the boot order for embedded mode that runs all on_load handlers, instead of relying on explicit invocation of them, later, when the kernel supervision tree starts.
This is mostly a code improvement and OTP internal simplification to avoid future bugs and to simplify code maintenance.
- OTP-18477
-
- Application(s):
- erts
- Related Id(s):
- PR-7006
Introduced the local option of term_to_binary/2 and term_to_iovec/2.
- OTP-18483
-
- Application(s):
- erts
- Related Id(s):
- PR-6888
Document the commonly used practice to create and store static atoms at NIF load time in callbacks load or upgrade.
- OTP-18493
-
- Application(s):
- erts
- Related Id(s):
- PR-6272
Optimize ets:lookup_element for uncompressed tables by using a more efficient method to copy the term from ETS to the heap of the calling process.
- OTP-18505
-
- Application(s):
- erts
- Related Id(s):
- PR-6991
*** POTENTIAL INCOMPATIBILITY ***
The default encoding of atoms by term_to_binary and term_to_iovec have changed from Latin1 to UTF-8. The old encoding can still be obtained with options {minor_version, 1}.
Apart from encoding code points between 128 and 255 with two bytes (UTF-8) instead of one, most atoms will occupy one less byte as the length field use only one byte instead of two if possible.
- OTP-18517
-
- Application(s):
- erts
The version of zlib included in the Erlang/OTP source code is now 1.2.13.
- OTP-18520
-
- Application(s):
- erts
- Related Id(s):
- GH-6455
gen_tcp:send/*, gen_udp:send/* and gen_sctp:send/* have been optimized to use the infamous receive reference optimization, so now sending should not have bad performance when the calling process has a large message queue.
- OTP-18522
-
- Application(s):
- dialyzer, erts, stdlib
*** HIGHLIGHT ***
Added the new built-in type dynamic() introduced in EEP-61, improving support for gradual type checkers.
- OTP-18523
-
- Application(s):
- erts
- Related Id(s):
- PR-7004
Optimize maps:merge/2 memory consumption for small maps (<33 keys) by reusing key tuples or entire maps if the result map has the same number of keys as any of the argument maps.
- OTP-18524
-
Optimize maps:merge/2 memory consumption further for small maps by mutating 2nd map to use literal key tuple of 1st map if both have the same keys.
- OTP-18526
-
- Application(s):
- erts
- Related Id(s):
- GH-7045
ceil/1, floor/1, is_bitstring/1, is_boolean/1, is_function/2, and tuple_size/1 can now be used in match specifications.
- OTP-18540
-
- Application(s):
- erts, kernel
- Related Id(s):
- PR-6900
Allow IPv6 addresses as host in http packets decoded by erlang:decode_packet/3 and gen_tcp packet option. The IPv6 address should be enclosed within [] according to RFC2732.
- OTP-18549
-
- Application(s):
- erts, runtime_tools
- Related Id(s):
- PR-7105
*** POTENTIAL INCOMPATIBILITY ***
Removed the experimental erts_alloc_config module. It no longer produced good configurations and cannot be fixed in a reasonably backwards compatible manner. It has since OTP 25 been deprecated and scheduled for removal in OTP 26.
- OTP-18552
-
- Application(s):
- erts
- Related Id(s):
- PR-6973
*** POTENTIAL INCOMPATIBILITY ***
ERTS internal thread names have been changed. All threads created by ERTS now have a prefix erts_ followed by a type name potentially followed by an integer index. For example, normal schedulers are now named erts_sched_<IX>, dirty CPU schedulers erts_dcpus_<IX>, and dirty IO schedulers erts_dios_<IX>. NIF and driver thread names are truncated at 15 characters regardless of whether the underlying platform support more characters or not.
- OTP-18569
-
- Application(s):
- erts
Further robustify implementation of large maps (> 32 keys). Keys that happen to have same internal 32-bit hash values are now put in collision nodes which are traversed with linear search. This removes the demand for the internal hash function when salted to eventually produce different hashes for all possible pairs of unequal terms.
- OTP-18574
-
- Application(s):
- compiler, erts
In Erlang/OTP 27, 0.0 will no longer be considered to be exactly equal to -0.0. See Upcoming Potential Incompatibilities.
Full runtime dependencies of erts-14.0: kernel-9.0, sasl-3.3, stdlib-4.1
et-1.7 #
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
Full runtime dependencies of et-1.7: erts-9.0, kernel-5.3, runtime_tools-1.10, stdlib-3.4, wx-1.2
ftp-1.2 #
- OTP-18359
-
- Application(s):
- ftp
- Related Id(s):
- PR-6545
Fixes the documentation for the ftp module and updates the typing of ftp functions that return errors.
The documentation has been improved and the types of the functions are now read from source code, instead of being hard-coded in XML.
Functions returning errors of the form {error, Reason :: 'ehost' | ...} are now similar to other modules, i.e., {error, Reason :: term()}. If one wants to understand the error, one must call the function ftp:formaterror({error, Reason}).
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18541
-
- Application(s):
- ftp
Remove deprecated functions in OTP-26
Full runtime dependencies of ftp-1.2: erts-7.0, kernel-6.0, runtime_tools-1.15.1, ssl-10.2, stdlib-3.5
inets-9.0 #
- OTP-18476
-
- Application(s):
- inets
- Related Id(s):
- GH-6380
Correct timing related pipelining/keepalive queue bug, that could result in unexpected "socket_remotly_closed" errors.
- OTP-18167
-
- Application(s):
- inets
By default ssl connections will use options from ssl_default_options(true)
- OTP-18350
-
- Application(s):
- inets, observer, os_mon, reltool, wx
Runtime dependencies have been updated.
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
*** POTENTIAL INCOMPATIBILITY ***
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
- OTP-18530
-
- Application(s):
- inets
*** POTENTIAL INCOMPATIBILITY ***
IP display string will now always be in lower case, effects ipv6 addresses.
- OTP-18536
-
- Application(s):
- inets
*** POTENTIAL INCOMPATIBILITY ***
Removed deprecated functions
- OTP-18544
-
- Application(s):
- inets
- Related Id(s):
- GH-5276
Update the code in the inets example directory to reflect the latest implementation
Full runtime dependencies of inets-9.0: erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14, ssl-9.0, stdlib-5.0, stdlib-5.0
jinterface-1.14 #
- OTP-18140
-
- Application(s):
- erl_interface, erts, jinterface, kernel
- Related Id(s):
- PR-6072
*** POTENTIAL INCOMPATIBILITY ***
As announced since the release of OTP 24, support for:
-- version 4 node container types in the external term format are now mandatory. That is, references supporting up to 5 32-bit integer identifiers, and process and port identifiers with support for 64-bit data storage. The distribution flag DFLAG_V4_NC is therefor now also mandatory. OTP has since OTP 24 supported this. Also note that the external format produced by term_to_binary() and term_to_iovec() will unconditionally produce pids, ports, and references supporting this larger format.
-- the new link protocol introduced in OTP 23.3 is now mandatory. The distribution flag DFLAG_UNLINK_ID is therefor now also mandatory.
Due to the above, OTP 26 nodes will refuse to connect to OTP nodes from releases prior to OTP 24.
kernel-9.0 #
- OTP-18210
-
*** POTENTIAL INCOMPATIBILITY ***
Fixed a bug where duplicate keys were allowed in the .app file of an application. Duplicate keys are now rejected and the application will not start if they exist.
- OTP-18225
-
- Application(s):
- kernel
- Related Id(s):
- PR-6036
Fix inconsistent handling in logger_formatter of the branched values in conditional branches. For example using msg in a conditional branch would not be formatted as it should before this fix.
- OTP-18226
-
- Application(s):
- kernel
- Related Id(s):
- PR-6253
Fix the logger_std_h handler to log to standard_error if logging to standard_io fails for any reason.
- OTP-18248
-
Fix the TLS distribution to work when starting Erlang in embedded mode and a connection is done before kernel is fully started.
- OTP-18271
-
- Application(s):
- erts, kernel
- Related Id(s):
- PR-6279
erl -remsh has been improved to provide better error reasons and work when using a shell without terminal support (that is an "oldshell").
- OTP-18286
-
- Application(s):
- kernel
- Related Id(s):
- PR-5955
Fix logging of log events generated before kernel is started to not fail if the code for formatting those log messaged have not yet been loaded.
- OTP-18471
-
*** POTENTIAL INCOMPATIBILITY ***
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.
All these start functions now consume the 'EXIT' message from a process link for all error returns. Previously it was only the start_link/* functions that did this, and only when the started function exited, not when it used init_ack/1,2 or init_fail/2,3 to create the return value.
- OTP-18486
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-6881
Fixed a bug where file:read(standard_io, ...) unexpectedly returned eof in binary mode.
- OTP-18528
-
- Application(s):
- kernel
- Related Id(s):
- PR-7009
Return type for seq_trace:get_token/1 fixed.
- OTP-18543
-
- Application(s):
- kernel
- Related Id(s):
- GH-6353
Looking up, connecting to and sending to a host with an empty name is now handled by trying to look up the address of the root domain, which fails. Previously some of these operations caused an internal exception, which contradicted type specifications.
- OTP-18547
-
- Application(s):
- kernel
- Related Id(s):
- PR-7092
Replaced a regex with a special case handling of ANSI Select Graphic Rendition escape characters, to speed up io output that make use of these escape sequences.
- OTP-14835
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-5924
*** HIGHLIGHT ***
The Erlang shell has been improved to support the following features:
-- Auto-complete variables, record names, record field names, map keys, function parameter types and filenames.
-- Open external editor in the shell (with C-o) to edit the current expression in an editor.
-- Support defining records (with types), functions and function typespecs, and custom types in the shell.
-- Do not save pager commands, and input to io:getline in history.
- OTP-17932
-
*** HIGHLIGHT ***
*** POTENTIAL INCOMPATIBILITY ***
The TTY/terminal subsystem has been rewritten by moving more code to Erlang from the old linked-in driver and implementing all the I/O primitives needed in a NIF instead.
On Unix platforms the user should not notice a lot of difference, besides better handling of unicode characters and fixing of some long standing bugs.
Windows users will notice that erl.exe has the same functionality as a normal Unix shell and that werl.exe has been removed and replaced with a symlink to erl.exe. This makes the Windows Erlang terminal experience identical to that of Unix.
The re-write brings with it a number of bug fixes and feature additions:
-- The TTY is now reset when Erlang exits, fixing zsh to not break when terminating an Erlang session.
-- standard_error now uses the same unicode mode as standard_io.
-- Hitting backspace when searching the shell history with an empty search string no longer breaks the shell.
-- Tab expansion now works on remote nodes started using the JCL interface.
-- It is now possible to configure the shell slogan and the session slogans (that is the texts that appear when you start an Erlang shell). See the kernel documentation for more details.
-- Added shell:start_interactive for starting the interactive shell from a non-interactive Erlang session (for example an escript).
-- On Windows, when starting in detached mode the standard handler are now set to nul devices instead of being unset.
-- Standard I/O now always defaults to unicode mode if supported. Previously the default was latin1 if the runtime system had been started with -oldshell or -noshell (for example in an escript). To send raw bytes over standard out, one now explicitly has to specify io:setopts(standard_io, [{encoding, latin1}]).
- OTP-18029
-
- Application(s):
- erts, kernel
*** HIGHLIGHT ***
Add support for socket on Windows.
-- Pre release status.
-- Error codes not finalized.
-- No explicit support for Windows specific options (socket options, flags for read and write).
-- New async api for Windows (completion). See the Asynchronous calls chapter in the (Socket Usage) Users Guide.
-- To ensure platform independence, gen_tcp and gen_udp is *intended* to be used (not yet updated).
- OTP-18140
-
- Application(s):
- erl_interface, erts, jinterface, kernel
- Related Id(s):
- PR-6072
*** POTENTIAL INCOMPATIBILITY ***
As announced since the release of OTP 24, support for:
-- version 4 node container types in the external term format are now mandatory. That is, references supporting up to 5 32-bit integer identifiers, and process and port identifiers with support for 64-bit data storage. The distribution flag DFLAG_V4_NC is therefor now also mandatory. OTP has since OTP 24 supported this. Also note that the external format produced by term_to_binary() and term_to_iovec() will unconditionally produce pids, ports, and references supporting this larger format.
-- the new link protocol introduced in OTP 23.3 is now mandatory. The distribution flag DFLAG_UNLINK_ID is therefor now also mandatory.
Due to the above, OTP 26 nodes will refuse to connect to OTP nodes from releases prior to OTP 24.
- OTP-18235
-
*** HIGHLIGHT ***
Support for Kernel TLS (kTLS), has been added to the SSL application, for TLS distribution (-proto_dist inet_tls), the SSL option {ktls, true}. Using this for general SSL sockets is uncomfortable, undocumented and not recommended since it requires very platform dependent raw options.
This, for now, only works for some not too old Linux distributions. Roughly, a kernel 5.2.0 or later with support for UserLand Protocols and the kernel module tls is required.
- OTP-18261
-
- Application(s):
- kernel
- Related Id(s):
- PR-5924
Add code:get_doc/2 which adds support to fetch documentation skeletons of functions using debug_info chunks instead of eep48 doc chunks.
- OTP-18278
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-6260
*** HIGHLIGHT ***
The Erlang shell's auto-completion when typing tab has been changed to happen after the editing current line instead of before it.
This behaviour can be configured using a the shell_expand_location STDLIB configuration parameter.
- OTP-18285
-
- Application(s):
- kernel, ssh, stdlib
- Related Id(s):
- PR-6262
*** POTENTIAL INCOMPATIBILITY ***
Typing Ctrl+L in a shell now clears the screen and redraws the current line instead of only redrawing the current line. To only redraw the current line, you must now type Alt+L. This brings the behaviour of Ctrl+L closer to how bash and other shells work.
- OTP-18305
-
- Application(s):
- kernel
- Related Id(s):
- PR-5831
gen_server optimized by caching callback functions
- OTP-18327
-
- Application(s):
- kernel
- Related Id(s):
- PR-6433
Prepare the pg communication protocol for upgrade. The plan is for OTP-28 nodes to be able to use an upgraded pg protocol while still being able to talk with OTP 26 nodes.
- OTP-18331
-
- Application(s):
- kernel
- Related Id(s):
- ERIERL-870
New disk_log log type rotate, where the log files are compressed upon rotation.
- OTP-18344
-
*** POTENTIAL INCOMPATIBILITY ***
The following inet:setopts/2 options have been introduced:
-- reuseport -- Reuse of local port. Load balancing may or may not be provided depending on underlying OS.
-- reuseport_lb -- Reuse of local port. Load balancing provided.
-- exclusiveaddruse -- Exclusive address/port usage on Windows. This socket option is Windows specific and will silently be ignored on other systems.
The behavior of setting reuseaddr on Windows have changed in a *backwards incompatible* way. The underlying SO_REUSEADDR socket option is now only set if both the reusaddr and the reuseport inet options have been set. This since the underlying SO_REUSEADDR socket option on Windows behaves similar to how BSD behaves if both the underlying socket options SO_REUSEADDR and SO_REUSEPORT have been set. See the documentation of the reuseaddr option for more information.
- OTP-18405
-
- Application(s):
- crypto, diameter, kernel, ssl
- Related Id(s):
- GH-6672 , PR-6700 , PR-6702 , PR-6768 , PR-6769 , PR-6812 , PR-6814
Replace size/1 with either tuple_size/1 or byte_size/1
The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer.
When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred.
When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1.
- OTP-18419
-
- Application(s):
- kernel
The function file:pid2name/1 is deprecated and will be removed in Erlang/OTP 27.
- OTP-18442
-
The modules Erlang DNS resolver inet_res and helper modules have been updated for RFC6891; to handle OPT RR with DNSSEC OK (DO) bit.
- OTP-18444
-
- Application(s):
- kernel
- Related Id(s):
- PR-6035
Introduced application:get_supervisor/1.
- OTP-18447
-
- Application(s):
- asn1, crypto, erts, kernel, public_key, runtime_tools
Handling of on_load modules during boot has been improved by adding an extra step in the boot order for embedded mode that runs all on_load handlers, instead of relying on explicit invocation of them, later, when the kernel supervision tree starts.
This is mostly a code improvement and OTP internal simplification to avoid future bugs and to simplify code maintenance.
- OTP-18448
-
- Application(s):
- kernel
- Related Id(s):
- PR-6736
Reduce contention on the code_server by doing the code preparation on the client.
- OTP-18451
-
- Application(s):
- kernel
- Related Id(s):
- PR-6737
Added a mode to ensure_all_loaded, to start children application and their dependencies concurrently.
- OTP-18452
-
- Application(s):
- kernel
- Related Id(s):
- PR-6729
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. OTP boot code paths consists of ERL_LIB environment variables. The various otp/*/ebin folders. And the {path, ...} clauses in the init script.
- OTP-18456
-
- Application(s):
- kernel, ssl
Erlang distribution code in Kernel and SSL has been refactored a bit to facilitate debugging and re-usability, which shouldn't have any noticeable effects on behaviour or performance.
- OTP-18466
-
- Application(s):
- kernel
- Related Id(s):
- PR-6832
Add cache attribute to code path apis.
Added an optional cache/nocache argument to all code:add_path*, code:set_path*, and code:replace_path* functions. These functions will then avoid doing file-accesses if they are cached. Cache can be cleared with code:clear_cache/0. Added code:del_paths/1 to make it easier to clear multiple paths.
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18484
-
- Application(s):
- kernel
- Related Id(s):
- PR-6844
Improvements to code:ensure_modules_loaded/1: Previously it would prepare modules and then abandon references to said modules if they had on_load callbacks. This pull request makes it so they keep the references around and then serially load them without having to fetch the object code and prepare them again.
- OTP-18510
-
The internal DNS resolver has been updated to handle DNS LOC RR:s (RFC 1876). This is an undocumented module, although still used by power users. See the source code.
- OTP-18521
-
- Application(s):
- kernel
- Related Id(s):
- PR-7025
Reduced memory consumption in global when informing other nodes about lost connections.
- OTP-18533
-
- Application(s):
- kernel
- Related Id(s):
- PR-7061
The net_kernel, global, and global_group servers now have fully asynchronous distributed signaling enabled all the time which prevents them from ever getting blocked on send of distributed signals.
Documentation about blocking distributed signals has also been improved.
- OTP-18540
-
- Application(s):
- erts, kernel
- Related Id(s):
- PR-6900
Allow IPv6 addresses as host in http packets decoded by erlang:decode_packet/3 and gen_tcp packet option. The IPv6 address should be enclosed within [] according to RFC2732.
- OTP-18542
-
- Application(s):
- kernel
Remove deprecated functions in OTP-26
- OTP-18551
-
- Application(s):
- kernel
- Related Id(s):
- PR-7106
*** POTENTIAL INCOMPATIBILITY ***
Removed code:is_module_native/1 since HiPE has been removed. It has since OTP 24 been deprecated and scheduled for removal in OTP 26.
Removed code:rehash/0 since the code path feature no longer is present. It has since OTP 19 been deprecated and has since OTP 24 been scheduled for removal in OTP 26.
- OTP-18575
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-7169
Added support for multiple line expressions and navigation in the shell. Added new keybindings:
-- navigate up (ctrl+up)/(alt+up)
-- navigate down (ctrl+down)/(alt+down)
-- insert newline in middle of line (alt+enter)
-- navigate top (alt+<)/(alt+shift+up)
-- navigate bottom (alt+>)/(alt+shift+down)
-- clear current expression (alt+c)
-- cancel search (alt+c)
-- opening editor on mac (option+o)/(alt+o)
Modifies the prompt for new lines to make it clearer that the prompt has entered multi-line mode. Supports terminal with small window size, recommend not go lower than 7 rows and 40 columns. Modifies the search prompt to support multi-line statements. Redraw the prompt after continuing from JCL menu.
Full runtime dependencies of kernel-9.0: crypto-5.0, erts-14.0, sasl-3.0, stdlib-5.0
megaco-4.4.4 #
- OTP-18538
-
Removed configure option --enable-sanitizers. It was untested and broken. Address sanitizer for the emulator has better support by the asan build target.
Full runtime dependencies of megaco-4.4.4: asn1-3.0, debugger-4.0, erts-12.0, et-1.5, kernel-8.0, runtime_tools-1.8.14, stdlib-2.5
mnesia-4.22 #
- OTP-18309
-
- Application(s):
- mnesia
- Related Id(s):
- PR-6377
Added debug statistics for active transactions.
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
*** POTENTIAL INCOMPATIBILITY ***
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
Full runtime dependencies of mnesia-4.22: erts-9.0, kernel-5.3, stdlib-5.0
observer-2.15 #
- OTP-18350
-
- Application(s):
- inets, observer, os_mon, reltool, wx
Runtime dependencies have been updated.
- OTP-18430
-
- Application(s):
- observer
- Related Id(s):
- PR-6397
Added start/1, start_and_wait functions/1|2 functions.
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
Full runtime dependencies of observer-2.15: erts-14.0, et-1.5, kernel-9.0, runtime_tools-1.19, stdlib-5.0, wx-2.3
odbc-2.14.1 #
- OTP-18539
-
- Application(s):
- odbc
Allow larger column sizes than 8001 in case DB supports it.
Full runtime dependencies of odbc-2.14.1: erts-6.0, kernel-3.0, stdlib-2.0
os_mon-2.9 #
- OTP-18246
-
Fix internal os_mon_sysinfo:get_disk_info/1 function to not crash when run on Windows with multiple drives.
- OTP-18546
-
Fixed a memory leak when calling cpu_sup:util/0,1 on FreeBSD.
- OTP-18303
-
- Application(s):
- os_mon
- Related Id(s):
- PR-6384
The disksup:get_disk_info/0 and disksup:get_disk_info/1 functions have been introduced. These can be used in order to immediately fetch information about current disk usage.
- OTP-18350
-
- Application(s):
- inets, observer, os_mon, reltool, wx
Runtime dependencies have been updated.
- OTP-18566
-
- Application(s):
- os_mon
- Related Id(s):
- PR-7080
Support for cpu_sup:util() on OpenBSD.
Full runtime dependencies of os_mon-2.9: erts-14.0, kernel-9.0, sasl-4.2.1, stdlib-5.0
public_key-1.14 #
- OTP-18447
-
- Application(s):
- asn1, crypto, erts, kernel, public_key, runtime_tools
Handling of on_load modules during boot has been improved by adding an extra step in the boot order for embedded mode that runs all on_load handlers, instead of relying on explicit invocation of them, later, when the kernel supervision tree starts.
This is mostly a code improvement and OTP internal simplification to avoid future bugs and to simplify code maintenance.
Full runtime dependencies of public_key-1.14: asn1-3.0, crypto-4.6, erts-6.0, kernel-3.0, stdlib-3.5
reltool-1.0 #
- OTP-18230
-
- Application(s):
- reltool
- Related Id(s):
- PR-5936
Add possibility to strip specific chunks from beam files included in a release. Before this change it was only possible to strip all chunks from the beam files.
- OTP-18350
-
- Application(s):
- inets, observer, os_mon, reltool, wx
Runtime dependencies have been updated.
- OTP-18488
-
- Application(s):
- reltool
- Related Id(s):
- PR-6836
*** POTENTIAL INCOMPATIBILITY ***
Support for the experimental code archives feature has been removed from reltool.
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
*** POTENTIAL INCOMPATIBILITY ***
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
Full runtime dependencies of reltool-1.0: erts-14.0, kernel-9.0, sasl-4.2.1, stdlib-5.0, stdlib-5.0, tools-2.6.14, wx-2.3
runtime_tools-2.0 #
- OTP-18499
-
- Application(s):
- runtime_tools
- Related Id(s):
- PR-6946
Fixed the type specification for instrument:carriers/0,1
- OTP-18211
-
- Application(s):
- runtime_tools
- Related Id(s):
- PR-6143
Add dbg:tracer(file, Filename) as a convenient way to trace to a file in clean text.
- OTP-18447
-
- Application(s):
- asn1, crypto, erts, kernel, public_key, runtime_tools
Handling of on_load modules during boot has been improved by adding an extra step in the boot order for embedded mode that runs all on_load handlers, instead of relying on explicit invocation of them, later, when the kernel supervision tree starts.
This is mostly a code improvement and OTP internal simplification to avoid future bugs and to simplify code maintenance.
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18487
-
- Application(s):
- runtime_tools, tools
- Related Id(s):
- PR-6829
The instrument module has been moved from tools to runtime_tools.
- OTP-18549
-
- Application(s):
- erts, runtime_tools
- Related Id(s):
- PR-7105
*** POTENTIAL INCOMPATIBILITY ***
Removed the experimental erts_alloc_config module. It no longer produced good configurations and cannot be fixed in a reasonably backwards compatible manner. It has since OTP 25 been deprecated and scheduled for removal in OTP 26.
Full runtime dependencies of runtime_tools-2.0: erts-11.0, kernel-8.1, mnesia-4.12, stdlib-3.13
sasl-4.2.1 #
- OTP-18300
-
- Application(s):
- sasl
- Related Id(s):
- PR-6389
Improved error message from systools:make_script, when .app parameters contain duplicates. The parameters that will be checked are modules, applications and registered.
Full runtime dependencies of sasl-4.2.1: erts-10.2, kernel-6.0, stdlib-4.0, tools-2.6.14
snmp-5.14 #
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
*** POTENTIAL INCOMPATIBILITY ***
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
Full runtime dependencies of snmp-5.14: crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12, runtime_tools-1.8.14, stdlib-5.0
ssh-5.0 #
- OTP-18231
-
The ssh_cli has been updated to work with the changes introduced in the new Erlang shell implementation.
- OTP-18285
-
- Application(s):
- kernel, ssh, stdlib
- Related Id(s):
- PR-6262
*** POTENTIAL INCOMPATIBILITY ***
Typing Ctrl+L in a shell now clears the screen and redraws the current line instead of only redrawing the current line. To only redraw the current line, you must now type Alt+L. This brings the behaviour of Ctrl+L closer to how bash and other shells work.
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
*** POTENTIAL INCOMPATIBILITY ***
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
Full runtime dependencies of ssh-5.0: crypto-5.0, erts-14.0, kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1, stdlib-5.0, stdlib-5.0
ssl-11.0 #
- OTP-14771
-
- Application(s):
- ssl
*** POTENTIAL INCOMPATIBILITY ***
Remove less that 256 bit ECC from default supported ECC pre TLS-1.3
- OTP-15903
-
- Application(s):
- ssl
*** HIGHLIGHT ***
Improved error checking and handling of ssl options.
- OTP-18168
-
*** POTENTIAL INCOMPATIBILITY ***
With this change, stateless tickets generated by server with anti_replay option enabled can be used for creating ClientHello throughout ticket lifetime. Without this change, usability was limited to WindowSize number of seconds configured for anti_replay option.
- OTP-18235
-
*** HIGHLIGHT ***
Support for Kernel TLS (kTLS), has been added to the SSL application, for TLS distribution (-proto_dist inet_tls), the SSL option {ktls, true}. Using this for general SSL sockets is uncomfortable, undocumented and not recommended since it requires very platform dependent raw options.
This, for now, only works for some not too old Linux distributions. Roughly, a kernel 5.2.0 or later with support for UserLand Protocols and the kernel module tls is required.
- OTP-18253
-
- Application(s):
- ssl
With this change, TLS 1.3 server can be configured to include client certificate in session ticket.
- OTP-18254
-
- Application(s):
- ssl
- Related Id(s):
- PR-5982
With this change, it is possible to configure encryption seed to be used with TLS1.3 stateless tickets. This enables using tickets on different server instances.
- OTP-18312
-
- Application(s):
- ssl
Debugging enhancements.
- OTP-18335
-
- Application(s):
- ssl
With this change, maybe keyword atom is not used as function name in ssl code.
- OTP-18405
-
- Application(s):
- crypto, diameter, kernel, ssl
- Related Id(s):
- GH-6672 , PR-6700 , PR-6702 , PR-6768 , PR-6769 , PR-6812 , PR-6814
Replace size/1 with either tuple_size/1 or byte_size/1
The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer.
When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred.
When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1.
- OTP-18438
-
- Application(s):
- ssl
- Related Id(s):
- GH-6679
*** POTENTIAL INCOMPATIBILITY ***
For security reasons remove support for SHA1 and DSA algorithms from default values.
- OTP-18453
-
- Application(s):
- ssl
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.
- OTP-18455
-
- Application(s):
- ssl
- Related Id(s):
- GH-5899
*** POTENTIAL INCOMPATIBILITY ***
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.
- OTP-18456
-
- Application(s):
- kernel, ssl
Erlang distribution code in Kernel and SSL has been refactored a bit to facilitate debugging and re-usability, which shouldn't have any noticeable effects on behaviour or performance.
- OTP-18459
-
- Application(s):
- ssl
*** HIGHLIGHT ***
Add encoding and decoding of use_srtp hello extension to facilitate for DTLS users to implement SRTP functionality.
- OTP-18465
-
- Application(s):
- ssl
- Related Id(s):
- GH-7065
Refactors the (ssl application to use macros for TLS and DTLS versions instead of hard-coded tuple numbers. This change improves the maintainability of ssl
- OTP-18507
-
- Application(s):
- ssl
If the function ssl:renegotiate/1 is called on connection that is running TLS-1.3 return an error instead of hanging or timing out.
- OTP-18531
-
- Application(s):
- ssl
*** POTENTIAL INCOMPATIBILITY ***
If a user cancel alert with level warning is received during handshake make it be handled the same regardless of TLS version. If it is received in connection in TLS-1.3 regard it as an error as it is inappropriate.
In TLS-1.3 all error alerts are considered FATAL regardless of legacy alert type. But make sure legacy type is printed in logs to not confuse users that are expecting the same legacy type as sent by peer.
- OTP-18567
-
- Application(s):
- ssl
Make fail_if_no_peer_cert default true if verify_peer is set on the server, otherwise the server will accept the connection if verify_peer is set and the user have forgot to set the fail_if_no_peer_cert and the client did not send a certificate.
- OTP-18572
-
- Application(s):
- ssl
To make it easier to configure signature algorithms with algorithms that are moved from the default add the API function signature_algs/2 that lists possible values. Also make sha224 a non default value.
Full runtime dependencies of ssl-11.0: crypto-5.0, erts-14.0, inets-5.10.7, kernel-9.0, public_key-1.11.3, runtime_tools-1.15.1, stdlib-4.1
stdlib-5.0 #
- OTP-18275
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6045
All process calls in dets have been updated to use the receive queue optimizations.
- OTP-18471
-
*** POTENTIAL INCOMPATIBILITY ***
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.
All these start functions now consume the 'EXIT' message from a process link for all error returns. Previously it was only the start_link/* functions that did this, and only when the started function exited, not when it used init_ack/1,2 or init_fail/2,3 to create the return value.
- OTP-18486
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-6881
Fixed a bug where file:read(standard_io, ...) unexpectedly returned eof in binary mode.
- OTP-18548
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6967
In the shell, v(N) would fail to retrieve the command if the command's return value was undefined.
- OTP-14835
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-5924
*** HIGHLIGHT ***
The Erlang shell has been improved to support the following features:
-- Auto-complete variables, record names, record field names, map keys, function parameter types and filenames.
-- Open external editor in the shell (with C-o) to edit the current expression in an editor.
-- Support defining records (with types), functions and function typespecs, and custom types in the shell.
-- Do not save pager commands, and input to io:getline in history.
- OTP-15597
-
- Application(s):
- stdlib
- Related Id(s):
- PR-5831
Gen_server now caches external functions for use in handle_call, handle_cast and handle_info.
- OTP-17932
-
*** HIGHLIGHT ***
*** POTENTIAL INCOMPATIBILITY ***
The TTY/terminal subsystem has been rewritten by moving more code to Erlang from the old linked-in driver and implementing all the I/O primitives needed in a NIF instead.
On Unix platforms the user should not notice a lot of difference, besides better handling of unicode characters and fixing of some long standing bugs.
Windows users will notice that erl.exe has the same functionality as a normal Unix shell and that werl.exe has been removed and replaced with a symlink to erl.exe. This makes the Windows Erlang terminal experience identical to that of Unix.
The re-write brings with it a number of bug fixes and feature additions:
-- The TTY is now reset when Erlang exits, fixing zsh to not break when terminating an Erlang session.
-- standard_error now uses the same unicode mode as standard_io.
-- Hitting backspace when searching the shell history with an empty search string no longer breaks the shell.
-- Tab expansion now works on remote nodes started using the JCL interface.
-- It is now possible to configure the shell slogan and the session slogans (that is the texts that appear when you start an Erlang shell). See the kernel documentation for more details.
-- Added shell:start_interactive for starting the interactive shell from a non-interactive Erlang session (for example an escript).
-- On Windows, when starting in detached mode the standard handler are now set to nul devices instead of being unset.
-- Standard I/O now always defaults to unicode mode if supported. Previously the default was latin1 if the runtime system had been started with -oldshell or -noshell (for example in an escript). To send raw bytes over standard out, one now explicitly has to specify io:setopts(standard_io, [{encoding, latin1}]).
- OTP-18159
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6904
Added the zip:zip_get_crc32/2 function to retrieve the CRC32 checksum from an opened ZIP archive.
- OTP-18176
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6118
Added the options post_process_args and detached to the peer:start function.
- OTP-18221
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6197
The re:replace/3,4 functions now accept a fun as the replacement argument.
- OTP-18228
-
- Application(s):
- stdlib
- Related Id(s):
- GH-5639
*** HIGHLIGHT ***
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 more than three times faster than in Erlang/OTP 25.
- OTP-18236
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6256
Improved implementation of timer:apply_interval/4 reducing load on the timer server, and introduction of the new function timer:apply_repeatedly/4. timer:apply_repeatedly/4 is similar to timer:apply_interval/4, but timer:apply_repeatedly/4 prevents parallel execution of triggered apply operations which timer:apply_interval/4 does not.
- OTP-18247
-
The base64 module now supports encoding and decoding with an alternate URL safe alphabet, and an option for accepting or adding missing = padding characters.
- OTP-18272
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6279
Add shell:whereis/0 which can be used to locate the current shell process.
- OTP-18278
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-6260
*** HIGHLIGHT ***
The Erlang shell's auto-completion when typing tab has been changed to happen after the editing current line instead of before it.
This behaviour can be configured using a the shell_expand_location STDLIB configuration parameter.
- OTP-18279
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6234
New function ets:lookup_element/4 with a Default argument returned if the key did not exist in the table. The old ets:lookup_element/3 raises a badarg exception which can be both inconvenient and slower.
- OTP-18285
-
- Application(s):
- kernel, ssh, stdlib
- Related Id(s):
- PR-6262
*** POTENTIAL INCOMPATIBILITY ***
Typing Ctrl+L in a shell now clears the screen and redraws the current line instead of only redrawing the current line. To only redraw the current line, you must now type Alt+L. This brings the behaviour of Ctrl+L closer to how bash and other shells work.
- OTP-18287
-
- Application(s):
- stdlib
- Related Id(s):
- PR-5955
peer nodes using standard_io connections now include standard error from the node in the io stream from the started node.
- OTP-18297
-
- Application(s):
- compiler, stdlib
- Related Id(s):
- GH-6348
*** HIGHLIGHT ***
A limitation in the binary syntax has been removed. It is now possible to match binary patterns in parallel. Example: <<A:8>> = <<B:4,C:4>> = Bin
- OTP-18301
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6350
Improve type specification of unicode:characters_to_list().
- OTP-18318
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6347
*** HIGHLIGHT ***
In the lists module, the zip family of functions now takes options to allow handling lists of different lengths.
- OTP-18337
-
It is documented that $\^X is the ASCII code for Control X, where X is an uppercase or lowercase letter. However, this notation would work for any character X, even then it didn't make sense.
In Erlang/OTP 26, it is now documented that the following characters are also allowed to follow the \^ characters: @, [, \, ], ^, _, and ?. Attempt to use other characters will be rejected with a compiler error.
The value for $\^? is now 127 (instead of 31 as in earlier releases).
- OTP-18354
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6297
The binary:encode_hex/2 function has been added to allow the encoded hexadecimal digits to be in either lower or upper case.
- OTP-18355
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6507
Variants of timer:tc() with user specified time unit have been introduced.
- OTP-18361
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6536
New function math:tau/0. Returns 2*math:pi().
- OTP-18367
-
- Application(s):
- compiler, erts, stdlib
- Related Id(s):
- GH-6544
*** HIGHLIGHT ***
The BIFs min/2 and max/2 are now allowed to be used in guards and match specs.
- OTP-18385
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6698
Optimized gen_server:multi_call().
- OTP-18413
-
- Application(s):
- compiler, erts, stdlib, syntax_tools, tools
- Related Id(s):
- EEP-58 , PR-6727
*** HIGHLIGHT ***
Map comprehensions as suggested in EEP 58 has now been implemented.
- OTP-18414
-
- Application(s):
- erts, stdlib
- Related Id(s):
- PR-6151
*** HIGHLIGHT ***
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.
For applications where order is important, there is a new function maps:iterator/2 for creating iterators that return the map elements in a deterministic order. There are also new modifiers k and K for the format string for io:format() to support printing map elements ordered.
- OTP-18423
-
- Application(s):
- stdlib
- Related Id(s):
- com/erlang/backlog/issues/142 , https://github
Make gen_server fail "silently" with a new return value for init/1.
- OTP-18431
-
- Application(s):
- compiler, stdlib
- Related Id(s):
- PR-6739
*** HIGHLIGHT ***
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.
- OTP-18445
-
- Application(s):
- erts, stdlib
*** HIGHLIGHT ***
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.
That means that to use feature maybe_expr in Erlang/OTP 26, it is sufficient to enable it during compilation.
In Erlang/OTP 27, feature maybe_expr will be enabled by default, but it will be possible to disable it.
- OTP-18474
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6895
Static supervisors are very idle processes after they have started so they will now be hibernated after start to improve resource management.
- OTP-18478
-
- Application(s):
- common_test, compiler, dialyzer, diameter, et, ftp, inets, kernel, observer, runtime_tools, ssh, stdlib
- Related Id(s):
- GH-6903
Deprecates dbg:stop_clear/0 because it is simply a function alias to dbg:stop/0
- OTP-18494
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6924
Support has been added in ms_transform for the actions caller_line/0, current_stacktrace/0, and current_stacktrace/1.
- OTP-18495
-
- Application(s):
- stdlib
- Related Id(s):
- PR-6943
*** HIGHLIGHT ***
The family of enumeration functions in module lists has been extended with enumerate/3 that allows a step value to be supplied.
- OTP-18500
-
- Application(s):
- stdlib
*** HIGHLIGHT ***
Update Unicode to version 15.0.0.
- OTP-18511
-
- Application(s):
- otp, stdlib
- Related Id(s):
- PR-7017
The regular expression library powering the re module is likely to be changed in Erlang/OTP 27. See Upcoming Potential Incompatibilities.
- OTP-18515
-
- Application(s):
- stdlib
- Related Id(s):
- GH-6990
Improved the performance of sets:subtract/2 when subtracting a small number of elements.
- OTP-18518
-
- Application(s):
- stdlib
- Related Id(s):
- GH-7015
The linter will no longer raise warnings for underspecified opaque types.
- OTP-18522
-
- Application(s):
- dialyzer, erts, stdlib
*** HIGHLIGHT ***
Added the new built-in type dynamic() introduced in EEP-61, improving support for gradual type checkers.
- OTP-18537
-
- Application(s):
- stdlib
- Related Id(s):
- PR-7081
The by gen_statem previously used call proxy process that was used for preventing late replies from reaching the client at timeout or connection loss has been removed. It is no longer needed since process aliases take care of this, are used, and supported by all Erlang nodes that an OTP 26 Erlang node can communicate with.
- OTP-18558
-
- Application(s):
- dialyzer, stdlib
- Related Id(s):
- PR-6852
Added the argparse module for simplified argument handling in escripts and similar.
- OTP-18575
-
- Application(s):
- kernel, stdlib
- Related Id(s):
- PR-7169
Added support for multiple line expressions and navigation in the shell. Added new keybindings:
-- navigate up (ctrl+up)/(alt+up)
-- navigate down (ctrl+down)/(alt+down)
-- insert newline in middle of line (alt+enter)
-- navigate top (alt+<)/(alt+shift+up)
-- navigate bottom (alt+>)/(alt+shift+down)
-- clear current expression (alt+c)
-- cancel search (alt+c)
-- opening editor on mac (option+o)/(alt+o)
Modifies the prompt for new lines to make it clearer that the prompt has entered multi-line mode. Supports terminal with small window size, recommend not go lower than 7 rows and 40 columns. Modifies the search prompt to support multi-line statements. Redraw the prompt after continuing from JCL menu.
Full runtime dependencies of stdlib-5.0: compiler-5.0, crypto-4.5, erts-13.1, kernel-9.0, sasl-3.0
syntax_tools-3.1 #
- OTP-18413
-
- Application(s):
- compiler, erts, stdlib, syntax_tools, tools
- Related Id(s):
- EEP-58 , PR-6727
*** HIGHLIGHT ***
Map comprehensions as suggested in EEP 58 has now been implemented.
Full runtime dependencies of syntax_tools-3.1: compiler-7.0, erts-9.0, kernel-5.0, stdlib-4.0
tftp-1.1 #
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
*** POTENTIAL INCOMPATIBILITY ***
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
Full runtime dependencies of tftp-1.1: erts-6.0, kernel-6.0, stdlib-5.0
tools-3.6 #
- OTP-18413
-
- Application(s):
- compiler, erts, stdlib, syntax_tools, tools
- Related Id(s):
- EEP-58 , PR-6727
*** HIGHLIGHT ***
Map comprehensions as suggested in EEP 58 has now been implemented.
- OTP-18487
-
- Application(s):
- runtime_tools, tools
- Related Id(s):
- PR-6829
The instrument module has been moved from tools to runtime_tools.
Full runtime dependencies of tools-3.6: compiler-5.0, erts-11.0, erts-9.1, kernel-5.4, runtime_tools-1.8.14, stdlib-3.4
wx-2.3 #
- OTP-18350
-
- Application(s):
- inets, observer, os_mon, reltool, wx
Runtime dependencies have been updated.
- OTP-18490
-
- Application(s):
- diameter, inets, mnesia, reltool, snmp, ssh, tftp, wx
- Related Id(s):
- GH-6339 , OTP-18471 , PR-6843
*** POTENTIAL INCOMPATIBILITY ***
The implementation has been fixed to use proc_lib:init_fail/2,3 where appropriate, instead of proc_lib:init_ack/1,2.
Full runtime dependencies of wx-2.3: erts-12.0, kernel-8.0, stdlib-5.0