erl -name foo
),
then slave:start/1
on a nonexistent host exits
instead of returning an error tuple.
c:c(File, Options)
is used with options such
that an intermediate file is produced instead of an
object file (e.g., 'S'), it still tries to load an object
file (which will be the old one, if one exists). This
could lead to confusion.
ets
module can crash Erlang or block it for
a long time, e.g., ets:match(Table, '$123456789')
.
gen_server
,
gen_event
or gen_fsm
was compiled, warnings
were given for
absent call-back functions, except for code_change
.
Now, a warning is given for absent code_change
as
well.
queue:to_list/1
didn't work properly. Now, it returns the elements of
the queue, the oldest first in the list.
append
was used to create the list of all modules and
this is very inefficient. This has now been corrected:
1) code:all_loaded
no longer uses append. 2) append
and
all other BIFs can no longer consume unlimited amounts of
memory before a garbage collection occurs.
erl_parse:abstract/1
crashed when given terms such
as [4|5]
.
erl_id_trans
didn't handle unary operators
before numeric literals, or the Mnemosyne query
expression.
erl_scan:string/[1,2]
handled comments incorrectly.
ets:match_object/2
is made faster by removing a
receive after 1
and letting the internal BIF
db_match_object decide
if the current process should be rescheduled.
dets
is
made more efficient. In the previous version of dets
the dets:close/1
could take several hours in the worst
case because of computation which tried to combine the
freelist. This is now corrected and the new version has
significantly better performance in dets:open_file and
dets:close while having the same or marginally
worse performance on dets:delete. The time it takes
to open or close a dets file is now always short (at the seconds
level at worst , in the most cases much faster).
erl_pp:form/[1,2]
now format upper-case record
names correctly; previously the necessary quoting was left
out. This affected for example the tools cover
and coast
.
-include_lib
didn't
contain a '/', the compilation/preprocessing crashed,
instead of giving a proper error message.
erl_lint:is_guard_test/1
did not accept
floating-point literals. This caused execution using
erl_eval
(for example in the shell) to behave
incorrectly when floating-point literals occurred in guards.
verbose
option. Tww new functions, erl_tar:t/1 and erl_tar:tt/2,
prints the members of the tar file instead of returning them.
The tt/1
function simply prints the name of each member
(like 'tar t'), while tt/2
prints more information
similar to 'tar tv'.
lists:seq(N,N,0)
now returns
[N]
instead of giving an error.
c:m(Module)
contains a tuple
{time, Time}
which represents the date and time of
compilation
of the module. Previously, the time was in the local timezone
of the compilation. Since there is no record of what that
timezone was, the time information was unreliable, and
has been changed to always be in GMT (if the underlying
system supports it - in other words, what
erlang:universaltime/0
returns).
export_all
compilation option no longer produces one
warning for each function defined in a module; it produces
one single warning (since export_all
shouldn't be used
in production code).
The variables used in the matching functions in the
ets
module are not
restricted to '$0' to '$9' anymore.
Own Id: OTP-3063
gen_server:call
now uses the new BIF monitor/2
which
makes it possible to monitor the death of processes. This
makes the call safer and the feedback to the
caller will be immediate if the serving process has died
or dies when it services the call. Previously the only
way to prevent a hanging here was to use the Timeout
argument
to the call function. A potential incompability is that the
gen_server:call
and comparable functions in the
gen_event
and gen_fsm
modules now can exit
with another reason than timeout
when the server has
terminated its execution. The new reason is noproc
.
$
" to produce a space.
These constructions are still legal, but will produce
warnings in future releases, and at some point may be
removed from the language.
Instead, use: 1) character constant syntax; 2) the
escape code "\n"; 3) the character constant
"$\s".