Patch Package: OTP 19.0 Git Tag: OTP-19.0 Date: 2016-05-12 Trouble Report Id: OTP-10267, OTP-10282, OTP-10292, OTP-10349, OTP-11879, OTP-12217, OTP-12345, OTP-12502, OTP-12573, OTP-12590, OTP-12593, OTP-12719, OTP-12861, OTP-12863, OTP-12883, OTP-12908, OTP-12951, OTP-12979, OTP-13017, OTP-13033, OTP-13034, OTP-13047, OTP-13058, OTP-13059, OTP-13065, OTP-13082, OTP-13086, OTP-13087, OTP-13088, OTP-13089, OTP-13096, OTP-13097, OTP-13111, OTP-13112, OTP-13122, OTP-13123, OTP-13131, OTP-13148, OTP-13152, OTP-13153, OTP-13167, OTP-13174, OTP-13175, OTP-13184, OTP-13191, OTP-13195, OTP-13206, OTP-13207, OTP-13214, OTP-13227, OTP-13229, OTP-13244, OTP-13255, OTP-13260, OTP-13265, OTP-13267, OTP-13280, OTP-13288, OTP-13289, OTP-13293, OTP-13294, OTP-13325, OTP-13341, OTP-13347, OTP-13366, OTP-13374, OTP-13375, OTP-13383, OTP-13392, OTP-13401, OTP-13407, OTP-13408, OTP-13409, OTP-13410, OTP-13411, OTP-13419, OTP-13422, OTP-13425, OTP-13430, OTP-13431, OTP-13440, OTP-13442, OTP-13444, OTP-13445, OTP-13449, OTP-13452, OTP-13458, OTP-13459, OTP-13461, OTP-13464, OTP-13470, OTP-13474, OTP-13475, OTP-13476, OTP-13483, OTP-13485, OTP-13487, OTP-13488, OTP-13489, OTP-13491, OTP-13493, OTP-13494, OTP-13495, OTP-13496, OTP-13497, OTP-13499, OTP-13500, OTP-13501, OTP-13502, OTP-13503, OTP-13504, OTP-13507, OTP-13508, OTP-13512, OTP-13516, OTP-13517, OTP-13520, OTP-13522, OTP-13523, OTP-13524, OTP-13526, OTP-13527, OTP-13531, OTP-13532, OTP-13534, OTP-13540, OTP-13541, OTP-13542, OTP-13544, OTP-13545, OTP-13548, OTP-13551, OTP-13553, OTP-13555, OTP-13556, OTP-13558, OTP-13559, OTP-13560, OTP-13561, OTP-13562 Seq num: seq13002 System: OTP Release: 19 Application: asn1-4.0.3, common_test-1.12.2, compiler-7.0, cosEvent-2.2.1, cosEventDomain-1.2.1, cosFileTransfer-1.2.1, cosNotification-1.2.2, cosProperty-1.2.1, cosTime-1.2.2, cosTransactions-1.3.2, crypto-3.7, debugger-4.2, dialyzer-3.0, diameter-1.12, edoc-0.7.19, eldap-1.2.2, erl_docgen-0.4.3, erl_interface-3.9, erts-8.0, et-1.6, eunit-2.2.14, gs-1.6.1, hipe-3.15.1, ic-4.4.1, inets-6.3, jinterface-1.7, kernel-5.0, megaco-3.18.1, mnesia-4.14, observer-2.2, odbc-2.11.2, orber-3.8.2, os_mon-2.4.1, otp_mibs-1.1.1, parsetools-2.1.2, percept-0.8.12, public_key-1.2, reltool-0.7.1, runtime_tools-1.10, sasl-3.0, snmp-5.2.3, ssh-4.3, ssl-8.0, stdlib-3.0, syntax_tools-2.0, tools-2.8.4, typer-0.9.11, wx-1.7, xmerl-1.3.11 Predecessor: OTP Check out the git tag OTP-19.0, and build a full OTP system including documentation. Apply one or more applications from this build as patches to your installation using the 'otp_patch_apply' tool. For information on install requirements, see descriptions for each application version below. --------------------------------------------------------------------- --- HIGHLIGHTS ------------------------------------------------------ --------------------------------------------------------------------- OTP-10267 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** The tracing support has been extended to allow a tracer module to be the trace event handler instead of a process or port. The tracer module makes it possible for trace tools to filter or manipulate trace event data without the trace event first haing to be copied from the traced process or port. With the introduction of this feature, erlang:trace(all|existing, _, _) now also returns the tracer process as part of the number of processes on which tracing is enabled. The is incompatible with the previous releases. OTP-12345 Application(s): erts, runtime_tools Add microstate accounting Microstate accounting is a way to track which state the different threads within ERTS are in. The main usage area is to pin point performance bottlenecks by checking which states the threads are in and then from there figuring out why and where to optimize. Since checking whether microstate accounting is on or off is relatively expensive only a few of the states are enabled by default and more states can be enabled through configure. There is a convinence module called msacc that has been added to runtime_tools that can assist in gathering and interpreting the data from Microstate accounting. For more information see erlang:statistics(microstate_accounting, _) and the msacc module in runtime_tools. OTP-12345 Application(s): erts, runtime_tools Add microstate accounting Microstate accounting is a way to track which state the different threads within ERTS are in. The main usage area is to pin point performance bottlenecks by checking which states the threads are in and then from there figuring out why and where to optimize. Since checking whether microstate accounting is on or off is relatively expensive only a few of the states are enabled by default and more states can be enabled through configure. There is a convinence module called msacc that has been added to runtime_tools that can assist in gathering and interpreting the data from Microstate accounting. For more information see erlang:statistics(microstate_accounting, _) and the msacc module in runtime_tools. OTP-13058 Application(s): mnesia Added experimental external backend plugin api. This adds the possibility for the user to write other storage backends for data, for example by using shared memory or ram-cached disk storage. The plugin api may change in future versions after being battle tested. OTP-13059 Application(s): compiler, stdlib The pre-processor can now expand the ?FUNCTION_NAME and ?FUNCTION_ARITY macros. OTP-13059 Application(s): compiler, stdlib The pre-processor can now expand the ?FUNCTION_NAME and ?FUNCTION_ARITY macros. OTP-13366 Application(s): erts Related Id(s): OTP-13047 Introduction of configurable management of data referred to by the message queue of a process. Each process can be configured individually. It is now possible to configure the message queue of a process, so that all data referred by it will be kept outside of the heap, and by this prevent this data from being part of garbage collections. For more information see the documentation of process_flag(message_queue_data, MQD). OTP-13496 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** The tracing support has been extended to allow tracing on ports. Ports can be traced on using the 'ports', 'send' and 'receive' trace flags. The first argument of erlang:trace/3 has been extended so that 'all', 'existing' and 'new' now include both processes and ports. New Tracee variants, 'all_processes', 'all_ports', 'existing_processes' etc have been added to specify only processes or ports. OTP-13503 Application(s): erts The erts internal tracing support has been changed to have much less overhead and be more scalable. This rewrite does not break any backwards incompatabilities, but it does change the ordering of some trace messages when compared to previous releases. It should be noted that this only applies to trace messages sent to processes or ports, it does not apply to the new tracer module. However in future releases they may also be effected by this. Trace messages are only guaranteed to be ordered from one traced process or port. In previous releases this was not visible as a 'send' trace message would always arrive before the corresponding 'receive' trace message that is no longer always the case. This also means that timestamped trace messages may seem to arrive out of order as the timestamp is taken when the event is triggered and not when it is put in the queue of the tracer. --------------------------------------------------------------------- --- POTENTIAL INCOMPATIBILITIES ------------------------------------- --------------------------------------------------------------------- OTP-10267 Application(s): erts *** HIGHLIGHT *** The tracing support has been extended to allow a tracer module to be the trace event handler instead of a process or port. The tracer module makes it possible for trace tools to filter or manipulate trace event data without the trace event first haing to be copied from the traced process or port. With the introduction of this feature, erlang:trace(all|existing, _, _) now also returns the tracer process as part of the number of processes on which tracing is enabled. The is incompatible with the previous releases. OTP-11879 Application(s): stdlib Undocumented syntax for function specifications, -spec F/A :: Domain -> Range, has been removed (without deprecation). Using the is_subtype(V, T) syntax for constraints (in function specifications) is no longer documented, and the newer syntax V :: T should be used instead. The Erlang Parser still recognizes the is_subtype syntax, and will continue to do so for some time. OTP-12719 Application(s): stdlib Background: In record fields with a type declaration but without an initializer, the Erlang parser inserted automatically the singleton type 'undefined' to the list of declared types, if that value was not present there. That is, the record declaration: -record(rec, {f1 :: float(), f2 = 42 :: integer(), f3 :: some_mod:some_typ()}). was translated by the parser to: -record(rec, {f1 :: float() | 'undefined', f2 = 42 :: integer(), f3 :: some_mod:some_typ() | 'undefined'}). The rationale for this was that creation of a "dummy" #rec{} record should not result in a warning from dialyzer that, for example, the implicit initialization of the #rec.f1 field violates its type declaration. Problems: This seemingly innocent action has some unforeseen consequences. For starters, there is no way for programmers to declare that e.g. only floats make sense for the f1 field of #rec{} records when there is no "obvious" default initializer for this field. (This also affects tools like PropEr that use these declarations produced by the Erlang parser to generate random instances of records for testing purposes.) It also means that dialyzer does not warn if e.g. an is_atom/1 test or something more exotic like an atom_to_list/1 call is performed on the value of the f1 field. Similarly, there is no way to extend dialyzer to warn if it finds record constructions where f1 is not initialized to some float. Last but not least, it is semantically problematic when the type of the field is an opaque type: creating a union of an opaque and a structured type is very problematic for analysis because it fundamentally breaks the opacity of the term at that point. Change: To solve these problems the parser will not automatically insert the 'undefined' value anymore; instead the user has the option to choose the places where this value makes sense (for the field) and where it does not and insert the | 'undefined' there manually. Consequences of this change: This change means that dialyzer will issue a warning for all places where records with uninitialized fields are created and those fields have a declared type that is incompatible with 'undefined' (e.g. float()). This warning can be suppressed easily by adding | 'undefined' to the type of this field. This also adds documentation that the user really intends to create records where this field is uninitialized. OTP-12863 Application(s): syntax_tools The abstract data type in erl_syntax is augmented with types and function specifications. The module erl_prettypr pretty prints types and function specification, and the output can be parsed. The types of record fields are no longer ignored. As a consequence erl_syntax_lib:analyze_record_field/1 returns {Default, Type} instead of Default. The functions analyze_record_attribute, analyze_attribute, analyze_form, and analyze_forms in the erl_syntax_lib module are also affected by this incompatible change. OTP-13088 Application(s): erts The functionality behind erlang:open_port/2 when called with spawn or spawn_executable has been redone so that the forking of the new program is done in a separate process called erl_child_setup. This allows for a much more robust implementation that uses less memory and does not block the entire emulator if the program to be started is on an un-accessible NFS. Benchmarks have shown this approach to be about 3-5 times as fast as the old approach where the fork/vfork was done by erts. This is a pure stability and performance fix, however some error messages may have changed, which is why it is marked as a backwards incompatible change. OTP-13148 Application(s): stdlib Background: The types of record fields have since R12B been put in a separate form by epp:parse_file(), leaving the record declaration form untyped. The separate form, however, does not follow the syntax of type declarations, and parse transforms inspecting -type() attributes need to know about the special syntax. Since the compiler stores the return value of epp:parse_file() as debug information in the abstract code chunk ("Abst" or abstract_code), tools too need to know about the special syntax, if they inspect -type() attributes in abstract code. Change: No separate type form is created by epp:parse_file(), but the type information is kept in the record fields. This means that all parse transforms and all tools inspecting -record() declarations need to recognize {typed_record_field, Field, Type}. OTP-13184 Application(s): sasl The module 'overload' is removed. OTP-13195 Application(s): ssl Remove default support for DES cipher suites OTP-13449 Application(s): kernel The functions rpc:safe_multi_server_call/2,3 that were deprecated in R12B have been removed. OTP-13496 Application(s): erts *** HIGHLIGHT *** The tracing support has been extended to allow tracing on ports. Ports can be traced on using the 'ports', 'send' and 'receive' trace flags. The first argument of erlang:trace/3 has been extended so that 'all', 'existing' and 'new' now include both processes and ports. New Tracee variants, 'all_processes', 'all_ports', 'existing_processes' etc have been added to specify only processes or ports. OTP-13497 Application(s): erts When the 'procs' trace flag is enabled, a 'spawned' trace event is now also generated by a newly created process. The previous event 'spawn' remains, but as it is generated by the process that did the spawn, it is not guaranteed that it is ordered with other trace events from the newly spawned process. So when tracking the lifetime of a process this new event should be used as the creation event. This new trace event is marked as an incompatabiliy because tools that expect certain trace events when enabling 'procs' will have to updated. OTP-13504 Application(s): compiler The compiler will no longer put the compilation date and time into BEAM files. That means that two BEAM files compiled on the same computer from the same source code and compilation options will be identical. Note: If you want to find out whether a BEAM file on disk is different from the loaded code, compared the MD5 value obtained from Mod:module_info(md5) with the MD5 value obtained from beam_lib:md5(BeamFileForMod) . OTP-13532 Application(s): erts, runtime_tools Introduce LTTng tracing via Erlang tracing. For LTTng to be enabled OTP needs to be built with configure option --with-dynamic-trace=lttng. The dynamic trace module dyntrace is now capable to be used as a LTTng sink for Erlang tracing. For a list of all tracepoints, see Runtime Tools User's Guide . This feature also introduces an incompatible change in trace tags. The trace tags gc_start and gc_end has been split into gc_minor_start, gc_minor_end and gc_major_start, gc_major_end. OTP-13532 Application(s): erts, runtime_tools Introduce LTTng tracing via Erlang tracing. For LTTng to be enabled OTP needs to be built with configure option --with-dynamic-trace=lttng. The dynamic trace module dyntrace is now capable to be used as a LTTng sink for Erlang tracing. For a list of all tracepoints, see Runtime Tools User's Guide . This feature also introduces an incompatible change in trace tags. The trace tags gc_start and gc_end has been split into gc_minor_start, gc_minor_end and gc_major_start, gc_major_end. OTP-13542 Application(s): dialyzer Related Id(s): PR-1014 The type specification syntax for Maps is improved: -- The association type KeyType := ValueType denotes an association that must be present. -- The shorthand ... stands for the association type any() => any(). An incompatible change is that #{} stands for the empty map. The type map() (a map of any size) can be written as #{...}. OTP-13553 Application(s): wx Changed atom 'boolean' fields in #wxMouseState{} to 'boolean()'. Moved out arguments in wxListCtrl:hitTest to result. Removed no-op functions in wxGauge that have been removed from wxWidgets-3.1. OTP-13561 Application(s): inets Remove module inets_regexp. Module re should be used instead. --------------------------------------------------------------------- --- asn1-4.0.3 ------------------------------------------------------ --------------------------------------------------------------------- The asn1-4.0.3 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of asn1-4.0.3: erts-7.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- common_test-1.12.2 ---------------------------------------------- --------------------------------------------------------------------- The common_test-1.12.2 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13475 Application(s): common_test The following modules were missing in common_test.app.src: ct_groups, ct_property_test, ct_release_test, ct_webtool, ct_webtool_sup, test_server_gl. They have now been added. Full runtime dependencies of common_test-1.12.2: compiler-6.0, crypto-3.6, debugger-4.1, erts-7.0, inets-6.0, kernel-4.0, observer-2.1, runtime_tools-1.8.16, sasl-2.4.2, snmp-5.1.2, ssh-4.0, stdlib-2.5, syntax_tools-1.7, tools-2.8, xmerl-1.3.8 --------------------------------------------------------------------- --- compiler-7.0 ---------------------------------------------------- --------------------------------------------------------------------- The compiler-7.0 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13430 Application(s): compiler Related Id(s): ERL-113 compile:forms/1,2 would crash when used in a working directory thad had been deleted by another process. (Thanks to Adam Lindberg for reporting this bug.) --- Improvements and New Features --- OTP-12951 Application(s): compiler Optimization of tuple matching has been slightly improved. OTP-12979 Application(s): compiler Five deprecated and undocumented functions in the module core_lib have been removed. 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-13059 Application(s): compiler, stdlib *** HIGHLIGHT *** The pre-processor can now expand the ?FUNCTION_NAME and ?FUNCTION_ARITY macros. OTP-13280 Application(s): compiler The function mapfold/4 has been added to the cerl_trees module. OTP-13289 Application(s): compiler Bitstring comprehensions have been generalized to allow arbitrary expressions in the construction part. OTP-13374 Application(s): compiler Related Id(s): ERL-44 The compiler will now produce warnings for binary patterns that will never match (example: > = Bin). OTP-13504 Application(s): compiler *** POTENTIAL INCOMPATIBILITY *** The compiler will no longer put the compilation date and time into BEAM files. That means that two BEAM files compiled on the same computer from the same source code and compilation options will be identical. Note: If you want to find out whether a BEAM file on disk is different from the loaded code, compared the MD5 value obtained from Mod:module_info(md5) with the MD5 value obtained from beam_lib:md5(BeamFileForMod) . Full runtime dependencies of compiler-7.0: crypto-3.6, erts-7.0, hipe-3.12, kernel-4.0, stdlib-2.5 --------------------------------------------------------------------- --- cosEvent-2.2.1 -------------------------------------------------- --------------------------------------------------------------------- The cosEvent-2.2.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of cosEvent-2.2.1: erts-7.0, kernel-3.0, orber-3.6.27, stdlib-2.0 --------------------------------------------------------------------- --- cosEventDomain-1.2.1 -------------------------------------------- --------------------------------------------------------------------- The cosEventDomain-1.2.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of cosEventDomain-1.2.1: cosNotification-1.1.21, erts-7.0, kernel-3.0, orber-3.6.27, stdlib-2.0 --------------------------------------------------------------------- --- cosFileTransfer-1.2.1 ------------------------------------------- --------------------------------------------------------------------- The cosFileTransfer-1.2.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of cosFileTransfer-1.2.1: cosProperty-1.1.17, erts-7.0, inets-5.10, kernel-3.0, orber-3.6.27, ssl-5.3.4, stdlib-2.0 --------------------------------------------------------------------- --- cosNotification-1.2.2 ------------------------------------------- --------------------------------------------------------------------- The cosNotification-1.2.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of cosNotification-1.2.2: cosEvent-2.1.15, cosTime-1.1.14, erts-7.0, kernel-3.0, orber-3.6.27, stdlib-2.5 --------------------------------------------------------------------- --- cosProperty-1.2.1 ----------------------------------------------- --------------------------------------------------------------------- The cosProperty-1.2.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of cosProperty-1.2.1: erts-7.0, kernel-3.0, mnesia-4.12, orber-3.6.27, stdlib-2.0 --------------------------------------------------------------------- --- cosTime-1.2.2 --------------------------------------------------- --------------------------------------------------------------------- The cosTime-1.2.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of cosTime-1.2.2: cosEvent-2.1.15, erts-7.0, kernel-3.0, orber-3.6.27, stdlib-2.0 --------------------------------------------------------------------- --- cosTransactions-1.3.2 ------------------------------------------- --------------------------------------------------------------------- The cosTransactions-1.3.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of cosTransactions-1.3.2: erts-7.0, kernel-3.0, orber-3.6.27, stdlib-2.0 --------------------------------------------------------------------- --- crypto-3.7 ------------------------------------------------------ --------------------------------------------------------------------- The crypto-3.7 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-12217 Application(s): crypto Refactor crypto to use the EVP interface of OpenSSL, which is the recommended interface that also enables access to hardware acceleration for some operations. OTP-13206 Application(s): crypto Related Id(s): 832, pr Add support for 192-bit keys for the aes_cbc cipher. OTP-13207 Application(s): crypto Related Id(s): pr829 Add support for 192-bit keys for aes_ecb. OTP-13214 Application(s): crypto, ssl Deprecate the function crypto:rand_bytes and make sure that crypto:strong_rand_bytes is used in all places that are cryptographically significant. OTP-13483 Application(s): crypto Related Id(s): PR-998 Enable AES-GCM encryption/decryption to change the tag length between 1 to 16 bytes. Full runtime dependencies of crypto-3.7: erts-6.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- debugger-4.2 ---------------------------------------------------- --------------------------------------------------------------------- The debugger-4.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13375 Application(s): debugger When the debugger searches for source files, it will also use the location of the source in the compilation information part of the BEAM file. Full runtime dependencies of debugger-4.2: compiler-5.0, erts-6.0, kernel-3.0, stdlib-2.5, wx-1.2 --------------------------------------------------------------------- --- dialyzer-3.0 ---------------------------------------------------- --------------------------------------------------------------------- The dialyzer-3.0 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13520 Application(s): dialyzer Fix a bug in the translation of forms to types. OTP-13544 Application(s): dialyzer Related Id(s): PR-1007 Correct mispelling in Dialyzer's acronym definition. --- Improvements and New Features --- OTP-10349 Application(s): dialyzer The evaluation of SCCs in dialyzer_typesig is optimized. Maps are used instead of Dicts to further optimize the evalutation. OTP-13244 Application(s): dialyzer Since Erlang/OTP R14A, when support for parameterized modules was added, module() has included tuple(), but that part is removed; the type module() is now the same as atom(), as documented in the Reference Manual. OTP-13542 Application(s): dialyzer Related Id(s): PR-1014 *** POTENTIAL INCOMPATIBILITY *** The type specification syntax for Maps is improved: -- The association type KeyType := ValueType denotes an association that must be present. -- The shorthand ... stands for the association type any() => any(). An incompatible change is that #{} stands for the empty map. The type map() (a map of any size) can be written as #{...}. Full runtime dependencies of dialyzer-3.0: compiler-7.0, erts-8.0, hipe-3.15.1, kernel-5.0, stdlib-3.0, syntax_tools-2.0, wx-1.2 --------------------------------------------------------------------- --- diameter-1.12 --------------------------------------------------- --------------------------------------------------------------------- The diameter-1.12 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13508 Application(s): diameter Add diameter:peer_info/1. That retrieves information in the style of diameter:service_info/2, but for a single peer connection. Full runtime dependencies of diameter-1.12: erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-2.0 --------------------------------------------------------------------- --- edoc-0.7.19 ----------------------------------------------------- --------------------------------------------------------------------- The edoc-0.7.19 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13558 Application(s): edoc Handle typed record fields. Full runtime dependencies of edoc-0.7.19: erts-6.0, inets-5.10, kernel-3.0, stdlib-2.5, syntax_tools-1.6.14, xmerl-1.3.7 --------------------------------------------------------------------- --- eldap-1.2.2 ----------------------------------------------------- --------------------------------------------------------------------- The eldap-1.2.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of eldap-1.2.2: asn1-3.0, erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-2.0 --------------------------------------------------------------------- --- erl_docgen-0.4.3 ------------------------------------------------ --------------------------------------------------------------------- The erl_docgen-0.4.3 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of erl_docgen-0.4.3: edoc-0.7.13, erts-6.0, stdlib-2.5, xmerl-1.3.7 --------------------------------------------------------------------- --- erl_interface-3.9 ----------------------------------------------- --------------------------------------------------------------------- The erl_interface-3.9 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13488 Application(s): erl_interface, erts, jinterface Handle terms (pids,ports and refs) from nodes with a 'creation' value larger than 3. This is a preparation of the distribution protocol to allow OTP 19 nodes to correctly communicate with future nodes (20 or higher). The 'creation' value differentiates different incarnations of the same node (name). --------------------------------------------------------------------- --- erts-8.0 -------------------------------------------------------- --------------------------------------------------------------------- The erts-8.0 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-12593 Application(s): erts, kernel The handling of on_load functions has been improved. The major improvement is that if a code upgrade fails because the on_load function fails, the previous version of the module will now be retained. OTP-13034 Application(s): erts is_builtin(erlang, apply, 3) will now return true. OTP-13288 Application(s): erts Related Id(s): PR913 Fix enif_get_list_length to return false if list is improper or have length larger than UINT_MAX (did return true and an incorrect length value). OTP-13341 Application(s): erts Related Id(s): PR951 Cleanup hipe signal handling code for x86 and make it more portable. OTP-13411 Application(s): erts, kernel Use fsync instead of fdatasync on Mac OSX. OTP-13419 Application(s): erts Make sure to create a crash dump when running out of memory. This was accidentally removed in the erts-7.3 release. OTP-13425 Application(s): erts A bug has been fixed where if erlang was started +B on a unix platform it would be killed by a SIGUSR2 signal when creating a crash dump. OTP-13452 Application(s): erts Fix race between process_flag(trap_exit,true) and a received exit signal. A process could terminate due to exit signal even though process_flag(trap_exit,true) had returned. A very specific timing between call to process_flag/2 and exit signal from another scheduler was required for this to happen. OTP-13459 Application(s): erts, stdlib Don't search for non-existing Map keys twice For maps:get/2,3 and maps:find/2, searching for an immediate key, e.g. an atom, in a small map, the search was performed twice if the key did not exist. OTP-13474 Application(s): erts When a abnormally large distribution message is about to be sent, the VM has been changed to create a crash dump instead of a core dump. OTP-13485 Application(s): erts Related Id(s): ERL-123 Fix erlang:process_info/2 type specification OTP-13489 Application(s): erts Related Id(s): ERL-127 Fix bug in open_port/2 with option {args, List}. A vm crash could be caused by an improper List. OTP-13494 Application(s): erts Related Id(s): ERL-126 Don't crash on terminating processes with erlang:system_profile/1,2 OTP-13512 Application(s): erts Fixed bugs where the reduction counter was not handled correct. OTP-13517 Application(s): erts Fixed typo in description of the EPMD_DUMP_REQ response. OTP-13540 Application(s): erts Fixed a bug where a process flagged as sensitive would sometimes record its save_calls when it shouldn't. OTP-13562 Application(s): erts Update configure scripts to not use hardcoded path for /bin/pwd and /bin/rm. --- Improvements and New Features --- OTP-10267 Application(s): erts *** HIGHLIGHT *** *** POTENTIAL INCOMPATIBILITY *** The tracing support has been extended to allow a tracer module to be the trace event handler instead of a process or port. The tracer module makes it possible for trace tools to filter or manipulate trace event data without the trace event first haing to be copied from the traced process or port. With the introduction of this feature, erlang:trace(all|existing, _, _) now also returns the tracer process as part of the number of processes on which tracing is enabled. The is incompatible with the previous releases. OTP-10282 Application(s): erts Related Id(s): [14], kunagi-14 Introduce LTTng tracing of Erlang Runtime System For LTTng to be enabled OTP needs to be built with configure option --with-dynamic-trace=lttng. This feature introduces tracepoints for schedulers, drivers, memory carriers, memory and async thread pool. For a list of all tracepoints, see Runtime Tools User's Guide . OTP-12345 Application(s): erts, runtime_tools *** HIGHLIGHT *** Add microstate accounting Microstate accounting is a way to track which state the different threads within ERTS are in. The main usage area is to pin point performance bottlenecks by checking which states the threads are in and then from there figuring out why and where to optimize. Since checking whether microstate accounting is on or off is relatively expensive only a few of the states are enabled by default and more states can be enabled through configure. There is a convinence module called msacc that has been added to runtime_tools that can assist in gathering and interpreting the data from Microstate accounting. For more information see erlang:statistics(microstate_accounting, _) and the msacc module in runtime_tools. OTP-12573 Application(s): erts The port of Erlang/OTP to the realtime operating system OSE has been removed. OTP-12590 Application(s): erts Related Id(s): OTP-10251 Sharing preserved copy for messages and exit signals Enable sharing preserved copy with configure option --enable-sharing-preserving. This will preserve sharing, within the process, when communication with other processes in the Erlang node. There is a trade-off, the copy is more costly but this cost can be reclaimed if there is a lot of sharing in the message. With this feature enabled literals will not be copied in a send except during a purge phase of the module where the literals are located. OTP-12883 Application(s): erts Halfword BEAM has been removed. OTP-12908 Application(s): erts, kernel Added os:perf_counter/1. The perf_counter is a very very cheap and high resolution timer that can be used to timestamp system events. It does not have monoticity guarantees, but should on most OS's expose a monotonous time. OTP-13047 Application(s): erts Support for a fragmented young heap generation. That is, the young heap generation can consist of multiple non continuous memory areas. The main reason for this change is to avoid extra copying of messages that could not be allocated directly on the receivers heap. OTP-13086 Application(s): erts Erlang linked-in driver can now force the call to open_port to block until a call to erl_drv_init_ack is made inside the driver. This is useful when you want to do some asynchronous initialization, for example getting configuration from a pipe, and you want the initial open_port call to fail if the configuration is incomplete or wrong. See the erl_driver documentation for more details on the API. OTP-13087 Application(s): erts Erlang linked-in drivers can now set their own pid's as seen in erlang:port_info/1 by using the erl_drv_set_pid function. For more details see the erl_driver documentation. OTP-13088 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** The functionality behind erlang:open_port/2 when called with spawn or spawn_executable has been redone so that the forking of the new program is done in a separate process called erl_child_setup. This allows for a much more robust implementation that uses less memory and does not block the entire emulator if the program to be started is on an un-accessible NFS. Benchmarks have shown this approach to be about 3-5 times as fast as the old approach where the fork/vfork was done by erts. This is a pure stability and performance fix, however some error messages may have changed, which is why it is marked as a backwards incompatible change. OTP-13096 Application(s): erts Improved yielding strategy in the implementation of the following native functions: -- erlang:binary_to_list/1 -- erlang:binary_to_list/3 -- erlang:bitstring_to_list/1 -- erlang:list_to_binary/1 -- erlang:iolist_to_binary/1 -- erlang:list_to_bitstring/1 -- binary:list_to_bin/1 This in order to improve performance of these functions. OTP-13097 Application(s): erts All garbage collections of processes now bump reductions. Also the amount of reductions bumped when garbage collecting has been adjusted. It now better corresponds to the amount of work performed. This in order to improve the real time characteristics of the system. OTP-13111 Application(s): erts, kernel New functions that can load multiple functions at once have been added to the 'code' module. The functions are code:atomic_load/1, code:prepare_loading/1, code:finish_loading/1, and code:ensure_modules_loaded/1. OTP-13112 Application(s): erts The function erl_prim_loader:start/3 has been removed. Its documentation has also been removed. The undocumented and unsupported function erl_prim_loader:get_files/2 has been removed. OTP-13122 Application(s): erts Low level BIF erlang:purge_module/1 is made more robust against incorrect use. Lingering processes that still refer the old code are now killed before the module is purged to prevent fatal VM behavior. OTP-13123 Application(s): erts Improved dirty scheduler implementation. For more information see the NIF documentation. Note that support for determining whether dirty NIF support exist or not at compile time using the C preprocessor macro ERL_NIF_DIRTY_SCHEDULER_SUPPORT has been removed. OTP-13167 Application(s): erts Various optimizations done to process dictionary access. OTP-13174 Application(s): erts Added max_heap_size process flag. See erlang:process_flag for more details. OTP-13227 Application(s): erts Allow dynamic drivers and NIF libraries to be built with gcc option -fvisibility=hidden for faster loading and more optimized code. OTP-13265 Application(s): erts Add erlang:process_info(Pid, garbage_collection_info) which returns extended garbage_collection information. For more details see the documentation. OTP-13293 Application(s): erts The functions erlang:list_to_integer/1 and string:to_integer/1 have been optimized for large inputs. OTP-13366 Application(s): erts Related Id(s): OTP-13047 *** HIGHLIGHT *** Introduction of configurable management of data referred to by the message queue of a process. Each process can be configured individually. It is now possible to configure the message queue of a process, so that all data referred by it will be kept outside of the heap, and by this prevent this data from being part of garbage collections. For more information see the documentation of process_flag(message_queue_data, MQD). OTP-13401 Application(s): erts Processes now yield when scanning large message queues and not finding a matching message. This in order to improve real time characteristics. OTP-13440 Application(s): erts Optimized an erts internal function that is used to traverse erlang terms. The internal function was mainly used by term_to_binary and comparison of terms. Benchmarks have shown up to a 10% performance increase in those functions after the optimization. OTP-13442 Application(s): erts Add the following NIF API functions: -- enif_cpu_time -- enif_now_time -- enif_make_unique_integer -- enif_is_process_alive -- enif_is_port_alive -- enif_term_to_binary -- enif_binary_to_term -- enif_port_command for details of what each function does, see the erl_nif documentation. OTP-13487 Application(s): erts, stdlib Optimize '++' operator and lists:append/2 by using a single pass to build a new list while checking for properness. OTP-13488 Application(s): erl_interface, erts, jinterface Handle terms (pids,ports and refs) from nodes with a 'creation' value larger than 3. This is a preparation of the distribution protocol to allow OTP 19 nodes to correctly communicate with future nodes (20 or higher). The 'creation' value differentiates different incarnations of the same node (name). OTP-13493 Application(s): erts Related Id(s): PR-999 Don't send unasked for systemd notifications in epmd OTP-13495 Application(s): erts The enif_send API has been extended to allow NULL to be used as the message environment. When used this way, a message environent is implicitly created and the given term is copied into that environment before sending. This can be an optimization if many small messages are being sent by the nif. OTP-13496 Application(s): erts *** HIGHLIGHT *** *** POTENTIAL INCOMPATIBILITY *** The tracing support has been extended to allow tracing on ports. Ports can be traced on using the 'ports', 'send' and 'receive' trace flags. The first argument of erlang:trace/3 has been extended so that 'all', 'existing' and 'new' now include both processes and ports. New Tracee variants, 'all_processes', 'all_ports', 'existing_processes' etc have been added to specify only processes or ports. OTP-13497 Application(s): erts *** POTENTIAL INCOMPATIBILITY *** When the 'procs' trace flag is enabled, a 'spawned' trace event is now also generated by a newly created process. The previous event 'spawn' remains, but as it is generated by the process that did the spawn, it is not guaranteed that it is ordered with other trace events from the newly spawned process. So when tracking the lifetime of a process this new event should be used as the creation event. This new trace event is marked as an incompatabiliy because tools that expect certain trace events when enabling 'procs' will have to updated. OTP-13501 Application(s): erts Add the erlang:match_spec_test/3 function. The functions allows the testing of match specifications for both tracing and ets tables. It can be used to test that a match specification does the expected filtering on specific data. It also returns more verbose error reasons for incorrectly constructed match specifications. OTP-13503 Application(s): erts *** HIGHLIGHT *** The erts internal tracing support has been changed to have much less overhead and be more scalable. This rewrite does not break any backwards incompatabilities, but it does change the ordering of some trace messages when compared to previous releases. It should be noted that this only applies to trace messages sent to processes or ports, it does not apply to the new tracer module. However in future releases they may also be effected by this. Trace messages are only guaranteed to be ordered from one traced process or port. In previous releases this was not visible as a 'send' trace message would always arrive before the corresponding 'receive' trace message that is no longer always the case. This also means that timestamped trace messages may seem to arrive out of order as the timestamp is taken when the event is triggered and not when it is put in the queue of the tracer. OTP-13507 Application(s): erts Add possibility to filter send and receive trace with match specifications. OTP-13522 Application(s): erts, stdlib Related Id(s): PR-1025 Add maps:update_with/3,4 and maps:take/2 OTP-13532 Application(s): erts, runtime_tools *** POTENTIAL INCOMPATIBILITY *** Introduce LTTng tracing via Erlang tracing. For LTTng to be enabled OTP needs to be built with configure option --with-dynamic-trace=lttng. The dynamic trace module dyntrace is now capable to be used as a LTTng sink for Erlang tracing. For a list of all tracepoints, see Runtime Tools User's Guide . This feature also introduces an incompatible change in trace tags. The trace tags gc_start and gc_end has been split into gc_minor_start, gc_minor_end and gc_major_start, gc_major_end. OTP-13541 Application(s): erts Related Id(s): PR-1026 Print heap pointers for garbing processes during crashdump OTP-13560 Application(s): erts Changed and improved low level memory statistics returned by erlang:system_info/1. The info for erts_mmap has been moved from mseg_alloc to its own section returned by {allocator, erts_mmap}. Full runtime dependencies of erts-8.0: kernel-4.0, sasl-2.4, stdlib-2.5 --------------------------------------------------------------------- --- et-1.6 ---------------------------------------------------------- --------------------------------------------------------------------- The et-1.6 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13545 Application(s): et Update selector to utilize new garbage collection trace tags. Full runtime dependencies of et-1.6: erts-8.0, kernel-3.0, runtime_tools-1.10, stdlib-2.0, wx-1.2 --------------------------------------------------------------------- --- eunit-2.2.14 ---------------------------------------------------- --------------------------------------------------------------------- The eunit-2.2.14 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13017 Application(s): crypto, erts, eunit, snmp Small documentation fixes Full runtime dependencies of eunit-2.2.14: erts-6.0, kernel-3.0, stdlib-2.5 --------------------------------------------------------------------- --- gs-1.6.1 -------------------------------------------------------- --------------------------------------------------------------------- The gs-1.6.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of gs-1.6.1: erts-6.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- hipe-3.15.1 ----------------------------------------------------- --------------------------------------------------------------------- The hipe-3.15.1 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13407 Application(s): hipe Related Id(s): PR-984 HiPE compiler crashed, during compilation, in some cases that involved inlining of float operations on complicated control flow graphs. Full runtime dependencies of hipe-3.15.1: compiler-5.0, erts-7.1, kernel-3.0, stdlib-2.5, syntax_tools-1.6.14 --------------------------------------------------------------------- --- ic-4.4.1 -------------------------------------------------------- --------------------------------------------------------------------- The ic-4.4.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of ic-4.4.1: erts-6.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- inets-6.3 ------------------------------------------------------- --------------------------------------------------------------------- The inets-6.3 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13383 Application(s): inets Related Id(s): PR-972 Add handling of DELETE Body to http client. OTP-13445 Application(s): inets Related Id(s): PR-988 Removed references to mod_include and webtool from examples and tests. Thanks to waisbrot OTP-13561 Application(s): inets *** POTENTIAL INCOMPATIBILITY *** Remove module inets_regexp. Module re should be used instead. Full runtime dependencies of inets-6.3: erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, ssl-5.3.4, stdlib-2.0 --------------------------------------------------------------------- --- jinterface-1.7 -------------------------------------------------- --------------------------------------------------------------------- The jinterface-1.7 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13488 Application(s): erl_interface, erts, jinterface Handle terms (pids,ports and refs) from nodes with a 'creation' value larger than 3. This is a preparation of the distribution protocol to allow OTP 19 nodes to correctly communicate with future nodes (20 or higher). The 'creation' value differentiates different incarnations of the same node (name). --------------------------------------------------------------------- --- kernel-5.0 ------------------------------------------------------ --------------------------------------------------------------------- The kernel-5.0 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-12593 Application(s): erts, kernel The handling of on_load functions has been improved. The major improvement is that if a code upgrade fails because the on_load function fails, the previous version of the module will now be retained. OTP-13409 Application(s): kernel rpc:call() and rpc:block_call() would sometimes cause an exception (which was not mentioned in the documentation). This has been corrected so that {badrpc,Reason} will be returned instead. OTP-13410 Application(s): kernel On Windows, for modules that were loaded early (such as the lists module), code:which/1 would return the path with mixed slashes and backslashes, for example: "C:\\Program Files\\erl8.0/lib/stdlib-2.7/ebin/lists.beam". This has been corrected. OTP-13411 Application(s): erts, kernel Use fsync instead of fdatasync on Mac OSX. OTP-13444 Application(s): kernel The default chunk size for the fallback sendfile implementation, used on platforms that do not have a native sendfile, has been decreased in order to reduce connectivity issues. OTP-13461 Application(s): kernel Huges writes (2Gb or more) could fail on some Unix platforms (for example, OS X and FreeBSD). OTP-13470 Application(s): kernel Related Id(s): #969, Pull A bug has been fixed where the DNS resolver inet_res did not refresh its view of the contents of for example resolv.conf immediately after start and hence then failed name resolution. Reported and fix suggested by Michal Ptaszek in GitHUB pull req #949. OTP-13516 Application(s): kernel Related Id(s): PR-1008 Fix process leak from global_group. Thanks to Xuming who reported and fixed this! --- Improvements and New Features --- OTP-12908 Application(s): erts, kernel Added os:perf_counter/1. The perf_counter is a very very cheap and high resolution timer that can be used to timestamp system events. It does not have monoticity guarantees, but should on most OS's expose a monotonous time. OTP-13089 Application(s): kernel The os:cmd call has been optimized on unix platforms to be more performant as the number of schedulers increase. OTP-13111 Application(s): erts, kernel New functions that can load multiple functions at once have been added to the 'code' module. The functions are code:atomic_load/1, code:prepare_loading/1, code:finish_loading/1, and code:ensure_modules_loaded/1. OTP-13191 Application(s): kernel The code path cache feature turned out not to be very useful in practice and has been removed. If an attempt is made to enable the code path cache, there will be a warning report informing the user that the feature has been removed. OTP-13294 Application(s): kernel When an attempt is made to start a distributed Erlang node with the same name as an existing node, the error message will be much shorter and easier to read than before. Example: Protocol 'inet_tcp': the name somename@somehost seems to be in use by another Erlang node OTP-13325 Application(s): kernel The output of the default error logger is somewhat prettier and easier to read. The default error logger is used during startup of the OTP system. If the start-up fails, the output will be easier to read. OTP-13449 Application(s): kernel *** POTENTIAL INCOMPATIBILITY *** The functions rpc:safe_multi_server_call/2,3 that were deprecated in R12B have been removed. OTP-13458 Application(s): kernel Update the error reasons in dist_util, and show them in the logs if net_kernel:verbose(1) has been called. Full runtime dependencies of kernel-5.0: erts-8.0, sasl-2.6, stdlib-2.6 --------------------------------------------------------------------- --- megaco-3.18.1 --------------------------------------------------- --------------------------------------------------------------------- The megaco-3.18.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of megaco-3.18.1: asn1-3.0, debugger-4.0, erts-7.0, et-1.5, kernel-3.0, runtime_tools-1.8.14, stdlib-2.5 --------------------------------------------------------------------- --- mnesia-4.14 ----------------------------------------------------- --------------------------------------------------------------------- The mnesia-4.14 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13058 Application(s): mnesia *** HIGHLIGHT *** Added experimental external backend plugin api. This adds the possibility for the user to write other storage backends for data, for example by using shared memory or ram-cached disk storage. The plugin api may change in future versions after being battle tested. Full runtime dependencies of mnesia-4.14: erts-7.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- observer-2.2 ---------------------------------------------------- --------------------------------------------------------------------- The observer-2.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13500 Application(s): observer, runtime_tools Update dbg and ttb to work with a tracer module as tracer and tracing on ports. OTP-13555 Application(s): observer Added possibility to change update frequency and length of the graph windows. OTP-13556 Application(s): observer Improved background coloring to work with dark themes and other visual improvements. Full runtime dependencies of observer-2.2: erts-7.0, et-1.5, inets-5.10, kernel-3.0, runtime_tools-1.8.14, stdlib-2.0, wx-1.2 --------------------------------------------------------------------- --- odbc-2.11.2 ----------------------------------------------------- --------------------------------------------------------------------- The odbc-2.11.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13559 Application(s): odbc Configure enhancment for better handling program paths used in the build process Full runtime dependencies of odbc-2.11.2: erts-6.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- orber-3.8.2 ----------------------------------------------------- --------------------------------------------------------------------- The orber-3.8.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of orber-3.8.2: erts-7.0, inets-5.10, kernel-3.0, mnesia-4.12, ssl-5.3.4, stdlib-2.5 --------------------------------------------------------------------- --- os_mon-2.4.1 ---------------------------------------------------- --------------------------------------------------------------------- The os_mon-2.4.1 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13526 Application(s): os_mon Related Id(s): PR-1029 Fix type specification for cpu_sup:util/1 OTP-13548 Application(s): os_mon Related Id(s): PR-1046 Fix strict compilation on SUN/SPARC Full runtime dependencies of os_mon-2.4.1: erts-6.0, kernel-3.0, mnesia-4.12, otp_mibs-1.0.9, sasl-2.4, snmp-4.25.1, stdlib-2.0 --------------------------------------------------------------------- --- otp_mibs-1.1.1 -------------------------------------------------- --------------------------------------------------------------------- The otp_mibs-1.1.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of otp_mibs-1.1.1: erts-6.0, kernel-3.0, mnesia-4.12, snmp-4.25.1, stdlib-2.0 --------------------------------------------------------------------- --- parsetools-2.1.2 ------------------------------------------------ --------------------------------------------------------------------- The parsetools-2.1.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of parsetools-2.1.2: erts-6.0, kernel-3.0, stdlib-2.5 --------------------------------------------------------------------- --- percept-0.8.12 -------------------------------------------------- --------------------------------------------------------------------- The percept-0.8.12 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13422 Application(s): percept Remove deprecated erlang:now/0 calls Full runtime dependencies of percept-0.8.12: erts-6.0, inets-5.10, kernel-3.0, runtime_tools-1.8.14, stdlib-2.0 --------------------------------------------------------------------- --- public_key-1.2 -------------------------------------------------- --------------------------------------------------------------------- The public_key-1.2 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13408 Application(s): public_key Handle PEM encoded EC public keys Full runtime dependencies of public_key-1.2: asn1-3.0, crypto-3.3, erts-6.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- reltool-0.7.1 --------------------------------------------------- --------------------------------------------------------------------- The reltool-0.7.1 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13033 Application(s): reltool Related Id(s): OTP-12719 Modify the code as motivated by a change of the Erlang Parser (undefined is no longer automatically inserted to the type of record fields without an initializer). Full runtime dependencies of reltool-0.7.1: erts-7.0, kernel-3.0, sasl-2.4, stdlib-2.0, tools-2.6.14, wx-1.2 --------------------------------------------------------------------- --- runtime_tools-1.10 ---------------------------------------------- --------------------------------------------------------------------- The runtime_tools-1.10 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-12345 Application(s): erts, runtime_tools *** HIGHLIGHT *** Add microstate accounting Microstate accounting is a way to track which state the different threads within ERTS are in. The main usage area is to pin point performance bottlenecks by checking which states the threads are in and then from there figuring out why and where to optimize. Since checking whether microstate accounting is on or off is relatively expensive only a few of the states are enabled by default and more states can be enabled through configure. There is a convinence module called msacc that has been added to runtime_tools that can assist in gathering and interpreting the data from Microstate accounting. For more information see erlang:statistics(microstate_accounting, _) and the msacc module in runtime_tools. OTP-13500 Application(s): observer, runtime_tools Update dbg and ttb to work with a tracer module as tracer and tracing on ports. OTP-13502 Application(s): runtime_tools Updated dbg to accept the new trace options monotonic_timestamp and strict_monotonic_timestamp. OTP-13532 Application(s): erts, runtime_tools *** POTENTIAL INCOMPATIBILITY *** Introduce LTTng tracing via Erlang tracing. For LTTng to be enabled OTP needs to be built with configure option --with-dynamic-trace=lttng. The dynamic trace module dyntrace is now capable to be used as a LTTng sink for Erlang tracing. For a list of all tracepoints, see Runtime Tools User's Guide . This feature also introduces an incompatible change in trace tags. The trace tags gc_start and gc_end has been split into gc_minor_start, gc_minor_end and gc_major_start, gc_major_end. Full runtime dependencies of runtime_tools-1.10: erts-8.0, kernel-5.0, mnesia-4.12, stdlib-3.0 --------------------------------------------------------------------- --- sasl-3.0 -------------------------------------------------------- --------------------------------------------------------------------- The sasl-3.0 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13184 Application(s): sasl *** POTENTIAL INCOMPATIBILITY *** The module 'overload' is removed. Full runtime dependencies of sasl-3.0: erts-6.0, kernel-4.1, stdlib-2.8, tools-2.6.14 --------------------------------------------------------------------- --- snmp-5.2.3 ------------------------------------------------------ --------------------------------------------------------------------- The snmp-5.2.3 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of snmp-5.2.3: crypto-3.3, erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, stdlib-2.5 --------------------------------------------------------------------- --- ssh-4.3 --------------------------------------------------------- --------------------------------------------------------------------- The ssh-4.3 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13131 Application(s): ssh Some time optimization mainly in message encoding. OTP-13175 Application(s): ssh Optimized the sftp client time by setting new packet and window sizes. OTP-13267 Application(s): ssh The ssh_connection_handler module in SSH is changed and now uses the new behaviour gen_statem. The module can be used as an example of a gen_statem callback module but with a warning: This commit of ssh is just a straightforward port from gen_fsm to gen_statem with some code cleaning. Since the state machine and the state callbacks are almost unchanged the ssh module does not demonstrate the full potential of the new behaviour. The "new" state machine uses compund states. The ssh server and client state machines are quite similar but differences exist. With gen_fsm there were flags in the user data which in fact implemented "substates". Now with gen_statem those are made explicit in the state names, eg the state userauth and the binary role-flag becomes the two state names {userauth, server} and {userauth, client}. OTP-13347 Application(s): ssh Related Id(s): ERL-86 The {error, Reason} tuples returned from ssh_sftp api functions are described. OTP-13527 Application(s): ssh It is now possible to call ssh:daemon/{1,2,3} with Port=0. This makes the daemon select a free listening tcp port before opening it. To find this port number after the call, use the new function ssh:daemon_info/1. See the reference manual for details. Full runtime dependencies of ssh-4.3: crypto-3.3, erts-6.0, kernel-3.0, public_key-1.1, stdlib-3.0 --------------------------------------------------------------------- --- ssl-8.0 --------------------------------------------------------- --------------------------------------------------------------------- The ssl-8.0 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13195 Application(s): ssl *** POTENTIAL INCOMPATIBILITY *** Remove default support for DES cipher suites OTP-13214 Application(s): crypto, ssl Deprecate the function crypto:rand_bytes and make sure that crypto:strong_rand_bytes is used in all places that are cryptographically significant. OTP-13255 Application(s): ssl Better error handling of user error during TLS upgrade. ERL-69 is solved by gen_statem rewrite of ssl application. OTP-13431 Application(s): ssl Remove confusing error message when closing a distributed erlang node running over TLS OTP-13464 Application(s): ssl ssl now uses gen_statem instead of gen_fsm to implement the ssl connection process, this solves some timing issues in addtion to making the code more intuitive as the behaviour can be used cleanly instead of having a lot of workaround for shortcomings of the behaviour. Full runtime dependencies of ssl-8.0: crypto-3.3, erts-7.0, inets-5.10.7, kernel-3.0, public_key-1.0, stdlib-2.0 --------------------------------------------------------------------- --- stdlib-3.0 ------------------------------------------------------ --------------------------------------------------------------------- The stdlib-3.0 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13260 Application(s): stdlib Related Id(s): seq13002 Fix a race bug affecting dets:open_file/2. OTP-13459 Application(s): erts, stdlib Don't search for non-existing Map keys twice For maps:get/2,3 and maps:find/2, searching for an immediate key, e.g. an atom, in a small map, the search was performed twice if the key did not exist. OTP-13531 Application(s): stdlib Avoid stray corner-case math errors on Solaris, e.g. an error is thrown on undeflows in exp() and pow() when it shouldn't be. OTP-13534 Application(s): stdlib Related Id(s): ERL-135 Fix linting of map key variables Map keys cannot be unbound and then used in parallel matching. Example: #{ K := V } = #{ k := K } = M. This is illegal if 'K' is not bound. --- Improvements and New Features --- OTP-10292 Application(s): stdlib The types of The Abstract Format in the erl_parse module have been refined. OTP-11879 Application(s): stdlib *** POTENTIAL INCOMPATIBILITY *** Undocumented syntax for function specifications, -spec F/A :: Domain -> Range, has been removed (without deprecation). Using the is_subtype(V, T) syntax for constraints (in function specifications) is no longer documented, and the newer syntax V :: T should be used instead. The Erlang Parser still recognizes the is_subtype syntax, and will continue to do so for some time. OTP-12502 Application(s): stdlib Related Id(s): OTP-12501 The 'random' module has been deprecated. Use the 'rand' module instead. OTP-12719 Application(s): stdlib *** POTENTIAL INCOMPATIBILITY *** Background: In record fields with a type declaration but without an initializer, the Erlang parser inserted automatically the singleton type 'undefined' to the list of declared types, if that value was not present there. That is, the record declaration: -record(rec, {f1 :: float(), f2 = 42 :: integer(), f3 :: some_mod:some_typ()}). was translated by the parser to: -record(rec, {f1 :: float() | 'undefined', f2 = 42 :: integer(), f3 :: some_mod:some_typ() | 'undefined'}). The rationale for this was that creation of a "dummy" #rec{} record should not result in a warning from dialyzer that, for example, the implicit initialization of the #rec.f1 field violates its type declaration. Problems: This seemingly innocent action has some unforeseen consequences. For starters, there is no way for programmers to declare that e.g. only floats make sense for the f1 field of #rec{} records when there is no "obvious" default initializer for this field. (This also affects tools like PropEr that use these declarations produced by the Erlang parser to generate random instances of records for testing purposes.) It also means that dialyzer does not warn if e.g. an is_atom/1 test or something more exotic like an atom_to_list/1 call is performed on the value of the f1 field. Similarly, there is no way to extend dialyzer to warn if it finds record constructions where f1 is not initialized to some float. Last but not least, it is semantically problematic when the type of the field is an opaque type: creating a union of an opaque and a structured type is very problematic for analysis because it fundamentally breaks the opacity of the term at that point. Change: To solve these problems the parser will not automatically insert the 'undefined' value anymore; instead the user has the option to choose the places where this value makes sense (for the field) and where it does not and insert the | 'undefined' there manually. Consequences of this change: This change means that dialyzer will issue a warning for all places where records with uninitialized fields are created and those fields have a declared type that is incompatible with 'undefined' (e.g. float()). This warning can be suppressed easily by adding | 'undefined' to the type of this field. This also adds documentation that the user really intends to create records where this field is uninitialized. OTP-12861 Application(s): stdlib Remove deprecated functions in the modules erl_scan and erl_parse. OTP-13059 Application(s): compiler, stdlib *** HIGHLIGHT *** The pre-processor can now expand the ?FUNCTION_NAME and ?FUNCTION_ARITY macros. OTP-13065 Application(s): stdlib Related Id(s): PR-960 A new behaviour gen_statem has been implemented. It has been thoroughly reviewed, is stable enough to be used by at least two heavy OTP applications, and is here to stay. But depending on user feedback, we do not expect but might find it necessary to make minor not backwards compatible changes into OTP-20.0, so its state can be designated as "not quite experimental"... The gen_statem behaviour is intended to replace gen_fsm for new code. It has the same features and add some really useful: -- State code is gathered -- The state can be any term -- Events can be postponed -- Events can be self generated -- A reply can be sent from a later state -- There can be multiple sys traceable replies The callback model(s) for gen_statem differs from the one for gen_fsm, but it is still fairly easy to rewrite from gen_fsm to gen_statem. OTP-13082 Application(s): stdlib Optimize binary:split/2 and binary:split/3 with native BIF implementation. OTP-13148 Application(s): stdlib *** POTENTIAL INCOMPATIBILITY *** Background: The types of record fields have since R12B been put in a separate form by epp:parse_file(), leaving the record declaration form untyped. The separate form, however, does not follow the syntax of type declarations, and parse transforms inspecting -type() attributes need to know about the special syntax. Since the compiler stores the return value of epp:parse_file() as debug information in the abstract code chunk ("Abst" or abstract_code), tools too need to know about the special syntax, if they inspect -type() attributes in abstract code. Change: No separate type form is created by epp:parse_file(), but the type information is kept in the record fields. This means that all parse transforms and all tools inspecting -record() declarations need to recognize {typed_record_field, Field, Type}. OTP-13152 Application(s): stdlib Unsized fields of the type bytes in binary generators are now forbidden. (The other ways of writing unsized fields, such as binary, are already forbidden.) OTP-13153 Application(s): stdlib The type map() is built-in, and cannot be redefined. OTP-13229 Application(s): stdlib Related Id(s): ERL-55 Let dets:open_file() exit with a badarg message if given a raw file name (a binary). OTP-13392 Application(s): stdlib Add filename:basedir/2,3 basedir returns suitable path(s) for 'user_cache', 'user_config', 'user_data', 'user_log', 'site_config' and 'site_data'. On linux and linux like systems the paths will respect the XDG environment variables. OTP-13476 Application(s): stdlib There are new preprocessor directives -error(Term) and -warning(Term) to cause a compilation error or a compilation warning, respectively. OTP-13487 Application(s): erts, stdlib Optimize '++' operator and lists:append/2 by using a single pass to build a new list while checking for properness. OTP-13522 Application(s): erts, stdlib Related Id(s): PR-1025 Add maps:update_with/3,4 and maps:take/2 OTP-13523 Application(s): stdlib lists:join/2 has been added. Similar to string:join/2 but works with arbitrary lists. OTP-13524 Application(s): stdlib Related Id(s): PR-1002 Obfuscate asserts to make Dialyzer shut up. Full runtime dependencies of stdlib-3.0: compiler-5.0, crypto-3.3, erts-7.3, kernel-4.1, sasl-2.6 --------------------------------------------------------------------- --- syntax_tools-2.0 ------------------------------------------------ --------------------------------------------------------------------- The syntax_tools-2.0 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-12863 Application(s): syntax_tools *** POTENTIAL INCOMPATIBILITY *** The abstract data type in erl_syntax is augmented with types and function specifications. The module erl_prettypr pretty prints types and function specification, and the output can be parsed. The types of record fields are no longer ignored. As a consequence erl_syntax_lib:analyze_record_field/1 returns {Default, Type} instead of Default. The functions analyze_record_attribute, analyze_attribute, analyze_form, and analyze_forms in the erl_syntax_lib module are also affected by this incompatible change. Full runtime dependencies of syntax_tools-2.0: compiler-7.0, erts-8.0, kernel-5.0, stdlib-3.0 --------------------------------------------------------------------- --- tools-2.8.4 ----------------------------------------------------- --------------------------------------------------------------------- The tools-2.8.4 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13499 Application(s): tools Update fprof to use the new 'spawned' trace event to determine when a process has been created. Full runtime dependencies of tools-2.8.4: compiler-5.0, erts-7.0, inets-5.10, kernel-3.0, runtime_tools-1.8.14, stdlib-2.5 --------------------------------------------------------------------- --- typer-0.9.11 ---------------------------------------------------- --------------------------------------------------------------------- The typer-0.9.11 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of typer-0.9.11: compiler-5.0, dialyzer-2.7, erts-6.0, hipe-3.10.3, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- wx-1.7 ---------------------------------------------------------- --------------------------------------------------------------------- The wx-1.7 application can be applied independently of other applications on a full OTP 19 installation. --- Fixed Bugs and Malfunctions --- OTP-13491 Application(s): wx Fixed bugs which could cause called functions to be invoked twice or not at all when callbacks where invoked at the same time. --- Improvements and New Features --- OTP-13553 Application(s): wx *** POTENTIAL INCOMPATIBILITY *** Changed atom 'boolean' fields in #wxMouseState{} to 'boolean()'. Moved out arguments in wxListCtrl:hitTest to result. Removed no-op functions in wxGauge that have been removed from wxWidgets-3.1. Full runtime dependencies of wx-1.7: erts-6.0, kernel-3.0, stdlib-2.0 --------------------------------------------------------------------- --- xmerl-1.3.11 ---------------------------------------------------- --------------------------------------------------------------------- The xmerl-1.3.11 application can be applied independently of other applications on a full OTP 19 installation. --- Improvements and New Features --- OTP-13551 Application(s): asn1, cosEvent, cosEventDomain, cosFileTransfer, cosNotification, cosProperty, cosTime, cosTransactions, eldap, erl_docgen, gs, ic, megaco, orber, otp_mibs, parsetools, snmp, typer, xmerl Internal changes Full runtime dependencies of xmerl-1.3.11: erts-6.0, kernel-3.0, stdlib-2.5 --------------------------------------------------------------------- --- Thanks to ------------------------------------------------------- --------------------------------------------------------------------- Aleksei Magusev, Alexey Lebedeff, Andrew Bennett, Byaruhanga Franklin, Constantin Rack, Derek Brown, Diana Corbacho, Dmytro Lytovchenko, FabioBatSilva, Jesper Louis Andersen, John Eckersberg, José Valim, Kenneth Lakin, Kostis Sagonas, Luca Favatella, Lukas Larsson, Magnus Henoch, Magnus Lång, Michael Klishin, Michael Santos, Michal Ptaszek, Mikael Pettersson, Milton Inostroza, Nathaniel Waisbrot, Nikolaos S. Papaspyrou, Péter Gömöri, Richard Carlsson, Rico Antonio Felix, Sean Charles, Serge Aleynikov, Simon Cornish, Stavros Aronis, Stefan Strigler, Steve Vinoski, Stuart Thackray, Ulf Wiger, Vlad Dumitrescu, Yiannis Tsiouris, Yuki Ito, def_null, eksperimental, xsipewe, xuming --------------------------------------------------------------------- --------------------------------------------------------------------- ---------------------------------------------------------------------