<?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>