 
 %CopyrightBegin%

 SPDX-License-Identifier: Apache-2.0

 Copyright Ericsson AB 1996-2025. 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.

-- Formatting of floats: a '9' would sometimes become a ':'.

-- Formatting with the use of '*' and negative 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 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 earlier 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.
