From 8495f694672a2bb6d1a4a25f9a93aab5c9fc916b Mon Sep 17 00:00:00 2001
From: Patrik Nyblom This document lists some highlights of Erlang 5.7/OTP R13A
- (unpatched), compared to the previous version Erlang 5.6/OTP R12B,
- with focus on things not already released as R12B patches. Note: This document was compiled at the time when R13A was released
- and does not list any features introduced in R13 patches. This document lists some highlights of Erlang 5.8/OTP R14A
+ (unpatched), compared to the previous version Erlang 5.7.1/OTP R13B,
+ with focus on things not already released as R13B patches. Note: This document was compiled at the time when R14A was released
+ and does not list any features introduced in R14 patches.
- There SMP performance is significantly improved and will
- allow most applications to scale much better on systems with many
- cores or processors. Listed below are some of the most important improvements:
-
- The runtime system with SMP support now uses multiple,
- scheduler specific run queues, instead of one globally shared
- run queue.
-
- The lock protecting the shared run queue was heavily
- contended, and the shared run queue also caused Erlang
- processes to randomly migrate between schedulers with
- negative cache effects as a result.
-
- With the current scheduler specific run queue solution, lock
- contention due to run queue protection has been reduced, and
- Erlang processes are only migrated when needed to balance the
- load between the schedulers. The reduced amount of migration
- also reduce lock contention on locks protecting the scheduler
- specific instances of the erts internal memory allocators.
-
- The scheduler specific run queues are also a necessity for a
- lot of future planned NUMA (Non-Uniform Memory Access)
- specific optimizations.
-
- Message passing has been further optimized for parallell execution.
- This makes parallell sending to one common receiver much more efficient.
-
- Scheduler threads can now be bound to logical processors on newer
- Linux ans Solaris systems.
-
- Support for Unicode is implemented as described in EEP10.
- Formatting and reading of unicode data both from terminals
- and files is supported by the Send messages from a NIF, or from thread created by NIF, to
+ any local process (enif_send)
- The BIFs
- Nodes belonging to different independent clusters can now
- co-exist on the same host with the help of a new
- environment variable setting Store terms between NIF calls (enif_alloc_env,
+ enif_make_copy) Create binary terms with user defined memory management
+ (enif_make_resource_binary) Some incompatible changes made to the API. For more
+ information see the warning text in erl_nif(3).
- Reltool is a release management tool.
- It analyses a given Erlang/OTP installation and determines
- various dependencies between applications.
- The graphical frontend depicts the dependencies and enables
- interactive customization of a target system.
- The backend provides a batch interface for generation of
- customized target systems.
- The application is still somewhat limited and should be regarded
- as experimental in this release. The intention is that this
- application will be a valuable tool for making both traditional
- Erlang target systems as well as standalone components in Erlang.
- Receive statements that can only read out a newly created
+ reference are now specially optimized so that it will execute
+ in constant time regardless of the number of messages in the
+ receive queue for the process. That optimization will benefit
+ calls to gen_server:call(). (See gen:do_call/4 for an example
+ of a receive statement that will be optimized.)
- wxErlang is an Erlang binding to the WxWidgets GUI library which
- provides support for cross platform GUI applications.
- wxErlang is still in beta status and the intention is that it shall
- replace GS in a later stage. The Erlang debugger is also shipped in
- a wxErlang version.
- eprof has been reimplemented with support in the Erlang
+ virtual machine and is now both faster (i.e. slows down the
+ code being measured less) and scales much better. In
+ measurements we saw speed-ups compared to the old eprof
+ ranging from 6 times (for sequential code that only uses one
+ scheduler/core) up to 84 times (for parallel code that uses 8
+ cores). Note: The API for the eprof has been cleaned up and extended.
+ See the documentation.
- A support client module for SSH and SFTP,
- Test case groups have been introduced. With this feature
- it's possible to execute groups (possibly nested)
- of test cases.
+ It is now possible for the user to provide specific callback
+ modules that handle test configuration data, so that data on
+ arbitray form can be accessed (e.g. by reading files or by
+ communicating with a configuration server process). Two
+ default callback modules have been introduced in Common Test:
+ ct_config_plain and ct_config_xml. The former is used to
+ handle the traditional Common Test configuration files (with
+ terms on key-value tuple form) and the latter to handle
+ configuration data on XML representation.
- A group definition contains a name tag, a list of
- properties and a list of test cases (including possible
- nested group definitions). The properties make it possible
- to execute test cases in parallel, in sequence and in
- shuffled order. It is also possible to repeat test cases
- according to different criteria.
+ The run_test script has been replaced by a program (with the
+ same name) which can be executed without explicit
+ installation. The start flags are the same as for the legacy
+ start script.
- The analysis now accepts opaque type declarations and
- detects
- violations of opaqueness of terms of such types. Starting
- with R13, many Erlang/OTP standard libraries (array, dict,
- digraph, ets, gb_sets, gb_trees, queue, and sets) contain
- opaque type declarations of their main data types. Dialyzer
- will spit out warnings in code that explicitly depends on the
- structure of these terms.
-
- Added support for handling UTF segments in bitstreams and for
- detecting obvious type errors in these segments. Warning:
- This code is not terribly tested though since there are very
- few Erlang programs which use Unicode-based binaries - not
- surprising since this is a new language feature of R13.
-
- Strengthened the discrepancy identification when testing for
- equality and matching between terms of different types. This
- detects more bugs in code.
-
- See the Dialyzer documentation and release notes for even more
- enhancements.
-
- The "new_ssl" implementation is significantly improved and should be
- near product status now.
- The new SSL is implemented in pure Erlang except for
- the crypto routines that are implemented in the crypto driver which
- is an interface to libcrypto from OpenSSL.
- The Erlang scanner has been augmented as to return white-space,
- comments and exact location of tokens.
- This means that the scanner can easily be used in tools such as editors,
- pretty printers, syntax highlighters etc.
- where it is important to be able recreate the original source document.
+
+ The module binary from EEP31 (and EEP9) is implemented.
This document contains a list of potential incompatibilities
- between Erlang 5.7/OTP R12A and Erl 5.6.5/OTP R12B-5,
+ between Erlang 5.8/OTP R14A and Erl 5.7.5/OTP R13B04,
and is an extract from the release notes for the respective applications.
- The undocumented, unsupported, and deprecated guard BIF
-
- *** INCOMPATIBILITY with R12B ***
- Own Id: OTP-7673 The short-circuit operators
- *** POTENTIAL INCOMPATIBILITY ***
-
-
+
*** INCOMPATIBILITY with R12B ***
- Own Id: OTP-7748
+ Own Id: OTP-8472The compiler will refuse to a compile file where the - module name in the file differs from the output file - name.
-When compiling using
- *** POTENTIAL INCOMPATIBILITY ***
-- Own Id: OTP-7793
-If a module contains an exported function with the
- same name as an auto-imported BIF (such as
-
(The reason for the change is to avoid breaking code - in a future major release, R14 or R15, in which we plan - to make calls without a module prefix always call the - local function in the same module even if there is an - auto-imported BIF with the same name.)
+eprof has been reimplemented with support in the Erlang + virtual machine and is now both faster (i.e. slows down the + code being measured less) and scales much better. In + measurements we saw speed-ups compared to the old eprof + ranging from 6 times (for sequential code that only uses one + scheduler/core) up to 84 times (for parallel code that uses 8 + cores).
+ +Note: The API for the eprof has been cleaned up and extended. + See the documentation.
*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7873
+ Own Id: OTP-8706Support for Unicode is implemented as described in - EEP10. Formatting and reading of unicode data both from - terminals and files is supported by the io and io_lib - modules. Files can be opened in modes with automatic - translation to and from different unicode formats. The - module 'unicode' contains functions for conversion - between external and internal unicode formats and the re - module has support for unicode data. There is also - language syntax for specifying string and character data - beyond the ISO-latin-1 range.
-The interactive shell will support input and output of - unicode characters when the terminal and operating system - supports it.
-Please see the EEP and the io/io_lib manual pages as - well as the stdlib users guide for details.
-I/O-protocol incompatibilities:
-The io_protocol between io_Server and client is - updated to handle protocol data in unicode formats. The - updated protocol is now documented. The specification - resides in the stdlib users manual, which is a - new part of the manual.
-io module incompatibilities:
-The io:put_chars, io:get_chars and io:get_line all - handle and return unicode data. In the case where - binaries can be provided (as to io:put_chars), they shall - be encoded in UTF-8. When binaries are returned (as by - io:get_line/get_chars when the io_server is set in - binary mode) the returned data is also - always encoded as UTF-8. The file module however - still returns byte-oriented data, why file:read can be - used instead of io:get_chars to read binary data in - ISO-latin-1.
-io_lib module incompatibilities:
-io_lib:format can, given new format directives (i.e - "~ts" and "~tc"), return lists containing integers larger - than 255.
-- *** POTENTIAL INCOMPATIBILITY ***
-- Own Id: OTP-7648 Aux Id: OTP-7580 OTP-7514 OTP-7494 - OTP-7443 OTP-7181 EEP10 EEP11
-
- The undocumented, unsupported, and deprecated guard BIF
-
- *** INCOMPATIBILITY with R12B ***
-- Own Id: OTP-7673
-The short-circuit operators
+ Now supports SQL_TYPE_TIMESTAMP on the format {{YY, MM, DD}, + {HH, MM, SS}}. Thanks to Juhani Ränkimies. +
*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7748
+ Own Id: OTP-8511The compiler will refuse to a compile file where the - module name in the file differs from the output file - name.
-When compiling using
- *** POTENTIAL INCOMPATIBILITY ***
+ The configuration parameter ip_v6_disabled is now available, + which makes it possible for the user to alter the IP version + SSH shall use.- Own Id: OTP-7793
-The deprecated functions
- *** POTENTIAL INCOMPATIBILITY ***
+ Own Id: OTP-8535 +- Own Id: OTP-7812
-The escape sequences
NOTE: These new escape sequences are still considered - experimental and may be changed in the R13B release.
+ Removed deprecated modules (ssh_ssh, ssh_sshd and ssh_cm) and + functions (ssh_sftp:connect and ssh_sftp:stop).- *** POTENTIAL INCOMPATIBILITY ***
+ *** POTENTIAL INCOMPATIBILITY ***- Own Id: OTP-7855
-- [httpc] - The inets http client will now use persistent - connections without pipelining as default and if a - pipeline timeout is set it will pipeline the requests on - the persistent connections.
+ Aligned error message with used version (SSH_FX_FAILURE vs + SSH_FX_NOT_A_DIRECTORY, the latter introduced in version 6).*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7463
-- A number of fixes and improvements from the ErlIDE group; - Vlad Dumitrescu and Jakob Cederlund: JDK 1.5 is now a - minimal requirement for building Jinterface. New method: - OtpEpmd.lookupNames. OtpErlangList is now iterable. - Non-proper lists are now allowed - you have to test if a - list is proper or not. Non-proper lists can also be - created. New methods: isProper, getHead, getTail and - getNthTail. The get tail methods creates a sublist object - that re-uses the original list. OtpErlangPid is now - Comparable. Empty atoms can now be constructed, a missing - feature pointed out by Sebastien Boisgerault on - erlang-questions.
+Some incompatible changes made to the NIF API. For more + information see the warning text in erl_nif(3).
*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7832
+ Own Id: OTP-8555The deprecated functions
When defining macros the closing right parenthesis before the + dot is now mandatory.
*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7812
+ Own Id: OTP-8562- Ssh timeouts will now behave as expected i.e. defaults to - infinity. Only the user of the ssh application can know of - a reasonable timeout value for their application.
+ Local and imported functions now override the auto-imported + BIFs when the names clash. The pre R14 behaviour was that + auto-imported BIFs would override local functions. To avoid + that old programs change behaviour, the following will + generate an error: + +If the BIF was added or auto-imported in OTP R14A or later, + overriding it with an import or a local function will only + result in a warning.
+ +To resolve clashes, you can either use the explicit module + name erlang to call the BIF, or you can remove the + auto-import of that specific BIF by using the new compiler + directive -compile({no_auto_import,[F/A]})., which makes all + calls to the local or imported function without explicit + module name pass without warnings or errors.
+ +The change makes it possible to add auto-imported BIFs + without breaking or silently changing old code in the future. + However some current code ingeniously utilizing the old + behaviour or the nowarn_bif_clash compiler directive, might + need changing to be accepted by the compiler.
*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7807
+ Own Id: OTP-8579- Added the message {ssh_channel_up, ChannelId, - ConnectionManager} that shall be handled by the channel - callback handle_msg/2. This makes the function - handle_msg/2 a mandatory function for ssh channels - implementations which it was not in ssh-1.1.
+ The recently added BIFs erlang:min/2, erlang:max/2 and + erlang:port_command/3 are now auto-imported (as they were + originally intended to be). Due to the recent compiler change + (OTP-8579), the only impact on old code defining it's own + min/2, max/2 or port_command/3 functions will be a warning, + the local functions will still be used. The warning can be + removed by using + -compile({no_auto_import,[min/2,max/2,port_command/3]}). in + the source file.*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7828
+ Own Id: OTP-8669The functions
- *** POTENTIAL INCOMPATIBILITY ***
+ Now, binary_to_term/2 is auto-imported. This will cause a + compile warning if and only if a module has got a local + function with that name.- Own Id: OTP-7230
-Support for Unicode is implemented as described in - EEP10. Formatting and reading of unicode data both from - terminals and files is supported by the io and io_lib - modules. Files can be opened in modes with automatic - translation to and from different unicode formats. The - module 'unicode' contains functions for conversion - between external and internal unicode formats and the re - module has support for unicode data. There is also - language syntax for specifying string and character data - beyond the ISO-latin-1 range.
-The interactive shell will support input and output of - unicode characters when the terminal and operating system - supports it.
-Please see the EEP and the io/io_lib manual pages as - well as the stdlib users guide for details.
-I/O-protocol incompatibilities:
-The io_protocol between io_Server and client is - updated to handle protocol data in unicode formats. The - updated protocol is now documented. The specification - resides in the stdlib users manual, which is a - new part of the manual.
-io module incompatibilities:
-The io:put_chars, io:get_chars and io:get_line all - handle and return unicode data. In the case where - binaries can be provided (as to io:put_chars), they shall - be encoded in UTF-8. When binaries are returned (as by - io:get_line/get_chars when the io_server is set in - binary mode) the returned data is also - always encoded as UTF-8. The file module however - still returns byte-oriented data, why file:read can be - used instead of io:get_chars to read binary data in - ISO-latin-1.
-io_lib module incompatibilities:
-io_lib:format can, given new format directives (i.e - "~ts" and "~tc"), return lists containing integers larger - than 255.
-- *** POTENTIAL INCOMPATIBILITY ***
-- Own Id: OTP-7648 Aux Id: OTP-7580 OTP-7514 OTP-7494 - OTP-7443 OTP-7181 EEP10 EEP11
-
-
- *** POTENTIAL INCOMPATIBILITY ***
+ *** POTENTIAL INCOMPATIBILITY ***- Own Id: OTP-7819
+ Own Id: OTP-8671
-
Compact IEEE 754 double encoding in external binary format + for ei
+ +Implement the compact IEEE 754 double encoding in external + binary format for ei. Encoding for ei now always produces the + NEW_FLOAT_EXT format. Decoding and term printing handle both + the old ERL_FLOAT_EXT encoding and the new NEW_FLOAT_EXT + encoding.
+ +Legacy erl_interface code also handles the new encoding, but + still produces the ERL_FLOAT_EXT encoding by default.
+ +Also enable the DFLAG_NEW_FLOATS distribution flag.
+ +ei_get_type() will return ERL_FLOAT_EXT regardless if the + external format is encoded with ERL_FLOAT_EXT or + NEW_FLOAT_EXT for doubles.
+ +Reduce the number of copies of the code for encoding and + decoding doubles throughout ei and erl_interface by instead + calling the ei encoding and decoding functions wherever + possible.
+ +Restore commented-out float tests in ei_decode_SUITE and + ei_encode_SUITE in lib/erl_interface/test. Modify them to + make them match the style of other tests in the same suites.
+ +These changes are based on an ei float patch from Serge + Aleynikov originally submitted against R12B-2 in July 2008 + and reworked by Steve Vinoski May 2010.
*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7824
+ Own Id: OTP-8684The argument passed to
The predefined builtin type tid() has been removed. Instead, + ets:tid() should be used.
*** POTENTIAL INCOMPATIBILITY ***
- Own Id: OTP-7827
+ Own Id: OTP-8687