1 Potential Incompatibilities

This document contains a list of potential incompatibilities 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.

1.1  Tools

  • Xref has been updated to use the re module instead of the deprecated regexp module.

    *** INCOMPATIBILITY with R12B ***

    Own Id: OTP-8472

  • 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.


    Own Id: OTP-8706

1.2  Odbc

  • Now supports SQL_TYPE_TIMESTAMP on the format {{YY, MM, DD}, {HH, MM, SS}}. Thanks to Juhani Ränkimies.


    Own Id: OTP-8511

1.3  Ssh

  • 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-8535

  • Removed deprecated modules (ssh_ssh, ssh_sshd and ssh_cm) and functions (ssh_sftp:connect and ssh_sftp:stop).


    Own Id: OTP-8596

  • Aligned error message with used version (SSH_FX_FAILURE vs SSH_FX_NOT_A_DIRECTORY, the latter introduced in version 6).


    Own Id: OTP-8644

1.4  ERTS

  • Some incompatible changes made to the NIF API. For more information see the warning text in erl_nif(3).


    Own Id: OTP-8555


  • When defining macros the closing right parenthesis before the dot is now mandatory.


    Own Id: OTP-8562

1.6  Compiler and STDLIB

  • 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:

    • Doing a call without explicit module name to a local function having a name clashing with the name of an auto-imported BIF that was present (and auto-imported) before OTP R14A
    • Explicitly importing a function having a name clashing with the name of an autoimported BIF that was present (and autoimported) before OTP R14A
    • Using any form of the old compiler directive nowarn_bif_clash

    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.


    Own Id: OTP-8579

  • 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.


    Own Id: OTP-8669

  • 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-8671

1.7  Erl_interface

  • 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.


    Own Id: OTP-8684

1.8  Debugger and STDLIB

  • The predefined builtin type tid() has been removed. Instead, ets:tid() should be used.


    Own Id: OTP-8687