<div dir="ltr"><div class="gmail-preview-content">
<div class="gmail-comment-body gmail-markdown-body gmail-js-preview-body" style="min-height:504.75px"><h1>Erlang/OTP 20.0</h1>
<p>Erlang/OTP 20.0 is a new major release with new features, quite a few
(characteristics) improvements, as well as a few incompatibilities.</p>
<p>There are only minor changes compared to the second release candidate, one of them listed below:</p>
<ul><li>ERTS:
<ul><li><code><font size="4"><span style="font-family:arial,helvetica,sans-serif">In the release candidates the function</span></font> erlang:term_to_binary/1</code> changed the encoding of all atoms from <code>ATOM_EXT</code> to <code>ATOM_UTF8_EXT</code> and <code>SMALL_ATOM_UTF8_EXT</code>.
This is now changed so that only atoms actually containing unicode
characters are encoded with the UTF8 tags while other atoms are encoded <code>ATOM_EXT</code> just as before.</li></ul>
</li></ul>
<p>Here are some of the most important news in OTP 20:</p>
<h2>Potential Incompatibilities</h2>
<ul><li>
<p>ERTS:</p>
<ul><li>The non SMP Erlang VM is deprecated and not built by default</li><li>Remove deprecated <code>erlang:hash/2</code></li><li>erlang:statistics/1 with scheduler_wall_time now also includes info about dirty CPU schedulers.</li><li>The new purge strategy introduced in OTP 19.1 is mandatory and slightly incompatible for processes holding funs<br>
see <code>erlang:check_process_code/3</code>.</li><li>The NIF library reload is not supported anymore.</li><li>Atoms can now contain arbitrary unicode characters which means that the <code>DFLAG_UTF8_ATOMS</code>
capability in the distribution protocol must be supported if an OTP 20
node should accept the connection with another node or library. Third
party libraries which uses the distribution protocol need to be updated
with this.</li></ul>
</li><li>
<p>Asn1: Deprecated module and functions removed (<code>asn1rt</code>, <code>asn1ct:encode/3</code> and <code>decode/3</code>)</p>
</li><li>
<p>Ssh: client only option in a call to start a daemon will now fail</p>
</li></ul>
<h2>Highlights</h2>
<h3>Erts:</h3>
<ul><li>Dirty schedulers enabled and supported on VM with SMP support.</li><li>support for “dirty” BIFs and “dirty” GC.</li><li>erlang:garbage_collect/2 for control of minor or major GC</li><li>Erlang literals are no longer copied when sending messages.</li><li>Improved performance for large ETS tables, >256 entries (except ordered_set)</li><li>erlang:system_info/1 atom_count and atom_limit</li><li>Reduced memory pressure by converting sub-binaries to heap-binaries during GC</li><li>enif_select, map an external event to message</li><li>Improvements of timers internally in the VM resulting in reduced memory consumption and more efficient administration for timers</li></ul>
<h3>Compiler:</h3>
<ul><li>Code generation for complicated guards is improved.</li><li>Warnings for repeated identical map keys. <code>#{'a'=>1, 'b'=>2, 'a'=>3}</code> will warn for the repeated key <code>a</code>.</li><li>By default there is now a warning when <code>export_all</code> is used. Can be disabled</li><li>Pattern matching for maps is optimized</li><li>New option <code>deterministic</code> to omit path to source + options info the BEAM file.</li><li>Atoms may now contain arbitrary unicode characters.</li><li><code>compile:file/2</code> has an option to include extra chunks in the BEAM file.</li></ul>
<h3>Misc other applications</h3>
<ul><li>Significantly updated <code>string</code> module with unicode support and many new functions</li><li>crypto now supports OpenSSL 1.1</li><li>Unnamed ets tables optimized</li><li><code>gen_fsm</code> is deprecated and replaced by <code>gen_statem</code></li><li>A new event manager to handle a subset of OS signals in Erlang</li><li>Optimized sets add_element, del_element and union</li><li>Added <code>rand:jump/0-1</code></li><li>When a <code>gen_server</code> crashes, the stacktrace for the client will be printed to facilitate debugging.</li><li><code>take/2</code> has been added to <code>dict</code>, <code>orddict</code>, and <code>gb_trees</code>.</li><li><code>take_any/2</code> has been added to <code>gb_trees</code></li><li><code>erl_tar</code> support for long path names and new file formats</li><li><code>asn1</code>: the new <code>maps</code> option changes the representation of <code>SEQUENCE</code> to be maps instead of records</li><li>A TLS client will by default call <code>public_key:pkix_verify_hostname/2</code> to verify the hostname</li><li><code>ssl</code>: DTLS documented in the API, experimental</li><li><code>ssh</code>: improving security, removing and adding algorithms</li><li>New <code>math:fmod/2</code></li></ul>
<p>For more details see<br>
<a href="http://erlang.org/download/otp_src_20.0.readme">http://erlang.org/download/otp_src_20.0.readme</a></p>
<p>Per built versions for Windows can be fetched here:<br>
<a href="http://erlang.org/download/otp_win32_20.0.exe">http://erlang.org/download/otp_win32_20.0.exe</a><br>
<a href="http://erlang.org/download/otp_win64_20.0.exe">http://erlang.org/download/otp_win64_20.0.exe</a></p>
<p>On line documentation can be browsed here:<br>
<a href="http://www.erlang.org/doc/">www.erlang.org/doc/</a></p>
<p>Thanks to all contributors.</p></div>
</div></div>