diff options
Diffstat (limited to 'lib/stdlib/doc/src/notes.xml')
-rw-r--r-- | lib/stdlib/doc/src/notes.xml | 709 |
1 files changed, 708 insertions, 1 deletions
diff --git a/lib/stdlib/doc/src/notes.xml b/lib/stdlib/doc/src/notes.xml index aaf1887dc8..403abf2be8 100644 --- a/lib/stdlib/doc/src/notes.xml +++ b/lib/stdlib/doc/src/notes.xml @@ -4,7 +4,7 @@ <chapter> <header> <copyright> - <year>2004</year><year>2021</year> + <year>2004</year><year>2022</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> @@ -31,6 +31,713 @@ </header> <p>This document describes the changes made to the STDLIB application.</p> +<section><title>STDLIB 4.3</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p>Fixed a bug that would cause analysis to crash.</p> + <p> + Own Id: OTP-18372 Aux Id: GH-6580 </p> + </item> + <item> + <p>Fixed a crash when formatting stack traces for error + reports.</p> + <p> + Own Id: OTP-18375 Aux Id: GH-6591 </p> + </item> + <item> + <p>Instead of crashing, the <c>list_to_integer/1</c> and + <c>list_to_integer/2</c> BIFs now raise the + <c>system_limit</c> exception for overlong lists that + can't be converted to integers. Similarly, the + <c>string:to_integer/1</c> BIF now returns + <c>{error,system_limit}</c> for overlong lists.</p> + <p> + Own Id: OTP-18475 Aux Id: PR-6897 </p> + </item> + </list> + </section> + + + <section><title>Improvements and New Features</title> + <list> + <item> + <p> + Removal of non-necessary <c>undefined</c> types added to + the state's <c>supervisor</c> record.</p> + <p> + Own Id: OTP-18393 Aux Id: PR-6666 </p> + </item> + </list> + </section> + +</section> + +<section><title>STDLIB 4.2</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p><c>erl_tar</c> can now read gzip-compressed tar files + that are padded. There is a new option + <c>compressed_one</c> for <c>file:open/2</c> that will + read a single member from a gzip file,</p> + <p> + Own Id: OTP-18289 Aux Id: PR-6343 </p> + </item> + <item> + <p> + A concurrent call to <c>ets:rename</c> could cause + <c>ets:delete_all_objects</c> to fail halfway through + with badarg.</p> + <p> + Own Id: OTP-18292 Aux Id: PR-6366 </p> + </item> + <item> + <p>It is not allowed to call functions from guards. The + compiler failed to reject a call in a guard when done by + constructing a record with a default initialization + expression that called a function.</p> + <p> + Own Id: OTP-18325 Aux Id: GH-6465, GH-6466 </p> + </item> + <item> + <p>The compiler could crash when using a record with + complex field initialization expression as a filter in a + list comprehension.</p> + <p> + Own Id: OTP-18336 Aux Id: GH-6501, PR-6502 </p> + </item> + <item> + <p> + <c>unicode:characters_to_binary()</c> could build + unnecessarily large call stack.</p> + <p> + Own Id: OTP-18351 Aux Id: ERIERL-885, PR-6529 </p> + </item> + </list> + </section> + + + <section><title>Improvements and New Features</title> + <list> + <item> + <p> + Improve error message for ets:new/2 name clash. Say "name + already exists" instead of less specific "invalid + options".</p> + <p> + Own Id: OTP-18283 Aux Id: PR-6338 </p> + </item> + </list> + </section> + +</section> + +<section><title>STDLIB 4.1.1</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> + <seeerl marker="stdlib:peer"><c>peer</c></seeerl> nodes + failed to halt when the process supervising the control + connection crashed. When an alternative control + connection was used, this supervision process also quite + frequently crashed when the <c>peer</c> node was stopped + by the node that started it which caused the <c>peer</c> + node to linger without ever halting.</p> + <p> + Own Id: OTP-18249 Aux Id: PR-6301 </p> + </item> + </list> + </section> + +</section> + +<section><title>STDLIB 4.1</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> + Fixed inconsistency bugs in <seeerl + marker="kernel:global"><c>global</c></seeerl> due to + <c>nodeup</c>/<c>nodedown</c> messages not being + delivered before/after traffic over connections. Also + fixed various other inconsistency bugs and deadlocks in + both <seeerl + marker="kernel:global_group"><c>global_group</c></seeerl> + and <c>global</c>.</p> + <p> + As building blocks for these fixes, a new BIF <seemfa + marker="erts:erlang#nodes/2"><c>erlang:nodes/2</c></seemfa> + has been introduced and <seemfa + marker="kernel:net_kernel#monitor_nodes/2"><c>net_kernel:monitor_nodes/2</c></seemfa> + has been extended.</p> + <p> + The <seecom + marker="erts:erl#hidden"><c>-hidden</c></seecom> and + <seecom + marker="erts:erl#connect_all"><c>-connect_all</c></seecom> + command line arguments did not work if multiple instances + were present on the command line which has been fixed. + The new kernel parameter <seeapp + marker="kernel:kernel_app#connect_all"><c>connect_all</c></seeapp> + has also been introduced in order to replace the + <c>-connect_all</c> command line argument.</p> + <p> + Own Id: OTP-17934 Aux Id: PR-6007 </p> + </item> + <item> + <p> + Fix the <c>public_key:ssh*</c> functions to be listed + under the correct release in the Removed Functionality + User's Guide.</p> + <p> + Own Id: OTP-18139 Aux Id: PR-6060 </p> + </item> + <item> + <p> + The type spec for <c>format_status/1</c> in + <c>gen_statem</c>, <c>gen_server</c> and <c>gen_event</c> + has been corrected to state that the return value is of + the same type as the argument (instead of the same value + as the argument).</p> + <p> + Own Id: OTP-18142 Aux Id: PR-6078 </p> + </item> + <item> + <p> + If the <c>timer</c> server child spec was already present + in <c>kernel_sup</c> but it was not started, the + <c>timer</c> server would fail to start with an + <c>{error, already_present}</c> error instead of + restarting the server.</p> + <p> + Own Id: OTP-18146 Aux Id: PR-5983 </p> + </item> + <item> + <p>When changing callback module in <c>gen_statem</c> the + state_enter calls flag from the old module was used in + for the first event in the new module, which could + confuse the new module and cause malfunction. This bug + has been corrected. </p><p> With this change some + <c>sys</c> debug message formats have been modified, + which can be a problem for debug code relying on the + format. </p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-18239</p> + </item> + </list> + </section> + + + <section><title>Improvements and New Features</title> + <list> + <item> + <p>There is a new configure option, + <c>--enable-deterministic-build</c>, which will apply the + <c>deterministic</c> compiler option when building + Erlang/OTP. The <c>deterministic</c> option has been + improved to eliminate more sources of non-determinism in + several applications.</p> + <p> + Own Id: OTP-18165 Aux Id: PR-5965 </p> + </item> + <item> + <p>The <c>rfc339_to_system_time/1,2</c> functions now + allows the minutes part to be omitted from the time + zone.</p> + <p> + Own Id: OTP-18166 Aux Id: PR-6108 </p> + </item> + <item> + <p> + The <c>receive</c> statement in <c>gen_event</c> has been + optimized to not use selective receive (which was never + needed, and could cause severe performance degradation + under heavy load).</p> + <p> + Own Id: OTP-18194 Aux Id: PR-6199 </p> + </item> + <item> + <p> + Add new API function erl_features:configurable/0</p> + <p> + Own Id: OTP-18199 Aux Id: PR-5790 </p> + </item> + </list> + </section> + +</section> + +<section><title>STDLIB 4.0.1</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> + In the initial release of Erlang/OTP 25, the expression + bound to the <c>_</c> pseudo-field in a record + initialization would always be evaluated once, even if + all other fields in the record were explicitly + initialized. That would break the use case of binding the + expression <c>error(...)</c> to <c>_</c> in order to get + an exception if not all fields were initialized.</p> + <p> + The behavior of binding to <c>_</c> has been reverted to + the pre-OTP 25 behavior, that is, to not evaluate the + expression if all fields have been bound to explicit + values.</p> + <p> + Own Id: OTP-18110 Aux Id: GH-6000 </p> + </item> + </list> + </section> + +</section> + +<section><title>STDLIB 4.0</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> + Improve the Erlang code linter's check of unused types.</p> + <p> + Own Id: OTP-17370 Aux Id: GH-4784 </p> + </item> + <item> + <p> + Fix race condition in <seemfa + marker="stdlib:proc_lib#stop/3"><c>proc_lib:stop/3</c></seemfa> + where the process is not stopped when the timeout given + is very short.</p> + <p> + Own Id: OTP-17480 Aux Id: GH-4853 PR-4872 </p> + </item> + <item> + <p>Maps are now fully supported in by + <c>ms_transform</c>.</p> + <p> + Own Id: OTP-17518 Aux Id: GH-4915 </p> + </item> + <item> + <p> + Fix gen_server:call with the first argument as self() to + throw an error instead of failing with a timeout.</p> + <p> + The same fix has also been done for gen_statem:call/3, + gen_event:sync_notify/2 and any other functionality + relying on the internal gen:call/3 function.</p> + <p> + A similar fix was also done when using io:format/2 and + the current group_leader was set to the current process.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-17544 Aux Id: PR-5008 </p> + </item> + <item> + <p> + erl_pp printed unary - and + operators with a space + between the operator and the operand. This is fixed by + not having any space in between.</p> + <p> + Own Id: OTP-17566 Aux Id: PR-5095, GH-5093 </p> + </item> + <item> + <p> + Adjust uri_string:normalize behavior for URIs with + undefined port (URI string with a port colon but no port + value or URI map with port => undefined).</p> + <p> + Remove redundant normalization from http_request module.</p> + <p> + Before this change, normalize would not remove port + subcomponent in such cases and could for example return + "http://localhost:" URI.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-17627</p> + </item> + <item> + <p> + Fix reduction counting bug in <c>re:run</c> that caused + the function to yield too frequently when doing + <c>global</c> matches.</p> + <p> + Own Id: OTP-17661 Aux Id: PR-5165 </p> + </item> + <item> + <p> + Fix the memory value returned from + <c>ets:info(Tid,memory)</c> when the + <c>read_concurrency</c> option is used.</p> + <p> + Before this fix the memory used by the scheduler specific + lock cache lines was not counted towards the total. This + caused the returned memory usage to be very incorrect on + systems with many schedulers for tables with man locks.</p> + <p> + Own Id: OTP-17832 Aux Id: PR-5494 </p> + </item> + <item> + <p> + Avoid confusion by correcting the argument order in the + gen_event crash log printout.</p> + <p> + Own Id: OTP-17878</p> + </item> + <item> + <p> + Fixed <c>string:next_grapheme/1</c> to return an empty + binary in the tail for binary input for the last grapheme + cluster.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-18009 Aux Id: PR-5785 </p> + </item> + <item> + <p> + Fixed type specifications of the + <c>supervisor:sup_name/0</c> and + <c>supervisor:sup_ref/0</c> types.</p> + <p> + Own Id: OTP-18034 Aux Id: PR-4661, GH-4622 </p> + </item> + <item> + <p> + If a default record field initialization (<c>_ = + Expr</c>) was used even though all records fields were + explicitly initialized, <c>Expr</c> would not be + evaluated. That would not be a problem, except when + <c>Expr</c> would bind a variable subsequently used, in + which case the compiler would crash.</p> + <p> + As an example, if record <c>#r{}</c> is defined to have + only one field <c>a</c>, the following code would crash + the compiler:</p> + <p> + <c>#r{a=[],_=V=42}, V</c></p> + <p> + To fix that problem, the compiler will make sure that + <c>Expr</c> is always evaluated at least once. The + compiler will now rewrite the example to essentially:</p> + <p> + <c>V=42, #r{a=[]}, V</c></p> + <p> + Own Id: OTP-18083</p> + </item> + </list> + </section> + + + <section><title>Improvements and New Features</title> + <list> + <item> + <p> + Users can now configure ETS tables with the + <c>{write_concurrency, auto}</c> option. This option + forces tables to automatically change the number of locks + that are used at run-time depending on how much + concurrency is detected. The <c>{decentralized_counters, + true}</c> option is enabled by default when + <c>{write_concurrency, auto}</c> is active.</p> + <p> + Benchmark results comparing this option with the other + ETS optimization options are available here:</p> + <p> + https://erlang.org/bench/ets_bench_result_lock_config.html</p> + <p> + Own Id: OTP-15991 Aux Id: PR-5208 </p> + </item> + <item> + <p> + The <c>format_status/2</c> callback for + <c>gen_server</c>, <c>gen_statem</c> and <c>gen_event</c> + has been deprecated in favor of the new + <c>format_status/1</c> callback.</p> + <p> + The new callback adds the possibility to limit and change + many more things than the just the state, such as the + last received message, the reason for terminating and + more events specific to each type of behavior. See the + respective modules documentation for more details.</p> + <p> + Own Id: OTP-17351 Aux Id: GH-4673 PR-4952 </p> + </item> + <item> + <p>The <c>timer</c> module has been modernized and made + more efficient, which makes the timer server less + susceptible to being overloaded. The <c>timer:sleep/1</c> + function now accepts an arbitrarily large integer.</p> + <p> + Own Id: OTP-17481 Aux Id: PR-4811 </p> + </item> + <item> + <p> + Add <c>lists:enumerate/[1,2]</c>.</p> + <p> + Own Id: OTP-17523 Aux Id: PR-4928 </p> + </item> + <item> + <p> + The configuration files <seecom + marker="erts:erl"><c>.erlang</c></seecom>, <seeguide + marker="system/reference_manual:distributed"><c>.erlang.cookie</c></seeguide> + and <seeerl + marker="stdlib:beam_lib#.erlang.crypt"><c>.erlang.crypt</c></seeerl> + can now be located in the XDG Config Home directory.</p> + <p> + See the documentation for each file and + <c>filename:basedir/2</c> for more details.</p> + <p> + Own Id: OTP-17554 Aux Id: GH-5016 PR-5408 OTP-17821 </p> + </item> + <item> + <p> + Support <c>native</c> time unit in <c>calendar</c> + functions <c>system_time_to_rfc3339/2</c> and + <c>rfc3339_to_system_time</c>.</p> + <p> + Own Id: OTP-17592 Aux Id: ERIERL-663, PR-5243 </p> + </item> + <item> + <p> + The tagged tuple tests and fun-calls have been optimized + and are now a little bit cheaper than previously.</p> + <p> + These optimizations become possible after making sure + that all boxed terms have at least one word allocated + after the arity word. This has been accomplished by + letting all empty tuples refer to the same empty tuple + literal which also reduces memory usage for empty tuples.</p> + <p> + Own Id: OTP-17608</p> + </item> + <item> + <p> + The signal queue benchmark in parallel_messages_SUITE and + the ETS benchmark in ets_SUITE have benchmark result + visualization HTML pages with "fill-screen" buttons to + make the graphs bigger. This button did not work as + intended before. When pressing the button for a graph, + the last graph got replaced with a bigger version and not + the one over the button. This is now fixed.</p> + <p> + Own Id: OTP-17630</p> + </item> + <item> + <p> + The new module <c>peer</c> supersedes the <c>slave</c> + module. The <c>slave</c> module is now deprecated and + will be removed in OTP 27.</p> + <p> + <c>peer</c> contains an extended and more robust API for + starting erlang nodes.</p> + <p> + Own Id: OTP-17720 Aux Id: PR-5162 </p> + </item> + <item> + <p> + This change introduces quote and unquote functions in + uri_string module - a replacement for deprecated encode + and decode functions from http_uri.</p> + <p> + Own Id: OTP-17778 Aux Id: GH-5368 </p> + </item> + <item> + <p> + In order to make it easier for the user to manage + multiple outstanding asynchronous <c>call</c> requests, + new functionality utilizing request identifier + collections have been introduced in <seetype + marker="kernel:erpc#request_id_collection"><c>erpc</c></seetype>, + <seetype + marker="stdlib:gen_server#request_id_collection"><c>gen_server</c></seetype>, + <seetype + marker="stdlib:gen_statem#request_id_collection"><c>gen_statem</c></seetype>, + and <seetype + marker="stdlib:gen_event#request_id_collection"><c>gen_event</c></seetype>.</p> + <p> + Own Id: OTP-17784 Aux Id: PR-5792 </p> + </item> + <item> + <p> + Update to the Unicode 14.0 specification.</p> + <p> + Own Id: OTP-17869 Aux Id: PR-5595 </p> + </item> + <item> + <p> + The following ets types have been renamed to a clearer + name: <c>tab/0</c> to <c>table/0</c> and + <c>comp_match_spec/0</c> to <c>compiled_match_spec/0</c>.</p> + <p> + The types <c>table_access/0</c> and <c>table_type/0</c> + have been exported.</p> + <p> + Own Id: OTP-17901 Aux Id: GH-4968 PR-5649 </p> + </item> + <item> + <p> + Add support for locating <c>.asn1</c> files to the + default search rules of <c>filelib:find_file/1</c> and + <c>filelib:find_source/1</c>.</p> + <p> + Own Id: OTP-17908 Aux Id: GH-5655 PR-5669 </p> + </item> + <item> + <p>Type specifications have been added to the + <c>gen_server</c>, and the documentation has been updated + to utilize this. </p><p>This surfaced a few type + violations that has been corrected in <c>global</c>, + <c>logger_olp</c> and <c>rpc</c>. </p> + <p> + Own Id: OTP-17915 Aux Id: PR-5751, GH-2375, GH-2690 </p> + </item> + <item> + <p>The non-local function handler for the <c>erl_eval</c> + can now be called with either two or three arguments. + When called with three arguments, the first argument is + the annotation for the node in the abstract format.</p> + <p>All errors during evaluation will now be passed + through <c>erlang:raise/3</c>. If the restricted shell is + active and it does not let <c>erlang:raise/3</c> through, + evaluation errors will be printed in less clear way. See + the documentation for restricted shell in + <c>shell</c>.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-17925 Aux Id: PR-5631 </p> + </item> + <item> + <p>Added <c>filelib:ensure_path/1</c> that ensures that + all directories for the given path exists (unlike + <c>filelib:ensure_dir/1</c>, which will not create the + last segment of the path).</p> + <p> + Own Id: OTP-17953 Aux Id: PR-5621 </p> + </item> + <item> + <p>The functions <c>groups_from_list/2</c> and + <c>groups_from_list/3</c> have been added to the + <c>maps</c> module.</p> + <p> + Own Id: OTP-17969 Aux Id: PR-5588 </p> + </item> + <item> + <p> + <c>gen_server</c> has been refactored to throw more + readable exceptions when a callback returns bad values in + the <c>Timeout</c> field (<c>timeout() | 'hibernate' | + {'continue,_}</c>), and also to verify that argument in + the <c>gen_server:enter_loop/3,4,5</c> API function.</p> + <p> + Own Id: OTP-17974 Aux Id: GH-5683 </p> + </item> + <item> + <p>The functions <c>uniq/1</c> and <c>uniq/2</c> for + removing duplicates have been added to the <c>lists</c> + module.</p> + <p> + Own Id: OTP-17977 Aux Id: GH-5606, PR-5766 </p> + </item> + <item> + <p> + Added support for configurable features as described in + EEP-60. Features can be enabled/disabled during + compilation with options (<c>-enable-feature Feature</c>, + <c>-disable-feature Feature</c> and <c>+{feature, + Feature, enable|disable}</c>) to <c>erlc</c> as well as + with directives (<c>-feature(Feature, + enable|disable).</c>) in the file. Similar options can be + used to <c>erl</c> for enabling/disabling features + allowed at runtime. The new <c>maybe</c> expression + (EEP-49) is fully supported as the feature + <c>maybe_expr</c>. The features support is documented in + the reference manual.</p> + <p> + Own Id: OTP-17988</p> + </item> + <item> + <p>The function <c>filename:safe_relative_path/1</c>, + which has been deprecated since OTP 25, has been removed. + Use <c>filelib:safe_relative_path/2</c> instead.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-17991</p> + </item> + <item> + <p> A new PRNG have been added to the <c>rand</c> module: + <c>mwc59</c> which has been developed in collaboration + with Sebastiano Vigna. It is intended for applications + that need really fast pseudo-random numbers, and it comes + with two output value scramblers, one fast and one + thorough. </p><p> Two internal functions for the + <c>exsp</c> generator have also been exported so they can + be used outside the <c>rand</c> plug-in framework to + shave off some overhead. </p><p> The internal + <c>splitmix64</c> generator has also been exported which + can be useful for seeding other kinds of PRNG:s than its + own. </p> + <p> + Own Id: OTP-18011</p> + </item> + </list> + </section> + +</section> + +<section><title>STDLIB 3.17.2.2</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p>It is not allowed to call functions from guards. The + compiler failed to reject a call in a guard when done by + constructing a record with a default initialization + expression that called a function.</p> + <p> + Own Id: OTP-18325 Aux Id: GH-6465, GH-6466 </p> + </item> + </list> + </section> + +</section> + +<section><title>STDLIB 3.17.2.1</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p>When changing callback module in <c>gen_statem</c> the + state_enter calls flag from the old module was used in + for the first event in the new module, which could + confuse the new module and cause malfunction. This bug + has been corrected. </p><p> With this change some + <c>sys</c> debug message formats have been modified, + which can be a problem for debug code relying on the + format. </p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-18239</p> + </item> + </list> + </section> + +</section> + <section><title>STDLIB 3.17.2</title> <section><title>Fixed Bugs and Malfunctions</title> |