Major relese : otp_src_R14A Build date : 2010-06-16 R14A is a major new release of Erlang/OTP. You can download the full source distribution from http://www.erlang.org/download/otp_src_R14A.tar.gz http://www.erlang.org/download/otp_src_R14A.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_R14A.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_R14A.tar.gz http://www.erlang.org/download/otp_doc_man_R14A.tar.gz We also want to thank those that sent us patches, suggestions and bug reports, The OTP Team --- HIGHLIGHTS ---------------------------------------------------------- OTP-8217 == erts stdlib compiler == The module binary from EEP31 (and EEP9) is implemented. OTP-8485 == common_test == It is now possible for the user to provide specific callback modules that handle test configuration data, so that data on arbitray form can be accessed (e.g. by reading files or by communicating with a configuration server process). Two default callback modules have been introduced in Common Test: ct_config_plain and ct_config_xml. The former is used to handle the traditional Common Test configuration files (with terms on key-value tuple form) and the latter to handle configuration data on XML representation. OTP-8555 == erts == New NIF features: Send messages from a NIF, or from thread created by NIF, to any local process (enif_send) Store terms between NIF calls (enif_alloc_env, enif_make_copy) Create binary terms with user defined memory management (enif_make_resource_binary) And some incompatible changes made to the API. For more information see the warning text in erl_nif(3). OTP-8623 == compiler erts hipe stdlib == Receive statements that can only read out a newly created reference are now specially optimized so that it will execute in constant time regardless of the number of messages in the receive queue for the process. That optimization will benefit calls to gen_server:call(). (See gen:do_call/4 for an example of a receive statement that will be optimized.) OTP-8650 == common_test == The run_test script has been replaced by a program (with the same name) which can be executed without explicit installation. The start flags are the same as for the legacy start script. OTP-8706 == erts hipe tools == eprof has been reimplemented with support in the Erlang virtual machine and is now both faster (i.e. slows down the code being measured less) and scales much better. In measurements we saw speed-ups compared to the old eprof ranging from 6 times (for sequential code that only uses one scheduler/core) up to 84 times (for parallel code that uses 8 cores). Note: The API for the eprof has been cleaned up and extended. See the documentation. --- documentation ------------------------------------------------------- OTP-8477 The guard BIF is_boolean/1 (introduced in R10B) has now been included in the lists of BIFs allowed in guards in the Reference Manual. OTP-8559 If the 'fop' program (needed for building PDF files) cannot not be found, it is now possible to build the HTML and man pages anyway (there will also be dummy PDF files with no real content created). (Thanks to Tuncer Ayaz.) --- otp ----------------------------------------------------------------- OTP-8512 The INSTALL.md, INSTALL-CROSS.md, and INSTALL-WIN32.md "readme files" are now included in both the HTML and the PDF documentation. OTP-8541 Added cross configuration file for mips-linux. (Thanks to Matthias Lang for the configuration) --- appmon-2.1.12 ------------------------------------------------------- OTP-8674 Warnings due to new autoimported BIFs removed --- asn1-1.6.14 --------------------------------------------------------- OTP-8565 By default, the ASN.1 compiler is now silent in the absence of warnings or errors. The new 'verbose' option or the '-v' option for erlc can be given to show extra information (for instance, about the files that are generated). (Thanks to Tuncer Ayaz.) --- common_test-1.5 ----------------------------------------------------- OTP-8485 It is now possible for the user to provide specific callback modules that handle test configuration data, so that data on arbitray form can be accessed (e.g. by reading files or by communicating with a configuration server process). Two default callback modules have been introduced in Common Test: ct_config_plain and ct_config_xml. The former is used to handle the traditional Common Test configuration files (with terms on key-value tuple form) and the latter to handle configuration data on XML representation. OTP-8490 It is now possible to execute test suites that are not necessarily available on the local file system, but have been loaded on the test node in advance (e.g. sent as binaries from a remote node and loaded by RPC). A requirement is that the no_auto_compile (or {auto_compile,false}) parameter has been set. OTP-8500 Test Server will now call the end_per_testcase/2 function even if the test case has been terminated explicitly (with abort_current_testcase/1), or after a timetrap timeout. Under these circumstances the return value of end_per_testcase is completely ignored. Therefore the function will not be able to change the reason for test case termination by returning {fail,Reason}, nor will it be able to save data with {save_config,Data}. OTP-8570 It is now possible to use the test specification term 'init' to start Common Test nodes automatically, as well as have initial function calls evaluated on the nodes. A default callback module for the 'init' term, ct_slave, has been introduced to enable Common Test Master to perform host login and node startup operations over ssh. OTP-8621 Process calls using monitors in Common Test would not clear the inbox of remaining DOWN messages. This has been fixed. OTP-8650 The run_test script has been replaced by a program (with the same name) which can be executed without explicit installation. The start flags are the same as for the legacy start script. OTP-8689 Previously, a repeat property of a test case group specified the number of times the group should be repeated after the main test run. I.e. {repeat,N} would case the group to execute 1+N times. To be consistent with the behaviour of the run_test repeat option, this has been changed. N now specifies the absolute number of executions instead. OTP-8690 With the run_test -erl_args option, it's possible to divide the options on the run_test command line into ones that Common Test should process (those preceding -erl_args, and ones it should ignore (those succeeding -erl_args). Options preceding -erl_args that Common Test doesn't recognize are also ignored (i.e. the same behaviour as earlier versions of Common Test). OTP-8691 Directories added with -pa or -pz in the pre-erl_args part of the run_test command line will be converted from relative to absolute, this to avoid problems loading user modules when Common Test switches working directory during the test run. OTP-8693 The timetrap handling has been made more user controllable by means of new start options and new ct interface functions. With the 'multiply_timetraps' start option, it's possible to specify a value which all timetrap timeout values get multiplied by. This is useful e.g. to extend the timetraps temporarily while running cover or trace. The 'scale_timetraps' start option switches on or off the Test Server timetrap scaling feature (which tries to detect if the tests may benefit from extended timetraps, e.g. due to running certain test tools, and performs the scaling automatically). Furthermore, the ct:timetrap/1 function has been introduced, which makes it possible to set/reset timetraps during test execution. Also, a ct:sleep/1 function is now available, which takes the timetrap parameters into account when calculating the time to suspend the process. OTP-8694 A new run_test start option, event_handler_init, has been added that takes a start argument which gets passed to the init function of the event handler. --- compiler-4.7 -------------------------------------------------------- OTP-8217 The module binary from EEP31 (and EEP9) is implemented. OTP-8552 Several problems in the inliner have been fixed. OTP-8579 Local and imported functions now override the auto-imported BIFs when the names clash. The pre R14 behaviour was that auto-imported BIFs would override local functions. To avoid that old programs change behaviour, the following will generate an error: * Doing a call without explicit module name to a local function having a name clashing with the name of an auto-imported BIF that was present (and auto-imported) before OTP R14A * Explicitly importing a function having a name clashing with the name of an autoimported BIF that was present (and autoimported) before OTP R14A * Using any form of the old compiler directive nowarn_bif_clash If the BIF was added or auto-imported in OTP R14A or later, overriding it with an import or a local function will only result in a warning, To resolve clashes, you can either use the explicit module name erlang to call the BIF, or you can remove the auto-import of that specific BIF by using the new compiler directive -compile({no_auto_import,[F/A]})., which makes all calls to the local or imported function without explicit module name pass without warnings or errors. The change makes it possible to add auto-imported BIFs without breaking or silently changing old code in the future. However some current code ingeniously utilizing the old behaviour or the nowarn_bif_clash compiler directive, might need changing to be accepted by the compiler. OTP-8584 The undocumented, unsupport, and deprecated function lists:flat_length/1 has been removed. OTP-8597 Nested records can now be accessed without parenthesis. See the Reference Manual for examples. (Thanks to YAMASHINA Hio and Tuncer Ayaz.) OTP-8602 It is now possible to suppress the warning in code such as "list_to_integer(S), ok" by assigning the ignored value "_" like this: "_ = list_to_integer(S), ok". OTP-8623 receive statements that can only read out a newly created reference are now specially optimized so that it will execute in constant time regardless of the number of messages in the receive queue for the process. That optimization will benefit calls to gen_server:call(). (See gen:do_call/4 for an example of a receive statement that will be optimized.) OTP-8668 The compiler optimizes record operations better. --- cosEvent-2.1.9 ------------------------------------------------------ OTP-8543 Test suites published. --- cosEventDomain-1.1.9 ------------------------------------------------ OTP-8543 Test suites published. --- cosNotification-1.1.14 ---------------------------------------------- OTP-8489 Added missing trailing bracket to define in hrl-file. OTP-8543 Test suites published. --- cosProperty-1.1.12 -------------------------------------------------- OTP-8543 Test suites published. --- cosTime-1.1.9 ------------------------------------------------------- OTP-8543 Test suites published. --- cosTransactions-1.2.10 ---------------------------------------------- OTP-8489 Added missing trailing bracket to define in hrl-file. OTP-8543 Test suites published. --- crypto-2.0 ---------------------------------------------------------- OTP-8333 crypto application changed to use NIFs instead of driver. OTP-8551 des_ecb_encrypt/2 and des_ecb_decrypt/2 has been added to the crypto module. The crypto:md4/1 function has been documented. OTP-8584 The undocumented, unsupport, and deprecated function lists:flat_length/1 has been removed. OTP-8700 New variants of crypto:dss_sign and crypto:dss_verify with an extra argument to control how the digest is calculated. --- debugger-3.2.3 ------------------------------------------------------ OTP-8674 Warnings due to new autoimported BIFs removed OTP-8687 The predefined builtin type tid() has been removed. Instead, ets:tid() should be used. --- dialyzer-2.3.0 ------------------------------------------------------ OTP-8699 Various changes to dialyzer-related files for R14. - Dialyzer properly supports the new attribute -export_type and checks that remote types only refer to exported types. A warning is produced if some files/applications refer to types defined in modules which are neither in the PLT nor in the analyzed applications. - Support for detecting data races involving whereis/1 and unregister/1. - More precise identification of the reason(s) why a record construction violates the types declared for its fields. - Fixed bug in the handling of the 'or' guard. - Better handling of the erlang:element/2 BIF. - Complete handling of Erlang BIFs. --- erl_interface-3.7 --------------------------------------------------- OTP-8684 compact IEEE 754 double encoding in external binary format for ei Implement the compact IEEE 754 double encoding in external binary format for ei. Encoding for ei now always produces the NEW_FLOAT_EXT format. Decoding and term printing handle both the old ERL_FLOAT_EXT encoding and the new NEW_FLOAT_EXT encoding. Legacy erl_interface code also handles the new encoding, but still produces the ERL_FLOAT_EXT encoding by default. Also enable the DFLAG_NEW_FLOATS distribution flag. ei_get_type() will return ERL_FLOAT_EXT regardless if the external format is encoded with ERL_FLOAT_EXT or NEW_FLOAT_EXT for doubles. Reduce the number of copies of the code for encoding and decoding doubles throughout ei and erl_interface by instead calling the ei encoding and decoding functions wherever possible. Restore commented-out float tests in ei_decode_SUITE and ei_encode_SUITE in lib/erl_interface/test. Modify them to make them match the style of other tests in the same suites. These changes are based on an ei float patch from Serge Aleynikov originally submitted against R12B-2 in July 2008 and reworked by Steve Vinoski May 2010. --- erts-5.7.5.1 -------------------------------------------------------- OTP-8475 Driver threads, such as async threads, using port data locks peeked at the port status field without proper locking when looking up the driver queue. OTP-8487 A call to the BIF unregister(RegName) when a port had the name RegName registered in the runtime system without SMP support caused a runtime system crash. (Thanks to Per Hedeland for the bugfix and test case.) OTP-8591 Fix memory management bug causing crash of non-SMP emulator with async threads enabled. The bug did first appear in R13B03. --- erts-5.8 ------------------------------------------------------------ OTP-8086 The grammar for match specifications in ERTS users guide only described the tracing dialect of match specifications. An informal grammar for the ETS dialect is added. OTP-8217 The module binary from EEP31 (and EEP9) is implemented. OTP-8474 New NIF API function enif_make_new_binary OTP-8477 The guard BIF is_boolean/1 (introduced in R10B) has now been included in the lists of BIFs allowed in guards in the Reference Manual. OTP-8484 The use of mmap() was unnecessarily disabled when cross compiling. The configure arguments --with-ssl, and --with-odbc refused to accept libraries outside of $erl_xcomp_sysroot when cross compiling for no good reason. The configure argument --with-odbc didn't handle the value yes correct. The configure arguments --with-odbc, and --without-odbc have also been added to the configure help. (Thanks to Steve Vinoski for reporting these issues) OTP-8521 Added function zip:foldl/3 to iterate over zip archives. Added functions to create and extract escripts. See escript:create/2 and escript:extract/2. The undocumented function escript:foldl/3 has been removed. The same functionality can be achieved with the more flexible functions escript:extract/2 and zip:foldl/3. Record fields has been annotated with type info. Source files as been adapted to fit within 80 chars and trailing whitespace has been removed. OTP-8539 A regular expression with many levels of parenthesis could cause a buffer overflow. That has been corrected. (Thanks to Michael Santos.) OTP-8548 erlang:decode_packet(httph_bin,..) could return corrupt header strings or even crash the VM. This has been fixed. It only happened on 32-bit VM if the header name was unknown and between 16 and 20 characters long. Sockets with simular packet option did not suffer from this bug. OTP-8549 The runtime system crashed if fewer logical processors were found than reported by sysconf( SC_NPROCESSORS_CONF). OTP-8555 New NIF features: Send messages from a NIF, or from thread created by NIF, to any local process (enif_send) Store terms between NIF calls (enif_alloc_env, enif_make_copy) Create binary terms with user defined memory management (enif_make_resource_binary) And some incompatible changes made to the API. For more information see the warning text in erl_nif(3). OTP-8559 If the 'fop' program (needed for building PDF files) cannot not be found, it is now possible to build the HTML and man pages anyway (there will also be dummy PDF files with no real content created). (Thanks to Tuncer Ayaz.) OTP-8562 When defining macros the closing right parenthesis before the dot is now mandatory. OTP-8579 Local and imported functions now override the auto-imported BIFs when the names clash. The pre R14 behaviour was that auto-imported BIFs would override local functions. To avoid that old programs change behaviour, the following will generate an error: Doing a call without explicit module name to a local function having a name clashing with the name of an auto-imported BIF that was present (and auto-imported) before OTP R14A Explicitly importing a function having a name clashing with the name of an autoimported BIF that was present (and autoimported) before OTP R14A Using any form of the old compiler directive nowarn_bif_clash If the BIF was added or auto-imported in OTP R14A or later, overriding it with an import or a local function will only result in a warning, To resolve clashes, you can either use the explicit module name erlang to call the BIF, or you can remove the auto-import of that specific BIF by using the new compiler directive -compile({no_auto_import,[F/A]})., which makes all calls to the local or imported function without explicit module name pass without warnings or errors. The change makes it possible to add auto-imported BIFs without breaking or silently changing old code in the future. However some current code ingeniously utilizing the old behaviour or the nowarn_bif_clash compiler directive, might need changing to be accepted by the compiler. OTP-8589 A bug in re that could cause certain regular expression matches never to terminate is corrected. (Thanks to Michael Santos and Gordon Guthrie.) OTP-8612 Port locks could be prematurely destroyed. OTP-8614 The erlang:open_port spawn and spawn_executable directives can include an {env,Env} directive to set up environment variables for the spawned process. A bug prevented applications from using {env,Env} to set an environment variable whose value ended with a '=' (equal sign) character; the trailing equal sign was mistaken as an indication that an environment variable was to be cleared from the environment of the spawned process. (Thanks to Steve Vinoski.) OTP-8618 The empd program could loop and consume 100% CPU time if an unexpected error ocurred in listen() or accept(). Now epmd will terminate if a non-recoverable error occurs. (Thanks to Michael Santos.) OTP-8623 receive statements that can only read out a newly created reference are now specially optimized so that it will execute in constant time regardless of the number of messages in the receive queue for the process. That optimization will benefit calls to gen_server:call(). (See gen:do_call/4 for an example of a receive statement that will be optimized.) OTP-8632 When kernel poll has been enabled, a livelock could in rare circumstances occur. Problem reported by Chetan Ahuja, fix by Mikael Pettersson. OTP-8637 The functions file:advise/4 and file:datasync/1 have been added. (Thanks to Filipe David Manana.) OTP-8640 New NIF API functions: enif_make_atom_len, enif_make_existing_atom_len, enif_make_string_len, enif_get_atom_length, enif_get_list_length, enif_is_list, enif_is_tuple (by Tuncer Ayaz) OTP-8641 Windows: Closing port of program that stalled without reading all data could deadlock scheduler thread. OTP-8654 On some combination of Montavista Linux on Cavium Octeon processors, some socket-related system calls returned other numbers than -1 for errors. This caused a core dump in inet_drv.c. Now the code works around this problem. OTP-8658 Missing memory barriers in erts_poll() could cause the runtime system to hang indefinitely. OTP-8659 Support for using gcc's built-in functions for atomic memory access has been added. This functionallity will be used if available and no other native atomic implementation in ERTS is available. OTP-8660 The number of spinlocks used when implementing atomic fall-backs when no native atomic implementation is available has been increased from 16 to 1024. OTP-8661 Writer preferred pthread read/write locks has been enabled on Linux. OTP-8662 ethr_rwmutex_tryrlock() acquired and refused to acquire a lock with inverted logic. The lock was however never acquired in a thread unsafe manner. (Thanks to JR Zhang for noting this issue) OTP-8663 Extreme combinations of register/unregister in a highly parallell SMP application could crash the VM. The error is corrected. OTP-8666 The runtime system will by default bind schedulers to logical processors using the default_bind bind type if the amount of schedulers are at least equal to the amount of logical processors configured, binding of schedulers is supported, and a CPU topology is available at startup. NOTE: If the Erlang runtime system is the only operating system process that binds threads to logical processors, this improves the performance of the runtime system. However, if other operating system processes (as for example another Erlang runtime system) also bind threads to logical processors, there might be a performance penalty instead. If this is the case you, are are advised to unbind the schedulers using the +sbtu command line argument, or by invoking erlang:system_flag(scheduler_bind_type, unbound). OTP-8667 On Windows, files are now opened with FILE_SHARE_DELETE to get closer to Unix semantics. OTP-8669 The recently added BIFs erlang:min/2, erlang:max/2 and erlang:port_command/3 are now auto-imported (as they were originally intended to be). Due to the recent compiler change (OTP-8579), the only impact on old code defining it's own min/2, max/2 or port_command/3 functions will be a warning, the local functions will still be used. The warning can be removed by using -compile({no_auto_import,[min/2,max/2,port_command/3]}). in the source file. OTP-8670 There is a new option 'exclusive' to file:open/2 that uses the OS O_EXCL flag where supported to open the file in exclusive mode. OTP-8671 Now, binary_to_term/2 is auto-imported. This will cause a compile warning if and only if a module has got a local function with that name. OTP-8673 Alignment of scheduler data and run queues were adjusted. OTP-8675 erlang:system_info(multi_scheduling) sometimes erroneously returned enabled when it should have returned blocked. OTP-8677 Call time breakpoint tracing Introduce a call_time option to erlang:trace_pattern/3.This option enables call time breakpoint tracing on code that is executed by processes with call tracing enabled. Call time tracing stores the number of calls and the time spent of each function with this trace pattern enabled. The information can be retrieved with erlang:trace_info/2 Add a scheduler array for BpData. To solve the issue of multiple schedulers constantly updating the head pointer to the bp data wheel, each scheduler now has its own entrypoint to the wheel. This head pointer can be updated without a locking being taken. Teach call count tracing to use atomics Call count previously used a global lock for accessing and writing its counter in the breakpoint. This is now changed to atomics instead. The change will let call count tracing and cprof to scale better when increasing the number of schedulers. OTP-8685 Fix bug causing erlang:decode_packet and enif_make_string to generate faulty strings with negative character values for ascii values larger than 127. (Thanks to Paul Guyot) OTP-8701 open_port/2 with the spawn and spawn_executable options can include an {env,Env} option. In some cases unsetting variables would not work on Unix (typically if more variables were unset than were actually present in the environment). OTP-8706 eprof has been reimplemented with support in the Erlang virtual machine and is now both faster (i.e. slows down the code being measured less) and scales much better. In measurements we saw speed-ups compared to the old eprof ranging from 6 times (for sequential code that only uses one scheduler/core) up to 84 times (for parallel code that uses 8 cores). Note: The API for the eprof has been cleaned up and extended. See the documentation. --- gs-1.5.12 ----------------------------------------------------------- OTP-8674 Warnings due to new autoimported BIFs removed --- hipe-3.7.6 ---------------------------------------------------------- OTP-8623 receive statements that can only read out a newly created reference are now specially optimized so that it will execute in constant time regardless of the number of messages in the receive queue for the process. That optimization will benefit calls to gen_server:call(). (See gen:do_call/4 for an example of a receive statement that will be optimized.) OTP-8699 Various changes to dialyzer-related files for R14. - Dialyzer properly supports the new attribute -export_type and checks that remote types only refer to exported types. A warning is produced if some files/applications refer to types defined in modules which are neither in the PLT nor in the analyzed applications. - Support for detecting data races involving whereis/1 and unregister/1. - More precise identification of the reason(s) why a record construction violates the types declared for its fields. - Fixed bug in the handling of the 'or' guard. - Better handling of the erlang:element/2 BIF. - Complete handling of Erlang BIFs. OTP-8706 eprof has been reimplemented with support in the Erlang virtual machine and is now both faster (i.e. slows down the code being measured less) and scales much better. In measurements we saw speed-ups compared to the old eprof ranging from 6 times (for sequential code that only uses one scheduler/core) up to 84 times (for parallel code that uses 8 cores). Note: The API for the eprof has been cleaned up and extended. See the documentation. --- ic-4.2.25 ----------------------------------------------------------- OTP-8639 The documentation can now be built and installed without Java. --- inets-5.3.1 --------------------------------------------------------- OTP-8508 [httpc] Badly formated error reason for errors occuring during initial connec to a servert. Also, the possible error reasons was not properly documented. OTP-8509 [httpd] Issues with ESI erl_script_timeout.
*) The "erl_script_timeout" config option is ducumented as a number of seconds. But when parsing the config, in the new format (not a config file), it was handled as if in number of milliseconds. *) When the erl-script-timeout time was exceeded, the server incorrectly marked the answer as sent, thereby leaving client hanging (with an incomplete answer). This has been changed, so that now the socket will be closed. --- inets-5.3.2 --------------------------------------------------------- OTP-8542 [httpc] Memory leak plugged. The profile manager never cleaned up in its handler database. This meant that with each new request handler, another entry was created that was never deleted. Eventually the request id counter (used as a key) would wrap, but the machine would most likely run out of memory before that happened. OTP-8607 [httpc] https requests with default port not handled properly. Jebu Ittiachen. --- inets-5.3.3 --------------------------------------------------------- OTP-8609 [httpc] Made cookie handling more case insensitive. OTP-8610 [httpc|httpd] Some netscape cookie dates are given with a 2-digit year (e.g. 06 = 2006). OTP-8624 [httpd] Added support (again) for the documented debugging features. See the User's Guide Configuration chapter for more info. --- inets-5.4 ----------------------------------------------------------- OTP-7907 [httpc|httpd] - Now allow the use of the "new" ssl, by using the essl tag instead. See the http_option option in the httpc:request/4,5 or the socket-type section of the Communication properties chapter for more info. OTP-8564 Deprecated functions designated to be removed in R14 has been removed. Also, some new functions has been marked as deprecated (the old http client api module). OTP-8573 [httpd] Improved mod_alias. Now able to do better URL rewrites. --- kernel-2.13.5.1 ----------------------------------------------------- OTP-8502 A race condition inUse an infinity timeout in all calls to
Use an infinity timeout in all calls to