The non SMP Erlang VM is deprecated and not built by default
Remove deprecated erlang:hash/2
erlang:statistics/1 with scheduler_wall_time now also includes info about dirty CPU schedulers.
The new purge strategy introduced in OTP 19.1 is mandatory and slightly incompatible for processes holding funs
see erlang:check_process_code/3.
The NIF library reload is not supported anymore.
Atoms can now contain arbitrary unicode characters which means that the DFLAG_UTF8_ATOMS 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.
Asn1: Deprecated module and functions removed (asn1rt, asn1ct:encode/3 and decode/3)
Ssh: client only option in a call to start a daemon will now fail
Highlights
Erts
Dirty schedulers enabled and supported on VM with SMP support.
support for “dirty” BIFs and “dirty” GC.
erlang:garbage_collect/2 for control of minor or major GC
Erlang literals are no longer copied when sending messages.
Improved performance for large ETS tables, >256 entries (except ordered_set)
erlang:system_info/1 atom_count and atom_limit
Reduced memory pressure by converting sub-binaries to heap-binaries during GC
enif_select, map an external event to message
Improvements of timers internally in the VM resulting in reduced memory consumption and more efficient administration for timers
Add run-time toggling of lock counting (20.1)
Add new nif API functions for managing an I/O Queue. (20.1)
Compiler
Code generation for complicated guards is improved.
Warnings for repeated identical map keys. #{'a'=>1, 'b'=>2, 'a'=>3} will warn for the repeated key a.
By default there is now a warning when export_all is used. Can be disabled
Pattern matching for maps is optimized
New option deterministic to omit path to source + options info the BEAM file.
Atoms may now contain arbitrary unicode characters.
compile:file/2 has an option to include extra chunks in the BEAM file.
Misc other applications
Significantly updated string module with unicode support and many new functions
crypto now supports OpenSSL 1.1
Unnamed ets tables optimized
gen_fsm is deprecated and replaced by gen_statem
A new event manager to handle a subset of OS signals in Erlang
Optimized sets add_element, del_element and union
Added rand:jump/0-1
When a gen_server crashes, the stacktrace for the client will be printed to facilitate debugging.
take/2 has been added to dict, orddict, and gb_trees.
take_any/2 has been added to gb_trees
erl_tar support for long path names and new file formats
asn1: the new maps option changes the representation of SEQUENCE to be maps instead of records
A TLS client will by default call public_key:pkix_verify_hostname/2 to verify the hostname
ssl: DTLS documented in the API, experimental
ssh: improving security, removing and adding algorithms
New math:fmod/2
The crypto API is extended to use private/public keys stored in an Engine for sign/verify or encrypt/decrypt operations. (20.2)