Erlang/OTP 18.0

This release of Erlang/OTP can be built from source or installed using pre-built packages for your OS or third-party tools (such as kerl or asdf).

docker run -it erlang:18.0
Major release  : otp_src_18
Build date     : 2015-06-24

18 is a major new release of Erlang/OTP.
You can download the full source distribution from

  http://www.erlang.org/download/otp_src_18.0.tar.gz
  http://www.erlang.org/download/otp_src_18.0.readme (this file)

Note: To unpack the TAR archive you need a GNU TAR compatible program.

For installation instructions please read the README that is part of
the distribution.

The Windows binary distribution can be downloaded from

  http://www.erlang.org/download/otp_win32_18.0.exe
  http://www.erlang.org/download/otp_win64_18.0.exe


On-line documentation can be found at http://www.erlang.org/doc/.
You can also download the complete HTML documentation or the Unix manual files

  http://www.erlang.org/download/otp_doc_html_18.0.tar.gz
  http://www.erlang.org/download/otp_doc_man_18.0.tar.gz

We also want to thank those that sent us patches, suggestions and bug reports,

The OTP Team

--- HIGHLIGHTS ----------------------------------------------------------

   OTP-11997  == erts ==

	      The time functionality of Erlang has been extended. This both
	      includes a new API for time, as well as time warp modes which
	      alters the behavior of the system when system time changes.
	      You are strongly encouraged to use the new API instead of the
	      old API based on erlang:now/0. erlang:now/0 has been
	      deprecated since it is and forever will be a scalability
	      bottleneck. For more information see the Time and Time
	      Correction chapter of the ERTS User's Guide.

	      Besides the API changes and time warp modes a lot of
	      scalability and performance improvements regarding time
	      management has been made internally in the runtime system.
	      Examples of such improvements are scheduler specific timer
	      wheels, scheduler specific BIF timer management, parallel
	      retrieval of monotonic time and system time on systems with
	      primitives that are not buggy.

   OTP-12029  == ssh ==

	      A new option 'preferred_algorithms' is available for
	      ssh:daemon and ssh:connect.

	      This option defines the algorithms presented to the peer in
	      the algorithm negotiation phase of the ssh protocol. 

	      The default list can be obtained from the new function
	      ssh:default_algorithms/0.

   OTP-12218  == compiler debugger stdlib ==

	      Support variables as Map keys in expressions and patterns

	      Erlang will accept any expression as keys in Map expressions
	      and it will accept literals or bound variables as keys in Map
	      patterns.

   OTP-12309  == erts stdlib ==

	      New function ets:take/2. Works the same as ets:delete/2 but
	      also returns the deleted object(s).

   OTP-12585  == erts ==

	      Use persistent hashmaps for large Maps

	      Maps will use a persistent hashmap implementation when the
	      number of pairs in a Map becomes sufficiently large. The
	      change will occur when a Map reaches 33 pairs in size but
	      this limit might change in the future.

	      The most significant impact for the user by this change is
	      speed, and to a lesser degree memory consumption and
	      introspection of Maps. Memory consumption size is probalistic
	      but lesser than gb_trees or dict for instance. Any other
	      impacts will be transparent for the user except for the
	      following changes.

	      Semantics of Maps have changed in two incompatible ways
	      compared to the experimental implementation in OTP 17:

	      -- Hashing of maps is done different by erlang:phash2/1,2,
	      erlang:phash/1 and erlang:hash/2.

	      -- Comparing two maps with ==, /=, =<, <, >= and >, is done
	      different if the keys contain floating point numbers.

   OTP-12650  == erts ==

	      Optimization of timers internally in the VM. This include
	      process timers (receive ... after), port timers
	      (driver_set_timer()) as well as BIF timers
	      (erlang:send_after()/erlang:start_timer()).

	      Each scheduler thread now has its own lock-free timer service
	      instead of one locked central service. This dramatically
	      improves performance of timer management on systems with a
	      large amount of schedulers and timers.

	      The timer service internal data structure has also been
	      optimized to be able to handle more timers than before. That
	      is, each timer service is by its self able to handle more
	      timers without dramatic performance loss than the old
	      centralized timer service.

	      The API of BIF timers has also been extended. Timeout values
	      are for example no longer limited to 32-bit integers. For
	      more information see the documentation of
	      erlang:start_timer/4, erlang:send_after/4,
	      erlang:cancel_timer/2, and erlang:read_timer/2.

	      Characteristics impact: Calls to the synchronous versions of
	      erlang:cancel_timer(), and erlang:read_timer() may take
	      substantially longer time to complete than before. This occur
	      when the timer that is accessed is managed by a remote
	      scheduler. You typically want to use the new asynchronous
	      option in order to avoid blocking the calling process.

   OTP-12854  == otp ==

	      Change license text from Erlang Public License to Apache
	      Public License v2

--- POTENTIAL INCOMPATIBILITIES -----------------------------------------

   OTP-11905  == erts ==

	      Fix issuing with spaces and quoting in the arguments when
	      using erlang:open_port spawn_executable on windows. The
	      behavior now mimics how unix works. This change implies a
	      backwards incompatibility for how spawn_executable works on
	      windows.

   OTP-11940  == erts ==

	      Add md5 and module entries to ?MODULE:module_info/0/1 and
	      remove obsolete entry 'import'.

   OTP-12099  == erts ==

	      erlang:function_exported(M, F, A) will now return true if
	      M:F/A refers to a BIF.

   OTP-12100  == compiler ==

	      The deprecated 'asm' option has been removed.

   OTP-12240  == erts kernel ssh ==

	      The internal group to user_drv protocol has been changed to
	      be synchronous in order to guarantee that output sent to a
	      process implementing the user_drv protocol is printed before
	      replying. This protocol is used by the standard_output device
	      and the ssh application when acting as a client. 

	      This change changes the previous unlimited buffer when
	      printing to standard_io and other devices that end up in
	      user_drv to 1KB.

   OTP-12292  == erts ==

	      The notice that a crashdump has been written has been moved
	      to be printed before the crashdump is generated instead of
	      afterwords. The wording of the notice has also been changed.

   OTP-12585  == erts ==

	      Use persistent hashmaps for large Maps

	      Maps will use a persistent hashmap implementation when the
	      number of pairs in a Map becomes sufficiently large. The
	      change will occur when a Map reaches 33 pairs in size but
	      this limit might change in the future.

	      The most significant impact for the user by this change is
	      speed, and to a lesser degree memory consumption and
	      introspection of Maps. Memory consumption size is probalistic
	      but lesser than gb_trees or dict for instance. Any other
	      impacts will be transparent for the user except for the
	      following changes.

	      Semantics of Maps have changed in two incompatible ways
	      compared to the experimental implementation in OTP 17:

	      -- Hashing of maps is done different by erlang:phash2/1,2,
	      erlang:phash/1 and erlang:hash/2.

	      -- Comparing two maps with ==, /=, =<, <, >= and >, is done
	      different if the keys contain floating point numbers.

   OTP-12610  == erts ==

	      Scalability improvement for erlang:make_ref/0, and other
	      functionality that create references. Each scheduler now
	      manage its own set of references. By this no communication at
	      all is needed when creating references.

	      Previous implementation generated a strictly monotonically
	      increasing sequence of references corresponding to creation
	      time on the runtime system instance. This is not the case
	      with current implementation. You can only expect reference to
	      be unique. The Erlang/OTP documentation has never mentioned
	      anything else but the uniqueness property, so this change is
	      fully compatible. The only reason we've marked this as a
	      potential incompatibility is since an early draft for an
	      Erlang specification mentions strict monotonicity as a
	      property.

	      If you need to create data with a strict monotonicity
	      property use erlang:unique_integer([monotonic]). Do not use
	      the deprecated erlang:now().

--- otp -----------------------------------------------------------------

   OTP-11306  The type identifier() is documented in the reference manual,
	      in section Types and Function Specifications.

   OTP-12854  Change license text from Erlang Public License to Apache
	      Public License v2

--- asn1-4.0 ------------------------------------------------------------

   OTP-12395  Many bugs have been eliminated in the the ASN.1 compiler so
	      that it can now successfully compile many more ASN.1
	      specifications. Error messages have also been improved.

   OTP-12765  The documentation for asn1ct:test/1,2,3 and asn1ct:value/2
	      has been updated with information about the limitations of
	      the functions.

--- common_test-1.11 ----------------------------------------------------

   OTP-10446  Earlier there was no way to add optional parameters like
	      default-operation to an edit-config request sent with
	      ct_netconfc:edit_config/3,4, you had to use
	      ct_netconfc:send_rpc/2,3. For simplicity and completion, a
	      new optional argument, OptParams, is now added to the
	      edit_config function.

   OTP-10816  The status of an aborted test due to test suite compilation
	      error has changed from 'auto_skipped' to 'failed'. This
	      affects both the textual log file, event handling and CT hook
	      callbacks. The logging of compilation failures has also been
	      improved, especially in the case of multiple test suites
	      failing compilation.

   OTP-11962  When running OTP tests using the ts interface, it is now
	      possible to specify so called test categories per OTP
	      application. A test category is represented by a CT test
	      specification and defines an arbitrary subset of existing
	      test suites, groups and cases. Examples of test categories
	      are 'smoke' (smoke tests) and 'bench' (benchmarks). (Call
	      ts:help() for more info). Also, functions for reading terms
	      from the current test specification during test,
	      ct:get_testspec_terms/0 and ct:get_testspec_terms/1, have
	      been implemented.

   OTP-12421  Obsolete scripts and make file operations have been removed
	      and the installation chapter in the Common Test User's Guide
	      has been updated.

   OTP-12678  The 'keep_alive' interval has been reduced to 8 seconds,
	      which is two seconds shorter than the default 'idle_timeout'
	      value for ct_telnet:expect/3. This way, the telnet server
	      receives a NOP message (which might trigger an action) before
	      the operation times out. Also the TCP option 'nodelay' has
	      been enabled per default for all telnet connections, in order
	      to reduce the risk for communication timeouts.

   OTP-12684  When the ct_run program is executed without any flags, "-dir
	      ." is now used as default start flag. Similarly, the option
	      {dir,"."} is used by ct:run_test/1 if called with an empty
	      list. Also, the help text (ct_run -help) has been updated, as
	      well as the Running Tests chapter in the Common Test User's
	      Guide.

   OTP-12740  The Test Server source code parser (erl2html2) failed to
	      handle the macro tuple in the syntax tree returned by
	      epp_dodger. This error has been corrected.

   OTP-12809  New options to make it possible to specify ssh_port in a
	      .spec file: [{node_start, [{ssh_port, 9999}]}].

	      And also to specify additional ssh options like paths to
	      public-key files: [{node_start, [{ssh_opts, [{user_dir,
	      "/home/shrek/e2/"}]}]}].

--- compiler-6.0 --------------------------------------------------------

   OTP-11978  The cerl and cerl_trees modules in the compiler application
	      are now documented.

   OTP-12100  The deprecated 'asm' option has been removed.

   OTP-12218  Support variables as Map keys in expressions and patterns

	      Erlang will accept any expression as keys in Map expressions
	      and it will accept literals or bound variables as keys in Map
	      patterns.

   OTP-12253  Infer Map type information in beam_type compiler optimization
	      pass.

   OTP-12393  Compiler optimizations have been improved.

   OTP-12453  The compiler optimizes away building of terms that are never
	      actually used. As a result, the compiler in OTP 18 may
	      produce more warnings for terms that are built but not used
	      than the compiler in OTP 17.

   OTP-12497  Five undocumented functions in the module core_lib have been
	      deprecated and will be removed in the next major release. The
	      functions are: get_anno/{1,2}, is_literal/1,
	      is_literal_list/1, and literal_value. Use the appropriate
	      functions in the cerl module instead.

   OTP-12515  Using a map could incorrectly suppress warnings for unused
	      variables.

   OTP-12723  The compiler now properly reports unknown parse transforms.
	      That is, undef exceptions coming from the parse transform
	      itself is reported differently from the absence of the parse
	      transform.

   OTP-12758  Allow for 'creation of sub binary delayed' optimization if
	      maps instructions are in a clause.

   OTP-12774  Change some internal data structures to Maps in order to
	      speed up compilation time. Measured speed up is around
	      10%-15%.

   OTP-12844  Fix beam_bool pass for Maps instruction get_map_elements

	      Before beam_split the get_map_elements instruction is still
	      in blocks and the helper function in beam_jump did not
	      reflect this.

--- cosEvent-2.2 --------------------------------------------------------

   OTP-12687  Remove the usage of erlang:now() from all Corba applications
	      and use the new rand module instead of random.

--- cosEventDomain-1.2 --------------------------------------------------

   OTP-12687  Remove the usage of erlang:now() from all Corba applications
	      and use the new rand module instead of random.

--- cosFileTransfer-1.2 -------------------------------------------------

   OTP-12687  Remove the usage of erlang:now() from all Corba applications
	      and use the new rand module instead of random.

--- cosNotification-1.2 -------------------------------------------------

   OTP-12687  Remove the usage of erlang:now() from all Corba applications
	      and use the new rand module instead of random.

--- cosProperty-1.2 -----------------------------------------------------

   OTP-12687  Remove the usage of erlang:now() from all Corba applications
	      and use the new rand module instead of random.

--- cosTime-1.2 ---------------------------------------------------------

   OTP-12687  Remove the usage of erlang:now() from all Corba applications
	      and use the new rand module instead of random.

--- cosTransactions-1.3 -------------------------------------------------

   OTP-12687  Remove the usage of erlang:now() from all Corba applications
	      and use the new rand module instead of random.

--- crypto-3.6 ----------------------------------------------------------

   OTP-12380  Use the EVP API for AES-CBC crypto to enables the use of
	      hardware acceleration for AES-CBC crypto on newer Intel CPUs
	      (AES-NI), among other platforms.

   OTP-12394  Enhance crypto:generate_key to calculate ECC public keys from
	      private key.

   OTP-12403  Add AES ECB block encryption.

   OTP-12733  Fix bug in crypto:generate_key for ecdh that could cause VM
	      crash for faulty input.

--- debugger-4.1 --------------------------------------------------------

   OTP-12218  Support variables as Map keys in expressions and patterns

	      Erlang will accept any expression as keys in Map expressions
	      and it will accept literals or bound variables as keys in Map
	      patterns.

--- dialyzer-2.8 --------------------------------------------------------

   OTP-10280  The -dialyzer() attribute can be used for suppressing
	      warnings in a module by specifying functions or warning
	      options. It can also be used for requesting warnings in a
	      module.

   OTP-11445  The pre-defined types array(), dict(), digraph(), gb_set(),
	      gb_tree(), queue(), set(), and tid() have been removed.

   OTP-11851  A few type names that have been used for representing certain
	      predefined types can now be used for user-defined types. This
	      affects the types product/_, union/_, and range/2 as well as
	      tuple/N (N > 0), map/N (N > 0), atom/1, integer/1, binary/2,
	      record/_, and 'fun'/_. A consequence is that, for example, it
	      is no longer possible to refer to a record type with
	      record(r); instead the usual record notation, #r{}, is to be
	      used.

   OTP-11861  When implementing user-defined behaviours it is now possible
	      to specify optional callback functions. See OTP Design
	      Principles User's Guide, Sys and Proc_Lib, User-Defined
	      Behaviours, for details.

   OTP-12350  The translation of Erlang forms to the type representation
	      used by Dialyzer has been improved in several ways. The most
	      important change is that deeply nested records can be
	      handled.

   OTP-12493  Fix a bug that could cause bogus warnings for opaque types.

	      In Erlang/OTP 18 two parameterized types declared in the same
	      module always result in a contradiction (none()) when
	      combined outside of the module where they are declared,
	      unless they have the same number of parameters.

	      The behaviour is different from Erlang/OTP 17 where, for
	      instance, dict:dict() and dict:dict(_, _), which are both
	      opaque, can be combined outside of the dict module.

	      In Erlang/OTP 18, dict:dict() and dict:dict(_, _) can still
	      be combined outside of the dict module. That has been made
	      possible by not declaring dict:dict() as opaque.

   OTP-12637  Update the PLT properly when a module is changed. (Thanks to
	      James Fish for the bug report, and to Stavros Aronis for
	      fixing the bug.)

   OTP-12682  Add two options to the Dialyzer: no_missing_calls suppresses
	      warnings about calls to missing or unexported functions;
	      unknown lets warnings about unknown functions or types affect
	      the exit status. See also dialyzer(3).

   OTP-12725  An argument of '*'/2 is not constraind if the other operand
	      can be zero.

   OTP-12750  Mention the option check_plt among the dialyzer:gui()
	      options. (Thanks to James Fish.)

   OTP-12779  By default, dialyzer will now cache native versions of
	      dialyzer modules to avoid having to re-compile them each time
	      dialyzer is started. Caching can be disabled using the option
	      --no_native_cache.

   OTP-12826  Fix a bug which could cause an infinite loop in Dialyzer.

--- diameter-1.10 -------------------------------------------------------

   OTP-12721  Fix decode of Grouped AVPs containing errors.

	      RFC 6733 says this of Failed-AVP in 7.5:

	      -- 

	      In the case where the offending AVP is embedded within a
	      Grouped AVP, the Failed-AVP MAY contain the grouped AVP,
	      which in turn contains the single offending AVP. The same
	      method MAY be employed if the grouped AVP itself is embedded
	      in yet another grouped AVP and so on. In this case, the
	      Failed-AVP MAY contain the grouped AVP hierarchy up to the
	      single offending AVP. This enables the recipient to detect
	      the location of the offending AVP when embedded in a group.

	      It says this of DIAMETER_INVALID_AVP_LENGTH in 7.1.5:

	      -- 

	      The request contained an AVP with an invalid length. A
	      Diameter message indicating this error MUST include the
	      offending AVPs within a Failed-AVP AVP. In cases where the
	      erroneous AVP length value exceeds the message length or is
	      less than the minimum AVP header length, it is sufficient to
	      include the offending AVP header and a zero filled payload of
	      the minimum required length for the payloads data type. If
	      the AVP is a Grouped AVP, the Grouped AVP header with an
	      empty payload would be sufficient to indicate the offending
	      AVP. In the case where the offending AVP header cannot be
	      fully decoded when the AVP length is less than the minimum
	      AVP header length, it is sufficient to include an offending
	      AVP header that is formulated by padding the incomplete AVP
	      header with zero up to the minimum AVP header length.

	      The AVPs placed in the errors field of a diameter_packet
	      record are intended to be appropriate for inclusion in a
	      Failed-AVP, but neither of the above paragraphs has been
	      followed in the Grouped case: the entire faulty AVP
	      (non-faulty components and all) has been included. This made
	      it difficult to identify the actual faulty AVP in all but
	      simple cases.

	      The decode is now adapted to the RFC, and implements the
	      suggested single faulty AVP, nested in as many Grouped
	      containers as required.

   OTP-12768  Fix SCTP problems on Solaris.

	      The allocation of association ids in Solaris was in conflict
	      with an assumption made in diameter_sctp, resulting in
	      failures when accepting multiple peer connections.

   OTP-12845  Change license text from Erlang Public License to Apache
	      Public License v2

   OTP-12851  Fix start order of alternate transports.

	      A transport configured with diameter:add_transport/2 can be
	      passed multiple transport_module/transport_config tuples in
	      order to specify alternate configuration, modules being
	      attempted in order until one succeeds. This is primarily for
	      the connecting case; for example, to allow a transport to be
	      configured to first attempt connection over SCTP, and then
	      TCP in case SCTP fails. Multiple module tuples can be paired
	      with a single config tuple, but in this case the start order
	      was reversed relative to the order in which the modules were
	      specifed.

--- edoc-0.7.17 ---------------------------------------------------------

   OTP-12431  Remove functionality related to packages

--- eldap-1.2 -----------------------------------------------------------

   OTP-12282  Support added for LDAP Password Modify Extended Operation
	      (RFC 3062). Thanks to danielwhite.

--- erl_docgen-0.4 ------------------------------------------------------

   OTP-12722  Add possibility to add extra information on documentation
	      front pages.

--- erl_interface-3.8 ---------------------------------------------------

   OTP-12801  Do not accept Nan and Infinity values

	      Erlang does not accept these values, so we return an error in
	      the C interface rather than letting them through to the
	      Erlang VM, which rejects the message with a somewhat cryptic
	      "bad external term".

--- erts-7.0 ------------------------------------------------------------

   OTP-11905  Fix issuing with spaces and quoting in the arguments when
	      using erlang:open_port spawn_executable on windows. The
	      behavior now mimics how unix works. This change implies a
	      backwards incompatibility for how spawn_executable works on
	      windows.

   OTP-11939  Fix global call trace when hipe compiled code call beam
	      compiled functions. Tracing of beam functions should now
	      alway work regardless who the caller is.

   OTP-11940  Add md5 and module entries to ?MODULE:module_info/0/1 and
	      remove obsolete entry 'import'.

   OTP-11941  Debug function erlang:display/1 shows content of binaries and
	      bitstrings, not only the length.

   OTP-11974  Correct cache alignment for ETS write_concurrency locks to
	      improve performance by reduced false sharing. May increase
	      memory footprint for tables with write_concurrency.

   OTP-11997  The time functionality of Erlang has been extended. This both
	      includes a new API for time, as well as time warp modes which
	      alters the behavior of the system when system time changes.
	      You are strongly encouraged to use the new API instead of the
	      old API based on erlang:now/0. erlang:now/0 has been
	      deprecated since it is and forever will be a scalability
	      bottleneck. For more information see the Time and Time
	      Correction chapter of the ERTS User's Guide.

	      Besides the API changes and time warp modes a lot of
	      scalability and performance improvements regarding time
	      management has been made internally in the runtime system.
	      Examples of such improvements are scheduler specific timer
	      wheels, scheduler specific BIF timer management, parallel
	      retrieval of monotonic time and system time on systems with
	      primitives that are not buggy.

   OTP-12099  erlang:function_exported(M, F, A) will now return true if
	      M:F/A refers to a BIF.

   OTP-12151  New BIF: erlang:get_keys/0, lists all keys associated with
	      the process dictionary. Note: erlang:get_keys/0 is
	      auto-imported.

   OTP-12232  Make distributed send of large messages yield to improve
	      real-time characteristics.

   OTP-12236  Use high accuracy poll timeouts

	      Where available, use poll/select API's that can handle time
	      resolutions less than 1ms. In the cases where such API's are
	      not available the timeout is rounded up to the nearest ms.

   OTP-12239  All possibly blocking operations in the fd/spawn and terminal
	      driver have been converted to non-blocking operations. Before
	      this fix it was possible for the VM to be blocked for a long
	      time if the entity consuming stdout/stderr did not consume it
	      fast enough.

   OTP-12240  The internal group to user_drv protocol has been changed to
	      be synchronous in order to guarantee that output sent to a
	      process implementing the user_drv protocol is printed before
	      replying. This protocol is used by the standard_output device
	      and the ssh application when acting as a client. 

	      This change changes the previous unlimited buffer when
	      printing to standard_io and other devices that end up in
	      user_drv to 1KB.

   OTP-12254  The previously introduced "eager check I/O" feature is now
	      enabled by default.

	      Eager check I/O can be disabled using the erl command line
	      argument: +secio false

	      Characteristics impact compared to previous default:

	      -- Lower latency and smoother management of externally
	      triggered I/O operations.

	      -- A slightly reduced priority of externally triggered I/O
	      operations.

   OTP-12270  Properly support maps in match_specs

   OTP-12292  The notice that a crashdump has been written has been moved
	      to be printed before the crashdump is generated instead of
	      afterwords. The wording of the notice has also been changed.

   OTP-12309  New function ets:take/2. Works the same as ets:delete/2 but
	      also returns the deleted object(s).

   OTP-12366  Tracing with cpu_timestamp option has been enabled on Linux.

   OTP-12376  ets:info/1,2 now contains information about whether
	      write_concurrency or read_concurrency is enabled.

   OTP-12377  Crashdumps have been expanded to include:

	      -- Stack trace of currently running process (including
	      processes that are being garbage collected)

	      -- Data about the state of the erts schedulers

	      -- Extended statistics about ets tables of the types; set,
	      bag or dublicate_bag.

	      -- All configurable options for ets tables

	      For more detailed information see How to interpret the Erlang
	      crash dumps in the ERTS User's Guide.

   OTP-12383  Improved usage of gcc's builtins for atomic memory access.
	      These are used when no other implementation of atomic memory
	      operations is available. For example, when compiling for ARM
	      when libatomic_ops is not available.

	      The largest improvement will be seen when compiling with a
	      gcc with support for the __atomic_* builtins (using a gcc of
	      at least version 4.7), but also when only the legacy __sync_*
	      builtins are available (using a gcc of at least version 4.1)
	      an improvement can be seen.

	      For more information see the "Atomic Memory Operations and
	      the VM" section of $ERL_TOP/HOWTO/INSTALL.md.

   OTP-12411  Introduce math:log2/1 function to math module.

   OTP-12492  The documentation of the Abstract Format (in the ERTS User's
	      Guide) has been updated with types and specification. (Thanks
	      to Anthony Ramine.)

	      The explicit representation of parentheses used in types of
	      the abstract format has been removed. Instead the new
	      functions erl_parse:type_inop_prec() and
	      erl_parse:type_preop_prec() can be used for inserting
	      parentheses where needed.

   OTP-12508  Remove perfctr support

	      Development of perfctr in the linux kernel ceased in 2010.
	      The perfctr support code in the Erlang VM is thus effectively
	      dead code and therefor removed.

   OTP-12548  zlib:inflateChunk/2 has been added. It works like
	      zlib:inflate/2, but decompresses no more data than will fit
	      in the buffer configured by zlib:setBufSize/2.

   OTP-12554  Add missing overhead for offheap binaries created from
	      external format. This fix can improve the garbage collection
	      of large binaries originating from binary_to_term or messages
	      from remote nodes.

   OTP-12555  Use linear search for small select_val arrays

   OTP-12563  New BIF ets:update_counter/4 with a default object as
	      argument, which will be inserted in the table if the key was
	      not found.

   OTP-12584  Export missing types from zlib module

   OTP-12585  Use persistent hashmaps for large Maps

	      Maps will use a persistent hashmap implementation when the
	      number of pairs in a Map becomes sufficiently large. The
	      change will occur when a Map reaches 33 pairs in size but
	      this limit might change in the future.

	      The most significant impact for the user by this change is
	      speed, and to a lesser degree memory consumption and
	      introspection of Maps. Memory consumption size is probalistic
	      but lesser than gb_trees or dict for instance. Any other
	      impacts will be transparent for the user except for the
	      following changes.

	      Semantics of Maps have changed in two incompatible ways
	      compared to the experimental implementation in OTP 17:

	      -- Hashing of maps is done different by erlang:phash2/1,2,
	      erlang:phash/1 and erlang:hash/2.

	      -- Comparing two maps with ==, /=, =<, <, >= and >, is done
	      different if the keys contain floating point numbers.

   OTP-12610  Scalability improvement for erlang:make_ref/0, and other
	      functionality that create references. Each scheduler now
	      manage its own set of references. By this no communication at
	      all is needed when creating references.

	      Previous implementation generated a strictly monotonically
	      increasing sequence of references corresponding to creation
	      time on the runtime system instance. This is not the case
	      with current implementation. You can only expect reference to
	      be unique. The Erlang/OTP documentation has never mentioned
	      anything else but the uniqueness property, so this change is
	      fully compatible. The only reason we've marked this as a
	      potential incompatibility is since an early draft for an
	      Erlang specification mentions strict monotonicity as a
	      property.

	      If you need to create data with a strict monotonicity
	      property use erlang:unique_integer([monotonic]). Do not use
	      the deprecated erlang:now().

   OTP-12613  Enable different abort signal from heart

	      By using environment variable HEART_KILL_SIGNAL, heart can
	      now use a different signal to kill the old running Erlang.

	      By default the signal is SIGKILL but SIGABRT may also be used
	      by setting environment variable: HEART_KILL_SIGNAL=SIGABRT

   OTP-12641  Ensure hashing of zero is consistent

	      Erlang treats positive and negative zero as equal: 

	      true = 0.0 =:= 0.0/-1

	      However, Erlangs hash functions: hash, phash and phash2 did
	      not reflect this behaviour. The hash values produced by the
	      different hash functions would not be identical for positive
	      and negative zero.

	      This change ensures that hash value of positive zero is
	      always produced regardless of the signedness of the zero
	      float, i.e.,

	      true = erlang:phash2(0.0) =:= erlang:phash2(0.0/-1)

   OTP-12646  Update autconf to latest version 2015-03-04

   OTP-12650  Optimization of timers internally in the VM. This include
	      process timers (receive ... after), port timers
	      (driver_set_timer()) as well as BIF timers
	      (erlang:send_after()/erlang:start_timer()).

	      Each scheduler thread now has its own lock-free timer service
	      instead of one locked central service. This dramatically
	      improves performance of timer management on systems with a
	      large amount of schedulers and timers.

	      The timer service internal data structure has also been
	      optimized to be able to handle more timers than before. That
	      is, each timer service is by its self able to handle more
	      timers without dramatic performance loss than the old
	      centralized timer service.

	      The API of BIF timers has also been extended. Timeout values
	      are for example no longer limited to 32-bit integers. For
	      more information see the documentation of
	      erlang:start_timer/4, erlang:send_after/4,
	      erlang:cancel_timer/2, and erlang:read_timer/2.

	      Characteristics impact: Calls to the synchronous versions of
	      erlang:cancel_timer(), and erlang:read_timer() may take
	      substantially longer time to complete than before. This occur
	      when the timer that is accessed is managed by a remote
	      scheduler. You typically want to use the new asynchronous
	      option in order to avoid blocking the calling process.

   OTP-12655  Ensure NIF term creation disallows illegal floating point
	      values and too long atoms. Such values will cause a NIF to
	      throw badarg exception when it returns.

   OTP-12656  Fixed building of Map results from match_specs

	      A faulty "box-value" entered into the heap which could cause
	      a segmentation fault in the garbage collector if it was
	      written on a heap fragment.

   OTP-12667  Fix hipe bug when matching a "writable" binary. The bug has
	      been seen to sometimes cause a failed binary matching of a
	      correct utf8 character, but other symptoms are also possible.

   OTP-12685  Keep dirty schedulers from waking other schedulers.

   OTP-12690  Specialize instructions from common assembler patterns

	      Specialize common instructions of rem, band, minus and plus
	      in the beam loader. This will reduce the number of fetches
	      and thus lessen the instruction dispatch pressure during
	      runtime and speed up those operations in some common cases.

	      Specialize move patterns from x-registers to the stack with a
	      new move_window instruction. This change will reduce
	      instruction dispatch pressure.

   OTP-12693  Fix cross compilation for Android.

   OTP-12706  Fix incorrect use of autoconf macro AC_EGREP_CPP, which could
	      cause faulty configuration if run from a path containing the
	      string 'yes'.

   OTP-12715  Minimal Java version is now 1.6

   OTP-12717  Disable floating point exceptions if the VM is compiled by
	      clang/llvm. This is a known long-standing problem in
	      clang/llvm.

   OTP-12720  Fix bug in file:sendfile for FreeBSD causing not the entire
	      file to be sent.

   OTP-12735  Send format and args on process exit to error_logger

	      Previously, the emulator would generate a whole string with
	      values and call the error_logger passing "~s~n". This changes
	      it to a format string containing ~p with the respective
	      values as arguments.

   OTP-12751  Fix the broken Android support in erl_child_setup.c

   OTP-12755  Map error logger warnings to warning messages by default.

   OTP-12761  Configure architecture ppc64le architecture as a ppc64

   OTP-12766  Faulty statistics reported by the fix_alloc allocator.

   OTP-12770  Add function enif_raise_exception to allow a NIF to raise an
	      error exception with any type of reason.

   OTP-12771  Fix two erts_snprintf() calls to correct sizes.

	      - run_erl.c (ose): Use the size of the signal type, not its
	      pointer. - erl_node_tables.c: Use the size of the _BUFFER in
	      erts_snprintf() to make sure we can use the full space.

   OTP-12777  Optimized node table statistics retrieval.

   OTP-12781  Map beam error logger warnings to warning messages by
	      default. Previously these messages were mapped to the error
	      channel by default.

   OTP-12797  gen_tcp:shutdown/2 is now asynchronous

	      This solves the following problems with the old
	      implementation:

	      It doesn't block when the TCP peer is idle or slow. This is
	      the expected behaviour when shutdown() is called: the caller
	      needs to be able to continue reading from the socket, not be
	      prevented from doing so.

	      It doesn't truncate the output. The current version of
	      gen_tcp:shutdown/2 will truncate any outbound data in the
	      driver queue after about 10 seconds if the TCP peer is idle
	      of slow. Worse yet, it doesn't even inform anyone that the
	      data has been truncated: 'ok' is returned to the caller; and
	      a FIN rather than an RST is sent to the TCP peer.

   OTP-12802  Introduced delayed node table GC. This in order to avoid
	      oscillation of entries in and out of the tables. The
	      oscillation caused unnecessary lock contention on the table
	      locks. The delay length can be set by passing the +zdntgc
	      command line argument.

	      Characteristics impact: The tables can grow to very large
	      sizes with unused entries if the node is get huge amounts of
	      short lived connections from other nodes. This problem can be
	      alleviated by shortening the length of the delay using the
	      +zdntgc command line argument.

   OTP-12812  Delayed memory allocations could be delayed an unnecessarily
	      long time.

   OTP-12817  Make sure that timeouts on a pool of acceptors are released
	      in the correct order.

   OTP-12820  Fix segmentation fault in module_info for deleted modules

   OTP-12821  Fix garbage collection of literals in code purge

	      During code purging and check_process_code, the checking of
	      the binary reference embedded in the match binary state was
	      omitted for the tracing tests. This would cause the binary
	      match state to reference deallocated memory.

   OTP-12840  A bug has been corrected for gen_tcp:close so when
	      {linger,{true,0}} is in effect it does not wait for data in
	      the driver queue to transfer out before closing the port. Bug
	      fix by Rory Byrne.

   OTP-12842  Improved implementation of erlang:statistics(io) in order to
	      reduce contention between schedulers.

	      Characteristics impact: The actual call to
	      erlang:statistics(io) takes longer time to complete, but the
	      overall impact on the system is improved.

   OTP-12843  There are many cases where user code needs to be able to
	      distinguish between a socket that was closed normally and one
	      that was aborted. Setting the option {show_econnreset, true}
	      enables the user to receive ECONNRESET errors on both active
	      and passive sockets.

   OTP-12849  Do not preallocate too large event pool

	      A default pool size of 4000 is too excessive for the common
	      case. This corresponds directly to the number of threads in
	      the system. Change ERTS_TS_EV_ALLOC_DEFAULT_POOL_SIZE to
	      2048. Change ERTS_TS_EV_ALLOC_POOL_SIZE to 32.

   OTP-12855  The documentation of the driver callback start() erroneously
	      stated that a return value of ERL_DRV_ERROR_ERRNO caused the
	      error value to be passed via erl_errno when it should have
	      been errno.

--- et-1.5.1 ------------------------------------------------------------

   OTP-12780  The et application must continue to use erlang:now/0 in order
	      to obtain timestamps that are consistent with timestamps
	      obtained from tracing. The application has been updated to
	      suppress the warning for erlang:now/0.

--- eunit-2.2.10 --------------------------------------------------------

   OTP-11660  The eunit application is now unicode safe.

--- gs-1.6 --------------------------------------------------------------

   OTP-12845  Change license text from Erlang Public License to Apache
	      Public License v2

--- hipe-3.12 -----------------------------------------------------------

   OTP-12666  Fix a minor bug in the handling of opaque types.

   OTP-12667  Fix hipe bug when matching a "writable" binary. The bug has
	      been seen to sometimes cause a failed binary matching of a
	      correct utf8 character, but other symptoms are also possible.

   OTP-12794  Allow use of complete interface of cerl_pmatch module

   OTP-12816  Optimizations and code cleanup in hipe code loader.

--- ic-4.4 --------------------------------------------------------------

   OTP-12845  Change license text from Erlang Public License to Apache
	      Public License v2

--- inets-6.0 -----------------------------------------------------------

   OTP-11845  Fix race condition in httpc. If the socket is closed by the
	      peer do not try to close it again.

   OTP-12156  Remove Server Side Include support from inets, as this is an
	      old technic that has security issues and was not well tested.

   OTP-12362  Avoid process leak by gracefully terminating httpc request
	      handler process when send operation fails.

   OTP-12674  To enable the HTTP server to run in a virtualized
	      environment, where there can be more that one server that has
	      the same ip-address and port, we add a new option profile.

   OTP-12798  Let gen_tcp:controlling_process/2 and inet_sctp:connect/[45]
	      propagate prim_inet:setopt/3 errors instead of having them
	      generate badmatch exceptions.

   OTP-12803  httpc: Fix implementation of gracefull shudown to work as
	      intended for keep alive connections not using pipelining.

   OTP-12822  Correct handling of proxy options when using persistent
	      connections.

--- jinterface-1.6 ------------------------------------------------------

   OTP-12333  Reformat the sources for JInterface uniformly and according
	      to the standard Java style guidelines. Provide description of
	      the rules applied in Eclipse format (for other editors one
	      can check the settings against these).

	      In short, the formatting style is: * indentation uses only
	      spaces; each level is 4 positions * no trailing whitespace *
	      mostly default Java style formatting (any difference is
	      minor) * always use {} blocks * use 'final' as much as
	      possible

   OTP-12686  Add basic transport factory implementation. This makes
	      possible creating connections between nodes using ssh
	      channels for example.

   OTP-12691  Add Jinterface generic match and bind methods to provide low
	      level interface base methods sufficient for variety of higher
	      level pattern matching/variable binding implementations.

   OTP-12715  Minimal Java version is now 1.6

   OTP-12746  Remove extra @param in javadoc as this gives an error when
	      building the docs in java 1.8

--- kernel-4.0 ----------------------------------------------------------

   OTP-12144  Fix error handling in file:read_line/1 for Unicode contents.

   OTP-12151  New BIF: erlang:get_keys/0, lists all keys associated with
	      the process dictionary. Note: erlang:get_keys/0 is
	      auto-imported.

   OTP-12240  The internal group to user_drv protocol has been changed to
	      be synchronous in order to guarantee that output sent to a
	      process implementing the user_drv protocol is printed before
	      replying. This protocol is used by the standard_output device
	      and the ssh application when acting as a client. 

	      This change changes the previous unlimited buffer when
	      printing to standard_io and other devices that end up in
	      user_drv to 1KB.

   OTP-12342  Introduce os:getenv/2 which is similar to os:getenv/1 but
	      returns the passed default value if the required environment
	      variable is undefined.

   OTP-12564  The inflateInit/2 and deflateInit/6 functions now accepts a
	      WindowBits argument equal to 8 and -8.

   OTP-12673  It is now possible to paste text in JCL mode (using Ctrl-Y)
	      that has been copied in the previous shell session. Also a
	      bug that caused the JCL mode to crash when pasting text has
	      been fixed.

   OTP-12755  Map error logger warnings to warning messages by default.

   OTP-12773  Ensure that each segment of an IPv6 address when parsed from
	      a string has a maximum of 4 hex digits

   OTP-12781  Map beam error logger warnings to warning messages by
	      default. Previously these messages were mapped to the error
	      channel by default.

   OTP-12797  gen_tcp:shutdown/2 is now asynchronous

	      This solves the following problems with the old
	      implementation:

	      It doesn't block when the TCP peer is idle or slow. This is
	      the expected behaviour when shutdown() is called: the caller
	      needs to be able to continue reading from the socket, not be
	      prevented from doing so.

	      It doesn't truncate the output. The current version of
	      gen_tcp:shutdown/2 will truncate any outbound data in the
	      driver queue after about 10 seconds if the TCP peer is idle
	      of slow. Worse yet, it doesn't even inform anyone that the
	      data has been truncated: 'ok' is returned to the caller; and
	      a FIN rather than an RST is sent to the TCP peer.

   OTP-12843  There are many cases where user code needs to be able to
	      distinguish between a socket that was closed normally and one
	      that was aborted. Setting the option {show_econnreset, true}
	      enables the user to receive ECONNRESET errors on both active
	      and passive sockets.

--- megaco-3.18 ---------------------------------------------------------

   OTP-12762  The runtime dependencies in the application resource file
	      have been updated.

--- mnesia-4.13 ---------------------------------------------------------

   OTP-12481  Make Mnesia DCD dump behavior at start up optional, when
	      turned off mnesia loads large disc_copies tables faster.

   OTP-12714  Mnesia's dirty functions did not always exit with {aborted,
	      Reason} as documented when an error occurred.

   OTP-12807  Consider file descriptors limits (emfile) as a fatal error
	      and do not delete log files. Previously the error was seen as
	      a corrupted disk and the log files deleted which caused data
	      loss.

--- observer-2.1 --------------------------------------------------------

   OTP-12363  Added display of new crashdump information available in
	      crashdumps from Erlang/OTP 18.

   OTP-12401  Show run queue status in crashdump viewer.

   OTP-12504  Added the possibility to view sasl log entries for processes.

   OTP-12631  Add memory allocator usage and utilization graphs.

   OTP-12819  Don't refresh observer table view if there was no change

--- odbc-2.11 -----------------------------------------------------------

   OTP-12845  Change license text from Erlang Public License to Apache
	      Public License v2

--- orber-3.8 -----------------------------------------------------------

   OTP-12687  Remove the usage of erlang:now() from all Corba applications
	      and use the new rand module instead of random.

--- os_mon-2.4 ----------------------------------------------------------

   OTP-12730  cpu_sup should use native sysctl/libkvm calls on BSD

	      This avoids forking off with os:cmd every time we just want
	      to collect the load averages. riak does this every second,
	      which results in a lot of unnecessary load.

   OTP-12796  Implement native cpu_sup:util/0,1 for FreeBSD

--- ose-1.1 -------------------------------------------------------------

   OTP-12845  Change license text from Erlang Public License to Apache
	      Public License v2

--- otp_mibs-1.1 --------------------------------------------------------

   OTP-12845  Change license text from Erlang Public License to Apache
	      Public License v2

--- parsetools-2.1 ------------------------------------------------------

   OTP-12271  The new -dialyzer() attribute is used for suppressing
	      Dialyzer warnings in generated code.

--- percept-0.8.11 ------------------------------------------------------

   OTP-12662  Fix http server configuration

--- public_key-1.0 ------------------------------------------------------

   OTP-12110  public_key: Remove legacy switch compact_bit_string

	      E.i bitstrings will not be decode as {Unused, Binary}, they
	      are now Erlang bitstrings.

	      Also the compact_bit_string implies the legacy_erlang_types
	      switch So removing the switch will also make OCTET STRING
	      values be represented as binaries.

	      Undecoded open type will now be wrapped in a asn1_OPENTYPE
	      tuple.

	      This will change some values in records returned by the
	      public_key API making this change a potentiall
	      incompatibility.

--- reltool-0.7 ---------------------------------------------------------

   OTP-12845  Change license text from Erlang Public License to Apache
	      Public License v2

--- runtime_tools-1.9 ---------------------------------------------------

   OTP-12845  Change license text from Erlang Public License to Apache
	      Public License v2

--- sasl-2.5 ------------------------------------------------------------

   OTP-11540  The undocumented upgrade instruction
	      <code>{remove_module,PrePurge,PostPurge,DepMods}</code> is
	      removed. This instruction was added for symmetry reasons in
	      OTP R7B, but was never documented or tested.

	      The existing instruction
	      <code>{add_module,Mod,DepMods}</code> is now documented, and
	      the complementing instruction
	      <code>{delete_module,Mod,DepMods}</code> is added.

   OTP-12778  The sasl_error_logger configuration parameter now supports
	      the value {file,FileName,Modes} which allows the log file to
	      be opened in other mode than write (for example, append
	      mode).

--- snmp-5.2 ------------------------------------------------------------

   OTP-12762  The runtime dependencies in the application resource file
	      have been updated.

--- ssh-4.0 -------------------------------------------------------------

   OTP-11697  Better usage of binary matching in ssh_auth.erl and
	      ssh_message.erl

   OTP-12029  A new option 'preferred_algorithms' is available for
	      ssh:daemon and ssh:connect.

	      This option defines the algorithms presented to the peer in
	      the algorithm negotiation phase of the ssh protocol. 

	      The default list can be obtained from the new function
	      ssh:default_algorithms/0.

   OTP-12240  The internal group to user_drv protocol has been changed to
	      be synchronous in order to guarantee that output sent to a
	      process implementing the user_drv protocol is printed before
	      replying. This protocol is used by the standard_output device
	      and the ssh application when acting as a client. 

	      This change changes the previous unlimited buffer when
	      printing to standard_io and other devices that end up in
	      user_drv to 1KB.

   OTP-12648  If ssh_connection:subsystem/4 fails we terminates gracefully.

   OTP-12649  Included test of the 'e' and 'f' parameters in diffie-hellman
	      key exchange as specified in rfc 4253 section 8.

   OTP-12675  To enable the ssh daemon to run in a virtualized environment,
	      where there can be more that one server that has the same
	      ip-address and port, we add a new option profile.

   OTP-12676  Upgrade test suite added.

   OTP-12692  Fixes the bug that once the rekey_limit bytes (by default,
	      1GB) had been transmitted the connection was rekeyed every
	      minute, not after the next transferred 'rekey_limit' chunk.

	      Thanks to Simon Cornish for the report and the fix!

   OTP-12708  Fixes a bug that causes an SFTP connection to always fail
	      when {timeout, Timeout} option is used with
	      ssh_sftp:start_channel.

	      Thanks to Simon Cornish

   OTP-12760  Fix various ssh key exchange problems.

	      Thanks to Simon Cornish

   OTP-12786  Testcase improvements and corrections:

	      * Add testcases for the disconnectfun option on both server
	      and client sides

	      * Timeout testcases adjusted for slow machines where they
	      sometimes failed

   OTP-12788  The options system_dir and user_dir assumes that the value is
	      a path to a directory which is readable. This is now checked
	      early, so ssh:daemon and ssh:connect will fail with an error
	      message immediately.

   OTP-12789  The option disconnectfun can now be used both on the client
	      and server side.

   OTP-12790  A daemon now checks that a client doesn't try to authorize
	      with methods not in the option auth_methods.

   OTP-12811  Disconnectfun now triggers on all disconnects.

   OTP-12813  A new option unknown_msgfun/2 for ssh:connect and ssh:daemon
	      for handling unknown messages. With the option it is possible
	      to intercept before an INFO log message is generated.

	      One usage is to filter out messages that are not wanted in
	      the error logger as info reports. An example of such a
	      message is the 'etimedout' tcp error message that will be
	      received if a connection has keep_alive and the peer is
	      restarted.

--- ssl-7.0 -------------------------------------------------------------

   OTP-10362  Add new API functions to handle CRL-verification

   OTP-12390  Remove default support for SSL-3.0, due to Poodle vunrability
	      in protocol specification.

	      Add padding check for TLS-1.0 to remove Poodle vunrability
	      from TLS 1.0, also add the option padding_check. This option
	      only affects TLS-1.0 connections and if set to false it
	      disables the block cipher padding check to be able to
	      interoperate with legacy software.

	      Remove default support for RC4 cipher suites, as they are
	      consider too weak.

   OTP-12580  Add support for TLS ALPN (Application-Layer Protocol
	      Negotiation) extension.

   OTP-12670  Ignore signature_algorithm (TLS 1.2 extension) sent to TLS
	      1.0 or TLS 1.1 server

   OTP-12736  Add SNI (Server Name Indication) support for the server side.

   OTP-12799  Improve error handling in TLS distribution module to avoid
	      lingering sockets.

   OTP-12815  Add option {client_renegotiation, boolean()} option to the
	      server-side of the SSL application.

   OTP-12829  Gracefully ignore proprietary hash_sign algorithms

--- stdlib-2.5 ----------------------------------------------------------

   OTP-11043  Allow maps for supervisor flags and child specs

	      Earlier, supervisor flags and child specs were given as
	      tuples. While this is kept for backwards compatibility, it is
	      now also allowed to give these parameters as maps, see
	      sup_flags and child_spec.

   OTP-11173  A new system message, terminate, is added. This can be sent
	      with sys:terminate/2,3. If the receiving process handles
	      system messages properly it will terminate shortly after
	      receiving this message.

	      The new function proc_lib:stop/1,3 utilizes this new system
	      message and monitors the receiving process in order to
	      facilitate a synchronous stop mechanism for 'special
	      processes'.

	      proc_lib:stop/1,3 is used by the following functions:

	      -- gen_server:stop/1,3 (new)

	      -- gen_fsm:stop/1,3 (new)

	      -- gen_event:stop/1,3 (modified to be synchronous)

	      -- wx_object:stop/1,3 (new)

   OTP-11907  Remove the pg module, which has been deprecated through
	      OTP-17, is now removed from the STDLIB application. This
	      module has been marked experimental for more than 15 years,
	      and has largely been superseded by the pg2 module from the
	      Kernel application.

   OTP-12151  New BIF: erlang:get_keys/0, lists all keys associated with
	      the process dictionary. Note: erlang:get_keys/0 is
	      auto-imported.

   OTP-12158  Fix handling of single dot in filename:join/2

	      The reference manual says that filename:join(A,B) is
	      equivalent to filename:join([A,B]). In some rare cases this
	      turns out not to be true. For example:

	      filename:join("/a/.","b") -> "/a/./b" vs
	      filename:join(["/a/.","b"]) -> "/a/b".

	      This has been corrected. A single dot is now only kept if it
	      occurs at the very beginning or the very end of the resulting
	      path.

   OTP-12167  Add three new functions to io_lib-- scan_format/2,
	      unscan_format/1, and build_text/1-- which expose the parsed
	      form of the format control sequences to make it possible to
	      easily modify or filter the input to io_lib:format/2. This
	      can e.g. be used in order to replace unbounded-size control
	      sequences like ~w or ~p with corresponding depth-limited ~W
	      and ~P before doing the actual formatting.

   OTP-12183  The undocumented option generic_debug for gen_server has been
	      removed.

   OTP-12186  erl_lint:icrt_export/4 has been rewritten to make the code
	      really follow the scoping rules of Erlang, and not just in
	      most situations by accident.

   OTP-12195  Introduce the erl_anno module, an abstraction of the second
	      element of tokens and tuples in the abstract format.

   OTP-12218  Support variables as Map keys in expressions and patterns

	      Erlang will accept any expression as keys in Map expressions
	      and it will accept literals or bound variables as keys in Map
	      patterns.

   OTP-12257  The last traces of Mnemosyne Rules have been removed.

   OTP-12270  Properly support maps in match_specs

   OTP-12301  Add 'trim_all' option to binary:split/3

	      This option can be set to remove _ALL_ empty parts of the
	      result of a call to binary:split/3.

   OTP-12309  New function ets:take/2. Works the same as ets:delete/2 but
	      also returns the deleted object(s).

   OTP-12376  ets:info/1,2 now contains information about whether
	      write_concurrency or read_concurrency is enabled.

   OTP-12422  string:tokens/2 is somewhat faster, especially if the list of
	      separators only contains one separator character.

   OTP-12492  The documentation of the Abstract Format (in the ERTS User's
	      Guide) has been updated with types and specification. (Thanks
	      to Anthony Ramine.)

	      The explicit representation of parentheses used in types of
	      the abstract format has been removed. Instead the new
	      functions erl_parse:type_inop_prec() and
	      erl_parse:type_preop_prec() can be used for inserting
	      parentheses where needed.

   OTP-12566  Prevent zip:zip_open/[12] from leaking file descriptors if
	      parent process dies.

   OTP-12586  Add a new random number generator, see rand module. It have
	      better characteristics and an improved interface.

   OTP-12651  Correct orddict(3) regarding evaluation order of fold() and
	      map().

   OTP-12657  Correct maps module error exceptions 

	      Bad input to maps module function will now yield the
	      following exceptions:

	      -- {badmap,NotMap} or,

	      -- badarg

   OTP-12673  It is now possible to paste text in JCL mode (using Ctrl-Y)
	      that has been copied in the previous shell session. Also a
	      bug that caused the JCL mode to crash when pasting text has
	      been fixed.

   OTP-12716  filename:split/1 when given an empty binary will now return
	      an empty list, to make it consistent with return value when
	      given an empty list.

   OTP-12737  Add sync option to ets:tab2file/3.

   OTP-12742  Add functions gb_sets:iterator_from() and
	      gb_trees:iterator_from(). (Thanks to Kirill Kinduk.)

   OTP-12745  Add maps:filter/2 to maps module.

   OTP-12752  Add uptime() shell command.

   OTP-12754  Cache nowarn_bif_clash functions in erl_lint.

	      This patch stores nowarn_bif_clash in the lint record. By
	      using erlc +'{eprof,lint_module}' when compiling the erlang
	      parser, we noticed the time spent on nowarn_function/2
	      reduced from 30% to 0.01%.

   OTP-12772  Optimize the Erlang Code Linter by using the cached filename
	      information.

   OTP-12774  Change some internal data structures to Maps in order to
	      speed up compilation time. Measured speed up is around
	      10%-15%.

   OTP-12785  Update orddict to use parameterized types and specs. (Thanks
	      to UENISHI Kota.)

   OTP-12793  If a child of a simple_one_for_one returns ignore from its
	      start function no longer store the child for any restart
	      type. It is not possible to restart or delete the child
	      because the supervisor is a simple_one_for_one.

   OTP-12808  The assert macros in eunit has been moved out to
	      stdlib/include/assert.hrl. This files get included by
	      eunit.hrl. Thus, nothing changes for eunit users, but the
	      asserts can now also be included separately.

   OTP-12814  Make ets:file2tab preserve enabled read_concurrency and
	      write_concurrency options for tables.

   OTP-12841  There are many cases where user code needs to be able to
	      distinguish between a socket that was closed normally and one
	      that was aborted. Setting the option {show_econnreset, true}
	      enables the user to receive ECONNRESET errors on both active
	      and passive sockets.

--- syntax_tools-1.7 ----------------------------------------------------

   OTP-12732  Use the new erl_anno module.

   OTP-12769  The merl module has been added to the syntax_tools
	      application. The Merl library is a simpler way to work with
	      erl_syntax parse trees.

--- test_server-3.9 -----------------------------------------------------

   OTP-10816  The status of an aborted test due to test suite compilation
	      error has changed from 'auto_skipped' to 'failed'. This
	      affects both the textual log file, event handling and CT hook
	      callbacks. The logging of compilation failures has also been
	      improved, especially in the case of multiple test suites
	      failing compilation.

   OTP-10923  The Test Server application has been marked as obsolete and
	      will be removed from OTP in the next major release (OTP
	      19.0).

   OTP-11962  When running OTP tests using the ts interface, it is now
	      possible to specify so called test categories per OTP
	      application. A test category is represented by a CT test
	      specification and defines an arbitrary subset of existing
	      test suites, groups and cases. Examples of test categories
	      are 'smoke' (smoke tests) and 'bench' (benchmarks). (Call
	      ts:help() for more info). Also, functions for reading terms
	      from the current test specification during test,
	      ct:get_testspec_terms/0 and ct:get_testspec_terms/1, have
	      been implemented.

   OTP-12740  The Test Server source code parser (erl2html2) failed to
	      handle the macro tuple in the syntax tree returned by
	      epp_dodger. This error has been corrected.

--- tools-2.8 -----------------------------------------------------------

   OTP-11043  Allow maps for supervisor flags and child specs

	      Earlier, supervisor flags and child specs were given as
	      tuples. While this is kept for backwards compatibility, it is
	      now also allowed to give these parameters as maps, see
	      sup_flags and child_spec.

   OTP-12330  In order to improve performance of the cover tool, new
	      functions are added for cover compilation and analysis on
	      multiple files. This allows for more parallelisation.

	      Some improvements of the data base access is also done in
	      order to improve the performance when analysing and resetting
	      cover data.

	      Minor incompatibility: An error reason from analyse_to_file
	      is changed from no_source_code_found to
	      {no_source_code_found,Module}.

   OTP-12511  Remove Mnemosyne rules support.

   OTP-12681  Add printout of total number of calls and time in eprof

   OTP-12806  Attempting to do a cover analysis when neither source code
	      nor beam file could be found would hang the cover server.
	      Corrected to return a proper error.

--- typer-0.9.9 ---------------------------------------------------------

   OTP-12727  Properly extract annotations from core code.

--- webtool-0.9 ---------------------------------------------------------

   OTP-10922  The Webtool application has been marked as obsolete and will
	      be removed from OTP in the next major release (OTP 19.0).

--- wx-1.4 --------------------------------------------------------------

   OTP-12183  The undocumented option generic_debug for gen_server has been
	      removed.

   OTP-12632  Use wxWidgets-3.0, if found, as default backend on windows.

   OTP-12660  Add missing fields in some events records. May require a
	      recompilation of user applications.

   OTP-12734  Remove raise condition where wx could crash during emulator
	      stoppage.

--- xmerl-1.3.8 ---------------------------------------------------------

   OTP-12689  Remove compiler warnings in xmerl.

--- Open Source Contributors --------------------------------------------

    Alex Wilson, Andras Horvath, Andreas Amsenius, Andreas Schultz, 
    András Veres-Szentkirályi, Anthony Ramine, Breno Leitao, Chris Dituri, 
    Christopher Faulet, Daniel White, David Kubecka, David N. Welton, 
    Derek Brown, Dmitriy Kargapolov, Dmitry Ivanov, Fred Hebert, 
    Holger Weiß, James Fish, Jesper Louis Andersen, Johan Oudinet, 
    Jonas Falkevik, José Valim, Jérôme de Bretagne, Kenji Rikitake, 
    Kirill Zaborsky, Kirilll Zaborsky, Kostis Sagonas, Larry, Leo Liu, 
    Loïc Hoguin, Magnus Henoch, Magnus Ottenklinger, Marc Sugiyama, 
    Martin Hässler, Martin Schürrer, Maxim Mai, Michael Klishin, 
    Mikael Pettersson, Nate Bartley, Nick Mills, Olivier Girondel, 
    Peter Lemenkov, Péter Gömöri, Qijiang Fan, Richard Carlsson, 
    Rory Byrne, Serge Aleynikov, Simon Cornish, Stavros Aronis, 
    Stefan Grundmann, Steve Vinoski, Tom Briden, Tomas Abrahamsson, 
    Tuncer Ayaz, UENISHI Kota, Ulf Wiger, Vlad Dumitrescu, Wasif Malik, 
    Wasif Malik and Johannes Huning, Yoshihiro Tanaka, Yuki Ito, andreaP, 
    beaver, crownedgrouse, jeffweiss, larry, tmanevik, xsipewe, 
    Сергей Прохоров