<?xml version="1.0" encoding="latin1" ?>
<!DOCTYPE chapter SYSTEM "chapter.dtd">

<chapter>
  <header>
    <copyright>
      <year>2006</year><year>2010</year>
      <holder>Ericsson AB. All Rights Reserved.</holder>
    </copyright>
    <legalnotice>
      The contents of this file are subject to the Erlang Public License,
      Version 1.1, (the "License"); you may not use this file except in
      compliance with the License. You should have received a copy of the
      Erlang Public License along with this software. If not, it can be
      retrieved online at http://www.erlang.org/.

      Software distributed under the License is distributed on an "AS IS"
      basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
      the License for the specific language governing rights and limitations
      under the License.

    </legalnotice>

    <title>Potential Incompatibilities</title>
    <prepared></prepared>
    <docno></docno>
    <date></date>
    <rev></rev>
    <file>incompatible.xml</file>
  </header>
  <p>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.</p>

  <section>
    <title>Tools</title>
    <list type="bulleted">
        <item>
          <p>
	  Xref has been updated to use the re module instead of the
	  deprecated regexp module.</p>          
	  <p>*** INCOMPATIBILITY with R12B ***</p>
          <p>
	    Own Id: OTP-8472</p>
        </item>
        <item>
	    <p>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).</p>

	      <p>Note: The API for the eprof has been cleaned up and extended.
	      See the documentation.</p>
          <p>
	    *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
	    Own Id: OTP-8706</p>
        </item>
    </list>
  </section>

  <section>
    <title>Odbc</title>
    <list type="bulleted">
        <item>
	    <p>
	      Now supports SQL_TYPE_TIMESTAMP on the format {{YY, MM, DD},
	      {HH, MM, SS}}. Thanks to Juhani Ränkimies.
	    </p>
          <p>
	    *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
	    Own Id: OTP-8511</p>
        </item>
    </list>
  </section>

  <section>
    <title>Ssh</title>
    <list type="bulleted">
     <item>
          <p>
            The configuration parameter ip_v6_disabled is now available,
	      which makes it possible for the user to alter the IP version
	      SSH shall use.</p>
          <p>
            *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
            Own Id: OTP-8535</p>
     </item>
     <item>
          <p>
            Removed deprecated modules (ssh_ssh, ssh_sshd and ssh_cm) and
	      functions (ssh_sftp:connect and ssh_sftp:stop).</p>
          <p>
            *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
            Own Id: OTP-8596</p>
     </item>
     <item>
          <p>
            Aligned error message with used version (SSH_FX_FAILURE vs
	      SSH_FX_NOT_A_DIRECTORY, the latter introduced in version 6).</p>
          <p>
            *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
            Own Id: OTP-8644</p>
     </item>
    </list>
  </section>

    <section>
    <title>ERTS</title>
      <list>
        <item>
          <p>Some incompatible changes made to the NIF API. For more
	      information see the warning text in erl_nif(3).</p>
          <p>
	    *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
	    Own Id: OTP-8555</p>
        </item>
      </list>
    </section>

  <section>
    <title>STDLIB</title>
    <list type="bulleted">
        <item>
	    <p>When defining macros the closing right parenthesis before the
	      dot is now mandatory.</p>
          <p>
	    *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
	    Own Id: OTP-8562</p>
        </item>
    </list>
  </section>

  <section>
    <title>Compiler and STDLIB</title>
    <list type="bulleted">
        <item>
          <p>
             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:</p>

	      <list type="bulleted">
	      <item>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</item>

	      <item>Explicitly importing a function having a name clashing with
	      the name of an autoimported BIF that was present (and
	      autoimported) before OTP R14A</item>

	      <item>Using any form of the old compiler directive nowarn_bif_clash</item>
	      </list>

	      <p>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.</p>

	      <p>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.</p>

	      <p>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.</p>
          <p>
            *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
            Own Id: OTP-8579</p>
        </item>
        <item>
          <p>
            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.</p>
          <p>
            *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
            Own Id: OTP-8669</p>
        </item>
        <item>
          <p>
           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.</p>
          <p>
            *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
            Own Id: OTP-8671</p>
        </item>
    </list>
  </section>

  <section>
    <title>Erl_interface</title>
    <list type="bulleted">
        <item>
	    <p>Compact IEEE 754 double encoding in external binary format
	      for ei</p>

	      <p>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.</p> 

	      <p>Legacy erl_interface code also handles the new encoding, but
	      still produces the ERL_FLOAT_EXT encoding by default.</p>

	      <p>Also enable the DFLAG_NEW_FLOATS distribution flag.</p>

	      <p>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.</p>

	      <p>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.</p>

	      <p>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.</p>

	      <p>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.</p>
          <p>
	    *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
	    Own Id: OTP-8684</p>
        </item>
    </list>
  </section>
  <section>
    <title>Debugger and STDLIB</title>
    <list type="bulleted">
        <item>
	    <p> The predefined builtin type tid() has been removed. Instead,
	      ets:tid() should be used.</p>
          <p>
	    *** POTENTIAL INCOMPATIBILITY ***</p>
          <p>
	    Own Id: OTP-8687</p>
        </item>
    </list>
  </section>
</chapter>

