Potential Incompatibilities
ERL_INTERFACE
ERL_INTERFACE has been moved out of the Erlang runtime system
(Erts) and is now a separate application. This has implications
for all users of Erl-interface, who will need to make changes to
the Makefiles used to build applications based on Erl-interface.
In particular, header and library files are no longer in
<inst-root>/usr/. The include and lib directories are now
located in the directory <inst-root>/lib/erl_interface-3.X
(i.e. the directory name is now version specific).
IC
-
The IDL specifications must be regenerated for C due to changes in the
code generation.
-
The CORBA_Environment structure has now two new fields, the buffers for
in/output must now be dynamically allocated.
-
One must regenerate IDL specifications for Erlang CORBA if there are constants
in the specification due to previous errors in the IFR registration functions
(OTP-2856).
-
Changes in C-generation on enumerant values.
-
Included structures inside a struct are no longer pointers.
-
Interface change on the C-backends
In order to be CORBA 2.0 compatible, the new version generates fully
incompatible C code.
Inets
-
The API to the mod_auth module has got a new API. Read the documentation
for details.
Own Id: OTP-3007
Aux Id: OTP-2875
Kernel
-
The error returns from the functions in the rpc module were not
consistent: if {badrpc, {'EXIT', Reason}} was reported for remote
nodes, only {badrpc, Reason} was reported for the local node.
Now, {badrpc, {'EXIT', Reason}} is reported in both cases.
Own Id: OTP-3007
Aux Id: OTP-2875
-
A new status value exiting for processes will be introduced:
process_info(pid(), status) -> runnable | waiting | running
| suspended | exiting | undefined
where undefined means that the process does not exist, and exiting means
that the process is a zombie (almost dead). A process is considered alive
if the status is neither exiting nor undefined. For testing aliveness a
new BIF is introduced:
is_process_alive(pid()) -> true | false
The change in process_info(Pid, status) breaks code where it is used
for checking process aliveness. Such code is however never reliable.
Mesh
If the SNMP adaptation shall be used, measurement types and measurement
objects shall be identified using atoms, and thresholds using an integer.
Mnemosyne
Some incorrect queries are detected in Erlang compile time rather then
during setup / execution in runtime.
The negation operator, not, that was present in earlier versions
has been removed. The main reason is that the semantics is unclear in many
cases, and almost all questions have no need for a negation. The typical
use of negation was something like the following code fragment:
query [ X ||
X <- table (employee),
not X <- rule (chiefs) ] end
Here, the query variable, X, is first bound and then a negation
is applied. Usages such as these can often be rewritten by first evaluating
the negation in a separate query and then the rest of the query. Asuming
the query is evaluated using
eval the above could be written:
NegQ = query [ X || X <- rule (chiefs) ] end,
NegAns = mnemosyne:eval (NegQ),
Q = query [ X || X <- table(tab),
not lists:member (X, NegAns) ],
Ans = mnemosyne:eval (Q)
Note that the not used above is Erlangs own not, not the (old) mnemosyne
not.
Also note that the above code is not less efficient then the previous
versions (that used not) since the whole negation has to be evaluated.
Mnesia
Mnesia must be restarted on all nodes in order to cope with the following
changes:
-
The internal process architecture has been changed.
-
The message protocol between nodes has been changed.
-
The schema representation has been changed.
Orber
-
IIOP 1.1 is now default protocol version but orber can be configured to
run 1.0.
-
The omg.org prefix which all standard IDL specification must have has been
added. This means that CosEvent and CosNaming now have new type names for
all their definitions.
SNMP
-
The OTP-SNMPEA-MIB is not used anymore. The functionality is provided by
standard MIBs.
-
The handling of data in the configuration files vs. data in the actual
tables is reworked and made consistent. This means that data changed by
a manager survives a reboot, if the manager so wishes (by using the StorageType
columns in the tables). There is a new configuration parameter,
force_config_load
which can be set to true to get the old behaviour, i.e. that the
configuration files are always read at startup.
-
The configuration files address.conf,
view.conf and trap_dest.conf
are not used anymore. The formats of agent.conf and
community.conf
have changed. context.conf,
usm.conf and vacm.conf
are new files. If the agent is started with the old files, it will convert
them to the new files. Note however, that all information is not available
in the old files. Thus, it is recommended to check the configuration files
manually, or re-generate them using
snmp:config/0.
-
The module snmp_mpc has changed name to
snmp_mpd, and
it is now documented. It should be called only from a net if process.
Stdlib
-
For consistency, lists:seq(N,N,0) now returns
[N] instead
of giving an error.
Own Id: OTP-2613
-
The result of 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).
Own Id: OTP-3012
-
The 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.
Own Id: OTP-3074