<chapter title="Backward Compatibility">

<p>Pike is a language under active development. This can lead to
   incompatibilities between different versions of Pike. To alleviate
   this problem Pike has a backward compatibility layer.</p>

<p>The backward compatibility layer can be engaged in two ways;
   either by starting the Pike interpreter with the <tt>-V</tt> option,
   or by using the <tt>#pike</tt> preprocessor directive.</p>

<p>The backward compatibility layer affects both the compiler and the
   available modules.</p>

<p>Note that the backward compatibility layer does not necessarily
   compensate for all incompatibilities documented here, and that
   there may be other incompatibilities that have not been documented.</p>

<p>The remainder of this chapter describes the main incompatibilities
   between the various versions of Pike and the current version.</p>

<section title="Pike 7.8">
  <subsection title="Global Functions">
    <p><ref>decode_value()</ref> used to be able to decode programs using
       the 'old style' program encoding.</p>
  </subsection>
  <subsection title="Modules">
    <p>The SSL module API has had major changes since Pike 7.8.</p>
    <p>The following modules and functions have moved, been renamed or
       been deleted:
      <matrix>
        <r><c><ref>7.8::Gdbm.gdbm</ref></c>
           <c><ref>Gdbm.DB</ref></c></r>
        <r><c><ref>7.8::Locale.Charset</ref></c>
           <c><ref>Charset</ref></c></r>
        <r><c><ref>7.8::SSL.alert</ref></c>
           <c><ref>SSL.Alert</ref></c></r>
        <r><c><ref>7.8::SSL.connection</ref> +
              <ref>7.8::SSL.handshake</ref></c>
           <c><ref>SSL.ClientConnection</ref> +
              <ref>SSL.ServerConnection</ref></c></r>
        <r><c><ref>7.8::SSL.context</ref></c>
           <c><ref>SSL.Context</ref></c></r>
        <r><c><ref>7.8::SSL.packet</ref></c>
           <c><ref>SSL.Packet</ref></c></r>
        <r><c><ref>7.8::SSL.session</ref></c>
           <c><ref>SSL.Session</ref></c></r>
        <r><c><ref>7.8::SSL.sslfile</ref></c>
           <c><ref>SSL.File</ref></c></r>
        <r><c><ref>7.8::SSL.sslport</ref></c>
           <c><ref>SSL.Port</ref></c></r>
        <r><c><ref>7.8::SSL.state</ref></c>
           <c><ref>SSL.State</ref></c></r>
        <r><c><ref>7.8::Tools.PEM</ref></c>
           <c><ref>Standards.PEM</ref></c></r>
        <r><c><ref>7.8::Tools.X509</ref></c>
           <c><ref>Standards.X509</ref></c></r>
        <r><c><ref>7.8::Yabu.db</ref></c>
           <c><ref>Yabu.DB</ref></c></r>
        <r><c><ref>7.8::Yabu.table</ref></c>
           <c><ref>Yabu.Table</ref></c></r>
        <r><c><ref>7.8::_PGsql</ref></c>
           <c>(deleted)</c></r>
        <r><c><ref>7.8:_files</ref></c>
           <c><ref>_Stdio</ref></c></r>
      </matrix>
    </p>
  </subsection>
  <subsection title="Compiler">
    <p>The compiler used to not complain about use of
       the keyword <tt>static</tt>.</p>
    <p>The ancient syntax for arrays (<tt>string *</tt> was an alias for
       <tt>array(string)</tt>) used to be supported (but complained about),
       but has now been removed completely.</p>
  </subsection>
  <subsection title="Build options">
    <p>The builtin security sandbox has been deprecated.</p>
    <p>Compiling without support for bignums is no longer supported.</p>
    <p>The (optional) support for facet classes has been removed.</p>
  </subsection>
</section>

<section title="Pike 7.6">
  <subsection title="Modules">
    <p>Signal handlers in GTK2 used to get their arguments in the
       form of an array.</p>
    <p>Sql.mysql used to automatically attempt to reconnect on
       broken connection.</p>
    <p>The following modules and functions have moved, been renamed or
       been deleted:
      <matrix>
        <r><c><ref>ADT.Heap.size()</ref></c>
           <c>Deprecated by <ref>ADT.Heap._sizeof()</ref></c></r>
        <r><c><ref>ADT.Heap.top()</ref></c>
           <c>Deprecated by <ref>ADT.Heap.pop()</ref></c></r>
        <r><c><ref>7.6::Array.transpose_old</ref></c>
           <c>(deleted)</c></r>
        <r><c><ref>7.6::Image.colortable</ref></c>
           <c><ref>Image.Colortable</ref></c></r>
        <r><c><ref>7.6::Image.font</ref></c>
           <c><ref>Image.Font</ref></c></r>
        <r><c><ref>7.6::Image.image</ref></c>
           <c><ref>Image.Image</ref></c></r>
        <r><c><ref>7.6::_Charset</ref></c>
           <c><ref>Locale.Charset.module</ref></c></r>
        <r><c><ref>7.6::spider.isbasechar()</ref></c>
           <c><ref>Parser.XML.isbasechar()</ref></c></r>
        <r><c><ref>7.6::spider.iscombiningchar()</ref></c>
           <c><ref>Parser.XML.iscombiningchar()</ref></c></r>
        <r><c><ref>7.6::spider.isdigit()</ref></c>
           <c><ref>Parser.XML.isdigit()</ref></c></r>
        <r><c><ref>7.6::spider.isextender()</ref></c>
           <c><ref>Parser.XML.isextender()</ref></c></r>
        <r><c><ref>7.6::spider.isfirstnamechar()</ref></c>
           <c><ref>Parser.XML.isfirstnamechar()</ref></c></r>
        <r><c><ref>7.6::spider.ishexchar()</ref></c>
           <c><ref>Parser.XML.ishexchar()</ref></c></r>
        <r><c><ref>7.6::spider.isidographic()</ref></c>
           <c><ref>Parser.XML.isidographic()</ref></c></r>
        <r><c><ref>7.6::spider.isletter()</ref></c>
           <c><ref>Parser.XML.isletter()</ref></c></r>
        <r><c><ref>7.6::spider.isnamechar()</ref></c>
           <c><ref>Parser.XML.isnamechar()</ref></c></r>
        <r><c><ref>7.6::spider.isspace()</ref></c>
           <c><ref>Parser.XML.ispace()</ref></c></r>
      </matrix>
    </p>
  </subsection>
  <subsection title="Compiler">
    <p>The compiler used to not complain about use of
       the keyword <tt>nomask</tt>.</p>
  </subsection>
  <subsection title="Runtime">
    <p>The <tt>main()</tt> function used to get the environment
       as a mapping in argument number three.</p>
    <p>The API for <ref>Debug.describe_program()</ref> was different.</p>
  </subsection>
</section>

<section title="Pike 7.4 and earlier">
  <subsection title="Deprecated">
    <p>The backward compatibility code for Pike 7.4 and earlier
       has been removed in Pike 8.0.</p>
  </subsection>
</section>

</chapter>
