Inital Release: OTP 26.0 Git Tag: OTP-26.0 Date: 2023-02-15 Trouble Report Id: OTP-14835, OTP-15597, OTP-15903, OTP-16607, OTP-17771, OTP-17932, OTP-18016, OTP-18029, OTP-18053, OTP-18126, OTP-18131, OTP-18135, OTP-18137, OTP-18140, OTP-18141, OTP-18150, OTP-18159, OTP-18167, OTP-18168, OTP-18176, OTP-18185, OTP-18188, OTP-18204, OTP-18206, OTP-18209, OTP-18210, OTP-18211, OTP-18221, OTP-18225, OTP-18226, OTP-18227, OTP-18228, OTP-18230, OTP-18231, OTP-18235, OTP-18236, OTP-18237, OTP-18238, OTP-18246, OTP-18247, OTP-18248, OTP-18253, OTP-18254, OTP-18259, OTP-18261, OTP-18271, OTP-18272, OTP-18274, OTP-18275, OTP-18276, OTP-18277, OTP-18278, OTP-18279, OTP-18282, OTP-18285, OTP-18286, OTP-18287, OTP-18297, OTP-18300, OTP-18301, OTP-18303, OTP-18305, OTP-18309, OTP-18312, OTP-18318, OTP-18327, OTP-18334, OTP-18335, OTP-18337, OTP-18338, OTP-18340, OTP-18342, OTP-18344, OTP-18350, OTP-18354, OTP-18355, OTP-18360, OTP-18361, OTP-18364, OTP-18367, OTP-18369, OTP-18377, OTP-18385, OTP-18405, OTP-18410, OTP-18413, OTP-18414, OTP-18419, OTP-18423, OTP-18424, OTP-18425, OTP-18430, OTP-18431, OTP-18435, OTP-18438, OTP-18439, OTP-18440, OTP-18441, OTP-18442, OTP-18444, OTP-18445, OTP-18447, OTP-18448, OTP-18451, OTP-18452, OTP-18453, OTP-18456, OTP-18459 Seq num: GH-3150, GH-3390, GH-4225, GH-4343, GH-4965, GH-5325, GH-5333, GH-5639, GH-5695, GH-5877, GH-5889, GH-6014, GH-6085, GH-6117, GH-6132, GH-6139, GH-6156, GH-6221, GH-6333, GH-6348, GH-6461, GH-6477, GH-6544, GH-6606, GH-6672, GH-6679 System: OTP Release: 26 Application: asn1-5.1, common_test-1.24, compiler-8.3, crypto-5.2, dialyzer-5.1, diameter-2.3, erl_docgen-1.5, erl_interface-5.4, erts-14.0, inets-8.3, jinterface-1.14, kernel-9.0, mnesia-4.22, observer-2.15, os_mon-2.9, public_key-1.14, reltool-0.10, runtime_tools-1.20, sasl-4.2.1, ssh-5.0, ssl-11.0, stdlib-5.0, syntax_tools-3.1, tools-3.6, wx-2.3 Predecessor: OTP Check out the git tag OTP-26.0, and build a full OTP system including documentation. --------------------------------------------------------------------- --- 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-17932 Application(s): erts, kernel, stdlib Related Id(s): GH-3150, GH-3390, GH-4225, GH-4343, PR-6144 The TTY/terminal subsystem has been rewritten from 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. OTP-18135 Application(s): erts Related Id(s): GH-4965, PR-6046 *** 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 Application(s): compiler, erts Related Id(s): PR-6259, PR-6404, PR-6576, PR-6804 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 almost three times faster than in Erlang/OTP 25. OTP-18235 Application(s): kernel, ssl Related Id(s): PR-5840, PR-6104 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: <> = <> = Bin OTP-18318 Application(s): stdlib Related Id(s): PR-6347 In the lists, 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. OTP-18459 Application(s): ssl Add encoding and decoding of use_srtp hello extension to facilitate for DTLS users to implement SRTP functionality. --------------------------------------------------------------------- --- POTENTIAL INCOMPATIBILITIES ------------------------------------- --------------------------------------------------------------------- OTP-17771 Application(s): erts Related Id(s): GH-5325, PR-6370 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-18135 Application(s): erts Related Id(s): GH-4965, PR-6046 *** 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. -- 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 Application(s): ssl Related Id(s): GH-6014, PR-6019 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-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 Application(s): erts, kernel Related Id(s): GH-6461, OTP-18324, PR-6481, PR-6522 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-26.0 -------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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. --- Improvements and New Features --- 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. --------------------------------------------------------------------- --- asn1-5.1 -------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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.24 ------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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. --- Improvements and New Features --- 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 Full runtime dependencies of common_test-1.24: 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 ---------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-18126 Application(s): compiler, erts Related Id(s): PR-6033 Optimized record updates. OTP-18137 Application(s): compiler, erts Related Id(s): PR-6259, PR-6404, PR-6576, PR-6804 *** 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: <> = <> = Bin OTP-18337 Application(s): compiler, stdlib Related Id(s): GH-6477, PR-6503 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. Full runtime dependencies of compiler-8.3: crypto-5.1, erts-13.0, kernel-8.4, stdlib-5.0 --------------------------------------------------------------------- --- crypto-5.2 ------------------------------------------------------ --------------------------------------------------------------------- --- Improvements and New Features --- 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 ---------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-18237 Application(s): dialyzer Related Id(s): GH-6221, PR-6243 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. --- Improvements and New Features --- 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 Application(s): dialyzer Related Id(s): GH-6132, PR-6335 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-18342 Application(s): dialyzer Related Id(s): GH-6117, PR-6654 Dialyzer's overloaded domain warning becomes is 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 Application(s): dialyzer Related Id(s): GH-5695, PR-6822 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 Full runtime dependencies of dialyzer-5.1: compiler-8.0, erts-12.0, kernel-8.0, stdlib-4.0, syntax_tools-2.0, wx-2.0 --------------------------------------------------------------------- --- diameter-2.3 ---------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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. Full runtime dependencies of diameter-2.3: erts-10.0, kernel-3.2, ssl-9.0, stdlib-3.0 --------------------------------------------------------------------- --- erl_docgen-1.5 -------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-18338 Application(s): erl_docgen Related Id(s): PR-6408 New XML tag . Like a box, but with a different (steel blue) color and label. Intended to contain talk about semantic differences between OTP releases. 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 ----------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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. -- 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. --- Known Bugs and Problems --- 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 ------------------------------------------------------- --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- 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 Application(s): erts, kernel Related Id(s): GH-6085, PR-6227 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. --- Improvements and New Features --- OTP-17771 Application(s): erts Related Id(s): GH-5325, PR-6370 *** 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 Application(s): erts, kernel, stdlib Related Id(s): GH-3150, GH-3390, GH-4225, GH-4343, PR-6144 *** HIGHLIGHT *** The TTY/terminal subsystem has been rewritten from 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. OTP-18029 Application(s): erts, kernel Preparation for adding Windows support to 'socket'. 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 Application(s): erts Related Id(s): GH-4965, PR-6046 *** 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 Application(s): compiler, erts Related Id(s): PR-6259, PR-6404, PR-6576, PR-6804 *** 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. -- 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 Application(s): erts Related Id(s): OTP-18140, PR-6073 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 the command is not 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 Application(s): erts, kernel Related Id(s): GH-6461, OTP-18324, PR-6481, PR-6522 *** 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 Application(s): erts Related Id(s): GH-5889, PR-6345 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 Application(s): erts Related Id(s): GH-5333, PR-6628 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. 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 erts-14.0: kernel-9.0, sasl-3.3, stdlib-4.1 --------------------------------------------------------------------- --- inets-8.3 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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. Full runtime dependencies of inets-8.3: erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14, ssl-9.0, stdlib-5.0 --------------------------------------------------------------------- --- jinterface-1.14 ------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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. -- 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 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-18210 Application(s): kernel Related Id(s): GH-5877, PR-5878 Fix 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 Application(s): erts, kernel Related Id(s): GH-6085, PR-6227 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. --- Improvements and New Features --- 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 Application(s): erts, kernel, stdlib Related Id(s): GH-3150, GH-3390, GH-4225, GH-4343, PR-6144 *** HIGHLIGHT *** The TTY/terminal subsystem has been rewritten from 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. OTP-18029 Application(s): erts, kernel Preparation for adding Windows support to 'socket'. 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. -- 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 Application(s): kernel, ssl Related Id(s): PR-5840, PR-6104 *** 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-18344 Application(s): erts, kernel Related Id(s): GH-6461, OTP-18324, PR-6481, PR-6522 *** 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 Application(s): kernel Related Id(s): GH-6606, PR-6786 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. Full runtime dependencies of kernel-9.0: crypto-5.0, erts-14.0, sasl-3.0, stdlib-5.0 --------------------------------------------------------------------- --- mnesia-4.22 ----------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-18309 Application(s): mnesia Related Id(s): PR-6377 Added debug statistics for active transactions. Full runtime dependencies of mnesia-4.22: erts-9.0, kernel-5.3, stdlib-3.4 --------------------------------------------------------------------- --- observer-2.15 --------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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. 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 --------------------------------------------------------------------- --- os_mon-2.9 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-18246 Application(s): os_mon Related Id(s): GH-6156, PR-6284 Fix internal os_mon_sysinfo:get_disk_info/1 function to not crash when run on Windows with multiple drives. --- Improvements and New Features --- 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. 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 ------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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-0.10 ---------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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. Full runtime dependencies of reltool-0.10: erts-14.0, kernel-9.0, sasl-4.2.1, stdlib-5.0, tools-2.6.14, wx-2.3 --------------------------------------------------------------------- --- runtime_tools-1.20 ---------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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. Full runtime dependencies of runtime_tools-1.20: erts-11.0, kernel-8.1, mnesia-4.12, stdlib-3.13 --------------------------------------------------------------------- --- sasl-4.2.1 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-18300 Application(s): sasl Related Id(s): PR-6389 Improve 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 --------------------------------------------------------------------- --- ssh-5.0 --------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-18231 Application(s): ssh Related Id(s): OTP-17932, PR-6144 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. 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 --------------------------------------------------------------------- --- ssl-11.0 -------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-15903 Application(s): ssl Improved error checking and handling of ssl options. OTP-18168 Application(s): ssl Related Id(s): GH-6014, PR-6019 *** 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 Application(s): kernel, ssl Related Id(s): PR-5840, PR-6104 *** 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-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. 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 ------------------------------------------------------ --------------------------------------------------------------------- --- Fixed Bugs and Malfunctions --- OTP-18275 Application(s): stdlib Related Id(s): PR-6045 All process calls in dets have been updated to use the receive queue optimizations. --- Improvements and New Features --- 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 Application(s): erts, kernel, stdlib Related Id(s): GH-3150, GH-3390, GH-4225, GH-4343, PR-6144 *** HIGHLIGHT *** The TTY/terminal subsystem has been rewritten from 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. OTP-18150 Application(s): stdlib Added codepoint category to unicode_util 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 Add the new options post_process_args and detached to peer:start function. OTP-18221 Application(s): stdlib Related Id(s): PR-6197 The re:replace/3,4 functions now accept 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 almost 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 Application(s): stdlib Related Id(s): PR-6280, PR-6711 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 inconveniente 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: <> = <> = 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, the zip family of functions now takes options to allow handling lists of different lengths. OTP-18337 Application(s): compiler, stdlib Related Id(s): GH-6477, PR-6503 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. 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 ------------------------------------------------ --------------------------------------------------------------------- --- Improvements and New Features --- 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 --------------------------------------------------------------------- --- tools-3.6 ------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- 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 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 ---------------------------------------------------------- --------------------------------------------------------------------- --- Improvements and New Features --- OTP-18350 Application(s): inets, observer, os_mon, reltool, wx Runtime dependencies have been updated. Full runtime dependencies of wx-2.3: erts-12.0, kernel-8.0, stdlib-3.15 --------------------------------------------------------------------- --------------------------------------------------------------------- ---------------------------------------------------------------------