1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
|
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE chapter SYSTEM "chapter.dtd">
<chapter>
<header>
<copyright>
<year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
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.
</legalnotice>
<title>ERTS Release Notes History</title>
<prepared>otp_appnotes</prepared>
<docno>nil</docno>
<date>nil</date>
<rev>nil</rev>
<file>notes_history.xml</file>
</header>
<section>
<title>ERTS 5.4</title>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
<p>The BIF <c><![CDATA[is_record(Record,RecordTag)]]></c> has been added to
the run-time system. It checks that <c><![CDATA[Record]]></c> is a tuple
whose first element is the atom <c><![CDATA[RecordTag.]]></c> No check
is made of the size of the tuple (because the run-time
system doesn't know anything about records).</p>
<p>Note that normally the compiler translates calls to
<c><![CDATA[is_record/2]]></c> to code that also verify the size of the
tuple, in addition to verifying the first element. The
BIF version will be used <c><![CDATA[is_record/2]]></c> is applied or
if the second argument is not a literal atom (e.g. a
variable or another term type, in which case the BIF will
generate a <c><![CDATA[badarg]]></c> exception).</p>
<p>Own Id: OTP-4812</p>
</item>
<item>
<p>Guards of mach specifications are corrected to resemble
the semantics of guards in real code more closely. The
implementation now corresponds to the documentation in
ERTS User's Guide. The following things are corrected:</p>
<list type="bulleted">
<item>Guard semantics was wrong when it came to logical
operators and exceptions.
<c><![CDATA[{'or',{'is_integer','$1'},{'or','$1','$1'}}]]></c>
evaluated to <c><![CDATA[true]]></c> with <c><![CDATA['$1']]></c> bound to an
integer.</item>
<item>Unary + and - was not implemented.</item>
<item>Calling operators as Bif's was not supported by
<c><![CDATA[ets/dbg:fun2ms]]></c> (<c><![CDATA[erlang:'or'(A,B)]]></c> etc).</item>
<item>Old typetests (like <c><![CDATA[integer(X)]]></c> instead of
<c><![CDATA[is_integer(X))]]></c> was not supported by
<c><![CDATA[ets/dbg:fun2ms]]></c>.</item>
<item>Semicolon (;) in guards was not supported by
<c><![CDATA[ets/dbg:fun2ms]]></c>.</item>
</list>
<p>*** POTENTIAL INCOMPATIBILITY ***</p>
<p>Own Id: OTP-4927</p>
</item>
<item>
<p>A potential initialization failure when using threads and
elib_malloc has been removed.</p>
<p>Own Id: OTP-5125</p>
</item>
<item>
<p>Several problems in the 64-bit emulator has been
corrected. For instance, the emulator could crash while
running the Debugger.</p>
<p>Own Id: OTP-5146</p>
</item>
<item>
<p>The match spec parse transform <c><![CDATA[ms_transform]]></c> no
longer accepts the <c><![CDATA[andalso]]></c> and <c><![CDATA[orelse]]></c>
constructs in guards for consistency with the standard
Erlang language. A future release of Erlang/OTP may allow
<c><![CDATA[andalso]]></c> and <c><![CDATA[orelse]]></c> in guards.</p>
<p>*** POTENTIAL INCOMPATIBILITY ***</p>
<p>Own Id: OTP-5149</p>
</item>
<item>
<p>In rare circumstances in a process that has caught
exceptions and uses funs, the process would be killed
when changing code because the code server would think
that the process still held references to the funs.</p>
<p>Own Id: OTP-5153</p>
</item>
<item>
<p><c><![CDATA[erlang:system_monitor/2]]></c> no longer sends any
monitoring messages to the system monitor process from
itself. This behavior is more consistent with other trace
functionality.</p>
<p>*** POTENTIAL INCOMPATIBILITY ***</p>
<p>Own Id: OTP-5183</p>
</item>
</list>
</section>
<section>
<title>Improvements and New Features</title>
<list type="bulleted">
<item>
<p>The documentation stated that <c><![CDATA[ets:safe_fixtable/2]]></c>
could return <c><![CDATA[true]]></c> or <c><![CDATA[false,]]></c> that was wrong,
it always returns <c><![CDATA[true]]></c>.</p>
<p>Own Id: OTP-4830</p>
</item>
<item>
<p>The unary '+' operator has been changed to throw an
<c><![CDATA[badarith]]></c> exception if its argument is not numeric (or
fail in a guard). It used its argument unchanged whatever
the type. Given the new meaning, unary '+' can now be
used to test whether a term is numeric.</p>
<p>*** POTENTIAL INCOMPATIBILITY ***</p>
<p>Own Id: OTP-4928</p>
</item>
<item>
<p>Process identifiers and port identifiers have been
made more unique. Previously 18 bits were used as id in
the internal representation of process and port
identifiers. Now 28 bits are used.</p>
<p>The maximum limit on the number of concurrently existing
processes due to the representation of pids has been
increased to 268435456 processes. The same is true for
ports. This limit will at least on a 32-bit architecture be
impossible to reach due to memory shortage.</p>
<p><em>NOTE:</em> By default, the <c><![CDATA[ERTS]]></c>, and the
<c><![CDATA[erl_interface]]></c>, <c><![CDATA[ei]]></c>, and <c><![CDATA[jinterface]]></c>
libraries are now only guaranteed to be compatible with
other Erlang/OTP components from the same release. It is
possible to set each component in compatibility mode of
an earlier release, though. See the documentation for
respective component on how to set it in compatibility
mode.</p>
<p>*** POTENTIAL INCOMPATIBILITY ***</p>
<p>Own Id: OTP-4968 Aux Id: OTP-4196 </p>
</item>
<item>
<p>A new internal thread library for the ERTS has been
added.</p>
<p>Own Id: OTP-5048</p>
</item>
<item>
<p>The system's performance could degrade severely if one
process held numerous links or monitors. The issue is
resolved.</p>
<p>Own Id: OTP-5079</p>
</item>
<item>
<p>A new function, <c><![CDATA[string:to_integer/1]]></c>, has been added.</p>
<p>Own Id: OTP-5081 Aux Id: OTP-5136 </p>
</item>
<item>
<p>A new function, <c><![CDATA[string:to_float/1]]></c>, has been added.</p>
<p>Own Id: OTP-5136 Aux Id: OTP-5081 </p>
</item>
<item>
<p>The exception code for calling a fun with wrong number of
arguments has been changed from simply <c><![CDATA[badarity]]></c> to
<c><![CDATA[{badarity,{Fun,Args}}]]></c>.</p>
<p>*** POTENTIAL INCOMPATIBILITY ***</p>
<p>Own Id: OTP-5139</p>
</item>
<item>
<p>The long-awaited <c><![CDATA[try]]></c>...<c><![CDATA[catch]]></c> construction
is included in this release. However, its use in
production code is not yet supported as there are several
known cases of legal code crashing the compiler. We plan
to release a patch to the compiler (including the
documentation) and at that time <c><![CDATA[try]]></c>...<c><![CDATA[catch]]></c>
will be supported.</p>
<p>Own Id: OTP-5150</p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.6.6</title>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
<p>A bug that caused an emulator crash when using system
monitor of long GC has been fixed.</p>
<p>Own Id: OTP-5123</p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.6.5</title>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
<p><c><![CDATA[erlang:memory(ets)]]></c> and <c><![CDATA[c:memory(ets)]]></c>
sometimes reported erroneous values. This bug has now been
fixed.</p>
<p>Own Id: OTP-5115 Aux Id: seq9063 </p>
</item>
<item>
<p>There is now a packet size limit option for <c><![CDATA[gen_tcp]]></c>
sockets. See the manual for <c><![CDATA[inet:setopts/2]]></c>.</p>
<p>The ASN.1 BER packet decoding for <c><![CDATA[gen_tcp]]></c> sockets
can now decode indefinite length packets.</p>
<p>Own Id: OTP-5128</p>
</item>
</list>
</section>
<section>
<title>Improvements and New Features</title>
<list type="bulleted">
<item>
<p>Port index was unnecessarily incremented by port table
size when port table got full. This unnecessary increment
has now been removed.</p>
<p>Own Id: OTP-5119</p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.6.3</title>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
<p>Resolved a build problem on Mac OS 10.3 ("Panther").
Because of a conflict with the zlib sources included in
the Erlang run-time system and the zlib library included
in Panther, linking would fail.</p>
<p>Minor optimization on all Unix systems: caching the
system name returned from the uname() system call.
(Thanks to David N. Welton.)</p>
<p>Own Id: OTP-5069</p>
</item>
</list>
</section>
<section>
<title>Improvements and New Features</title>
<list type="bulleted">
<item>
<p>The ability to set system wide options for TCP sockets is
added through the kernel application variables
<c><![CDATA[inet_default_listen_options]]></c> and
<c><![CDATA[inet_default_connect_options]]></c>, see the <c><![CDATA[inet]]></c>
manual page for details.</p>
<p>Own Id: OTP-5080</p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.6.2</title>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
<p>A few portability enhancements for the R9C-1 Open Source
release: The installer for Windows can now be built with
NSIS 2.0 (as well as with the NSIS 2.0b3). The driver
header files updated to allowed drivers to be built which
the MinGW compiler on Windows. Minor portability
enhancement in <c><![CDATA[io_lib:fread]]></c>.</p>
<p>Own Id: OTP-4789</p>
</item>
<item>
<p>Conversion of extremely small floating point numbers in
the external format (distribution) could sometimes fail
leading to unexpected closing of distribution channels,
i.e. generating nodedowns for healthy nodes.</p>
<p>Own Id: OTP-5026 Aux Id: seq8631 EABln12478 </p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.6.1</title>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
<p>Conversion of extremely small floating point numbers in
the external format (distribution) could sometimes fail
leading to unexpected closing of distribution channels,
i.e. generating nodedowns for healthy nodes.</p>
<p>Own Id: OTP-5026 Aux Id: seq8631 EABln12478 </p>
</item>
</list>
</section>
<section>
<title>Improvements and New Features</title>
<list type="bulleted">
<item>
<p>Remote spawn on a nonreachable node now gives warning
instead of error in the error_log.</p>
<p>Own Id: OTP-5030 Aux Id: seq8663] </p>
</item>
</list>
</section>
<section>
<title>Known Bugs and Problems</title>
<list type="bulleted">
<item>
<p>Emulator with elib_malloc enabled could hang when many
I/O threads were in use.</p>
<p>Own Id: OTP-5028 Aux Id: EABln13041, EABln12253 </p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.6</title>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
<p>Distributed monitoring in combination with nodes
restarting did not behave correctly in rare
circumstances.</p>
<p>Own Id: OTP-4914</p>
</item>
<item>
<p>A module containing code similar to <c><![CDATA[receive after 4.1]]></c>
could not be loaded.</p>
<p>Own Id: OTP-4963 Aux Id: seq8344 </p>
</item>
<item>
<p>Problems fixed in <c><![CDATA[file:open/2]]></c>: <c><![CDATA["/dev/null"]]></c>
can now be opened. Opening a FIFO will now return an error
instead of hanging the emulator. The documentation has been
updated to point out that <c><![CDATA[file:open/2]]></c> returns
the error code <c><![CDATA[eisdir]]></c> when the pathname is not a
regular file (the pathname is not necessarily a directory).</p>
<p>Own Id: OTP-4992</p>
</item>
</list>
</section>
<section>
<title>Improvements and New Features</title>
<list type="bulleted">
<item>
<p>The Solaris kernel poll feature was changed from a
compile time option to a runtime option. The kernel poll
feature can be enabled, by passing the command-line
argument <c><![CDATA[+K true]]></c> to an emulator (see <c><![CDATA[erl(1)]]></c>)
that have kernel poll support, i.e. an emulator for
Solaris 8. By default the kernel poll feature is disabled.</p>
<p>Own Id: OTP-4979 Aux Id: seq8478 </p>
</item>
<item>
<p>Before the Erlang emulator writes an <c><![CDATA[erl_crash.dump]]></c>
file (for any reason), it will close all open files and
sockets.</p>
<p>Own Id: OTP-4985 Aux Id: EABln10730, EABln11277,
EABln11279 </p>
</item>
<item>
<p>The <c><![CDATA[+c]]></c> switch has been added to disable time
correction in the runtime system, this should be used on
systems where one is certain no dramatic wall clock time
changes will occur and the time correction algorithm is too
costly (namely very fast Linux systems where loads of
<c><![CDATA[erlang:now()]]></c> are executed).</p>
<p>Own Id: OTP-4986</p>
</item>
<item>
<p>The <c><![CDATA[process_flag/2,3]]></c> BIFs now take a flag
<c><![CDATA[min_heap_size]]></c> that allows changing an existing
process's minimum heap size. The actual size will only be
changed when the next garbage collection occurs.</p>
<p>Own Id: OTP-4991 Aux Id: seq8515, OTP-4987 </p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.4</title>
<section>
<title>Improvements and New Features</title>
<list type="bulleted">
<item>
<p>A possibility to make distribution messages be qued up
during running of erlang code, so that larger packages is
sent over the network is added.</p>
<p>Own Id: OTP-4916</p>
</item>
<item>
<p>When code loading failed it was impossible to know
exactly what caused it, only <c><![CDATA[{undef,[{M,F,A}|...]}]]></c>
would be reported. Now the primitive loader lets the
error logger print an error report if a file operation
fails. All file errors except <c><![CDATA[enoent]]></c> and
<c><![CDATA[enotdir]]></c> are reported this way.</p>
<p>Own Id: OTP-4925 Aux Id: OTP-4952 </p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.3</title>
<section>
<title>Fixed Bugs and Malfunctions</title>
<list type="bulleted">
<item>
<p>The driver for dynamically linked in drivers has been
fixed to delete loaded drivers when its Erlang server
dies. The Erlang server has also been updated to improve
the start-on-demand behaviour.</p>
<p>Own Id: OTP-4876 Aux Id: OTP-4855 seq8272 </p>
</item>
<item>
<p><c><![CDATA[erlang:register/2]]></c> does no longer generate an ERROR
REPORT to the error logger when the name already is
registered. If the name is already registered the process
function will crash with <c><![CDATA[{'EXIT',Reason}]]></c> and that is
enough. It is up to the caller to decide if it is an
error that the name is already registered.</p>
<p>Own Id: OTP-4892</p>
</item>
<item>
<p>When using <c><![CDATA[erlang:system_monitor(Pid,{long_gc,Time})]]></c>,
and the GC time exceeded 1 second, it sometimes erroneously
showed up as about 4300 seconds. This bug has now been
corrected.</p>
<p>Own Id: OTP-4903 Aux Id: seq8379 </p>
</item>
</list>
</section>
<section>
<title>Improvements and New Features</title>
<list type="bulleted">
<item>
<p>Starting Erlang with the <c><![CDATA[+Bi]]></c> flag (to ignore ^C), now
also disables the quit ('q') option in the JCL menu.</p>
<p>Own Id: OTP-4897</p>
</item>
</list>
</section>
</section>
<section>
<title>ERTS 5.3.2</title>
<section>
<title>Improvements and New Features</title>
<list type="bulleted">
<item>
<p>The elib_malloc alternative dynamic memory allocator has
been improved to use an address order best fit strategy.
The instrumented emulator has been improved to be able to
catch memory allocations done by external libraries. The
emulator flag <c><![CDATA[+r]]></c> (stands for "relocate") makes
<c><![CDATA[ets]]></c> updates always result in an object relocation,
which significantly lessens the memory fragmentation in
certain systems. The <c><![CDATA[erlang:system_info/1]]></c> bif can
now be called with the argument <c><![CDATA[ets_realloc_moves]]></c>
and will return <c><![CDATA[true]]></c> if the <c><![CDATA[+r]]></c> emulator flag
is in effect, <c><![CDATA[false]]></c> otherwise.</p>
<p>Own Id: OTP-4838 Aux Id: seq8156 </p>
</item>
</list>
</section>
</section>
</chapter>
|