%CopyrightBegin% Copyright Ericsson AB 1996-2016. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. %CopyrightEnd% ============================================================================= Release Notes Erlang 4.3.1, Stockholm, October 1995 This is a maintenance release correcting some minor problems in the 4.3 release. The changes are mostly related to problems when using Erlang in an distributed environment. For features and incompatibilities look in the following description of the 4.3 release. -- If you already have the 4.3 release and run in an distributed environment you should change all nodes to 4.3.1 since some changes could (at least potentially) create problems/incompatibilities. (You ought to change anyway due to bugs fixed...). ============================================================================= Release Notes Erlang 4.3, Stockholm, June 1995 This is a list of the changes, fixes, and enhancements which have occurred between the Erlang 4.2 release of March 1994, and the Erlang 4.3 release of June 1995. There is also information on problems reported for 4.2 that still remain in release 4.3. For a more detailed description of new or changed functions, please refer to the respective manual pages, which are referred to as man-page(3) or man-page(1). Erlang release 4.3 is basically the same system as release 4.2. A large number of improvements and enhancements have, however, occurred. The 4.3 system is largely source code compatible with the 4.2 system, but there is a number of incompatibilities. *** Major Improvements ------------------------------------------------------------------ -- The system is considerably faster and smaller. A fully networked system now requires less than a Megabyte of memory to start. -- The system has built-in hashlists which makes it possible to store,search and manipulate very large quantities of data, see ets(3). -- Bignums, integers can now be arbitrarily large (almost) -- A fully integrated debugger/interpreter that can be used to debug distributed applications, see int(3), and the user manual. -- Distributed Erlang can now be run in environments where DNS (The Domain Name system) is not configured, see dist_erl(1). -- A new trace/3 BIF which can be used for a variety of purposes, see erlang(3). *** Minor improvements and new modules. --------------------------------------------------------------------- -- A new BIF to monitor other nodes, monitor_node/2, see erlang(3). -- Floating point exceptions and bad parameters to math functions are now handled correctly, (possibly not implemented on all architectures) -- epmd can be used to access DNS, see epmd(3). -- Erlang now contains MACROS, include files, structures, etc. These are currently not documented, and are used at the user's own risk, as the syntax might change. -- The configuration of the Erlang system has been simplified. Not many users are aware of this possibility at all, however. The only parameter left for configuration is now the size of TMP_BUF, so no upper limits remain for the number of functions, modules, etc. -- Parallel make, see make(3). -- generic.erl, is recommended for writing servers, see generic(3). -- timer.erl a new module to be used for various types of timing related activities. -- The new formatter ~p has been introduced into the formatting routines. io:format("String ~p", [Term]). will print the term Term with any lists of integers that seem to be strings as strings. This means that the majority of printouts will now have a more attractive appearance. However, it also means that some lists of integers that are real "lists of integers" will be displayed as strings. Example: 1> [65,66]. "AB" -- Deep lists can now be sent to ports. The lists must be well formed but can contain integers and binaries. -- There is a new interface to udp/ip, see udp(3). -- slave.erl is a new and nicer way to start up slave nodes in a UNIX environment. -- ddd.erl is a distributed fully replicated data dictionary. -- queue.erl FIFO queues as an abstract datatype. -- There are enhancements in the socket interface, see socket(3). -- rpc.erl is a new module that now contains some of the functions that used to be in net.erl, which has now been removed, see rpc(3). -- lists.erl contains some new functionality, see lists(3). -- BIF erlang:now() returns the current time. This BIF is guaranteed to produce continuously increasing values. -- The new module auth.erl is for handling authentication, see auth(3). -- The file $HOME/.erlang.cookie is now automatically and silently created if it does not exist. This means that new and/or naive users can ignore the issues of cookies entirely. -- user.erl has been slightly rewritten so that Erlang programs can now be part of a UNIX pipe, see erl(3), io(3). -- The new library directory tools now contain various "tools" *** Command line flags changes. ------------------------------------------------------------------- -- The -s and -h flags take values measured in H_GRAIN and S_GRAIN H_GRAIN == S_GRAIN == 64. (Default is 1, which means that the default heap and stack size is 64 words.) -- The maximum size of the atom_table is now configurable from the command line. -- erl -sname Name starts a new node with a short name. (s == short), see erl(1). -- The breakhandler can now be turned off with the aid of the flag +B. -- init.erl has been rewritten. A -load flag is now accepted, see init(3). -- The -cookie flag is no longer necessary if the system is to read the $HOME/.erlang.cookie file. This is the default. -- The flag -env Variable Value extends the UNIX environment for the Erlang system, see erl(3). *** Reported Fixed Bugs and Malfunctions ------------------------------------------------------------------- -- Do not assume that the first two directory entries "." and ".." make file:list_dir() work better in some environments. -- Faster/better garbage collection. -- Stack sizes are automatically shrunk. -- Distributed Erlang now handles the case when for example the Ethernet plug is unplugged. Erlang continuously polls all remote nodes to ensure that the remote nodes are really alive. -- A bug has been corrected in the terminal driver. The system could fail after a large series of printouts without any newlines "\n" at all. -- Formating of floats: a '9' would sometimes become a ':'. -- Formating with the use of '*' and negativ size fields now work as expected. -- The format of the 'EXIT' values is now ALWAYS the same regardless of where the 'EXIT' was produced. -- Bugs in exit/2 when the first argument is a port and second argument is a tuple, have been fixed. -- A bug in the random generator has been fixed, see random(3)) -- Object code can now be 'trace' compiled by passing the flag 'trace' to the compiler. This is necessary for the trace/3 BIF to work on function calls. -- error_logger has been improved and is more flexible, see error_logger(3). -- The compiler is not so verbose any more. -- A bug in the loading of code has been fixed. It is now possible to load code into the "hole" created by erlang:delete_module/1. -- The file system now accepts very large messages. In 4.2 there was a limit of 64K, which meant that some VERY large modules could not be compiled. -- Support for real interrupts/signals in linked-in drivers have been added. -- open_port does not make new atoms all the time. -- statistics(io) does now return two counters, one for all input and one for all output. -- There have been minor bug fixes in the erl_interface c-library. *** New TOOLS for Software Development/Tuning/Debugging --------------------------------------------------------------- -- int, is a fully integrated debugger/interpreter, see int(3). -- eprof, is a (tty-based) tool for real-time profiling, see eprof(3). -- dbg, is a (tty-based) interface to the the trace/3 BIF, see dbg(3). -- pman, is a (pxw-based) interface to the trace/3 BIF. -- emseq, is a (tty-based) message sequence chart tool. (Not documented) -- perfmon, is a (pxw-based) performance monitor. (Not documented) -- exref, is a (tty-based) cross-reference tool. *** New Targets Not Generally Available for 4.2 ------------------------------------------------------------------ FreeBSD running on PCs LINUX running on PCs QNX *** Incompatibilities with 4.2. -------------------------------------------------------------------- -- The BIF node_link/1 has been replace by monitor_node/2 See erlang(3). -- The 4.3 system is not object code compatible with 4.2. This means that all source code has to be recompiled. It is not possible to load 4.2 object code. It is also not possible to run distribution between 4.3 and erlier versions due to the new alive check. -- The external term format has been changed. This will only affect programs where the BIF term_to_binary/1 has been used for writing output on files. The directory misc/external contains a program ext42_to_ext43.erl that can be used for converting files and binaries from 4.2 format to 4.3 format. This will affect very few programs. -- The names of the Erlang specific i/o modules are now prefixed by "erl_", for example erl_scan and erl_parse. -- The calls to tokenize/parse have been changed, partially to make their naming more systematic and also to handle the new line number information. Their return values have also been made more regular with all functions returning 'ok', {ok, Value} or {ok, Value, EndLine} where appropriate when successful, and {error, ErrorInfo} or {error, ErrorInfo, EndLine} if there is an error. -- There is a standardised error information format, ErrorInfo above, which is returned for all input functions. It has the format: {ErrorLine, Module, ErrorDescriptor} where a string describing the error can be obtained by calling apply(Module, format_error, [ErrorDescriptor]). The handling of line number is application specific. -- The function io:read/1/2 now returns {ok, Term} or {error, ErrorInfo} for consistency. -- The Erlang tokeniser/parser has been converted to return line number information in the token and parse formats. These formats can now be handled by the pretty printer (erl_pp) but it does not make use of them. -- The function file:open/2 now returns {ok, Pid} or {error, What}. This is consistent with the return values from the rest of the i/o system. -- RTFMP! (Read The Friendly Man Pages) -- Module net.erl has been removed. The functionality of net.erl now resides in the rpc, auth and net_kernel modules. -- The old debug BIFs (including the module debugger.erl) have been removed. The BIF trace/3 replaces it. -- The BIF not_alive/0 has been removed. *** Documentation: -------------- All manual pages have been updated, some of them substantially. *** Known problems: --------------- The $HOME/.erlang file should be run before the shell is started. The Postscript documentation in the doc directory assumes A4 paper. list_to_pid/1 on remote pids may behave in an unexpected manner.