summaryrefslogtreecommitdiff
path: root/Changes
blob: 07bdab6c6d2b2067651c41a7661d69fb9befec0c (plain)
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
Objective Caml 1.04:
--------------------

* Replay debugger ported from Caml Light; added debugger support in
  compiler (option -g) and runtime system. Debugger is alpha-quality
  and needs testing.

* Parsing:
  - Support for "# linenum" directives.
  - At toplevel, allow several phrases without intermediate ";;".

* Typing:
  - Allow constraints on datatype parameters, e.g. 
    type 'a foo = ... constraint 'a = 'b * 'c.
  - Fixed bug in signature matching in presence of free type variables '_a.
  - Extensive cleanup of internals of type inference.

* Native-code compilation:
  - Inlining of small functions at point of call (fairly conservative).
  - MIPS code generator ported to SGI IRIX 6.
  - Better code generated for large integer constants.
  - Check for urgent GC when allocating large objects in major heap.
  - PowerPC port: better scheduling, reduced TOC consumption.
  - HPPA port: handle long conditional branches gracefully,
    several span-dependent bugs fixed.

* Standard library:
  - More floating-point functions (all ANSI C float functions now available).
  - Hashtbl: added functorial interface (allow providing own equality
    and hash functions); rehash when resizing, avoid memory leak on
    Hashtbl.remove.
  - Added Char.uppercase, Char.lowercase, String.uppercase, String.lowercase,
    String.capitalize, String.uncapitalize.
  - New module Weak for manipulating weak pointers.
  - New module Callback for registering closures and exceptions to be
    used from C.

* Foreign interface:
  - Better support for callbacks (C calling Caml), exception raising
    from C, and main() in C. Added function to remove a global root.
  - Option -output-obj to package Caml code as a C library.

* Thread library: fixed bug in timed_read and timed_write operations;
  Lexing.from_function and Lexing.from_channel now reentrant.

* Unix interface: renamed EACCESS to EACCES (the POSIX name); added setsid;
  fixed bug in inet_addr_of_string for 64-bit platforms.

* Ocamlyacc: default error function no longer prevents error recovery.

* Ocamllex: fixed reentrancy problem w.r.t. exceptions during refill;
  fixed output problem (\r\r\n) under Win32.

* Macintosh port:
  - The makefiles are provided for compiling and installing O'Caml on
    a Macintosh with MPW 3.4.1.
  - An application with the toplevel in a window is forthcoming.

* Windows NT/95 port: updated toplevel GUI to that of Caml Light 0.73.

* Emacs editing mode and debugger interface included in distribution.


Objective Caml 1.03:
--------------------

* Typing:
  - bug with type names escaping their scope via unification with
    non-generalized type variables '_a completely fixed;
  - fixed bug in occur check : it was too restrictive;
  - fixed bug of coercion operators;
  - check that no two types of the same name are generated in a module
    (there was no check for classes);
  - "#install_printer" works again;
  - fixed bug in printing of subtyping errors;
  - in class interfaces, construct "method m" (without type) change
    the status of method m from abstract to concrete;
  - in a recursive definition of class interfaces, a class can now
    inherit from a previous class;
  - typing of a method make use of an eventual previously given type
    of this method, yielding clearer type errors.

* Compilation (ocamlc and ocamlopt):
  - fixed bug in compilation of classes.

* Native-code compilation:
  - optimization of functions taking tuples of arguments;
  - code emitter for the Motorola 680x0 processors (retrocomputing week);
  - Alpha/OSF1: generate frame descriptors, avoids crashes when e.g.
    exp() or log() cause a domain error; fixed bug with
    String.length "literal";
  - Sparc, Mips, HPPA: removed marking of scanned stack frames
    (benefits do not outweight cost).

* Standard library:
  - Arg.parse now prints documentation for command-line options;
  - I/O buffers (types in_channel and out_channel) now heap-allocated,
    avoids crashing when closing a channel several times;
  - Overflow bug in compare() fixed;
  - GC bug in raising Sys_error from I/O functions fixed;
  - Parsing.symbol_start works even for epsilon productions.

* Foreign interface: main() in C now working, fixed bug in library
  order at link time.

* Thread library: guard against calling thread functions before Thread.create.

* Unix library: fixed getsockopt, setsockopt, open_process_{in,out}.

* Perl-free, cpp-free, cholesterol-free installation procedure.


Objective Caml 1.02:
--------------------
* Typing: 
  - fixed bug with type names escaping their scope via unification
    with non-generalized type variables '_a;
  - keep #class abbreviations longer;
  - faster checking of well-formed abbreviation definitions;
  - stricter checking of "with" constraints over signatures (arity
    mismatch, overriding of an already manifest type).

* Compilation (ocamlc and ocamlopt):
  - fixed bug in compilation of recursive classes;
  - [|...|] and let...rec... allowed inside definitions of recursive
    data structures;

* Bytecode compilation: fixed overflow in linker for programs with
  more than 65535 globals and constants.

* Native-code compilation:
  - ocamlopt ported to HPPA under HP/UX, Intel x86 under Solaris 2,
    PowerMacintosh under MkLinux;
  - fixed two bugs related to floating-point arrays (one with "t array"
    where t is an abstract type implemented as float, one with
    comparison between two float arrays on 32 bit platforms);
  - fixed reloading/spilling problem causing non-termination of
    register allocation;
  - fixed bugs in handling of () causing loss of tail recursion;
  - fixed reloading bug in indirect calls.

* Windows NT/95 port:
  - complete port of the threads library (Pascal Cuoq);
  - partial port of the Unix library (Pascal Cuoq);
  - expansion of *, ? and @ on the command line.

* Standard library:
  - bug in in List.exists2 fixed;
  - bug in "Random.int n" for very large n on 64-bit machines fixed;
  - module Format: added a "general purpose" type of box (open_box);
    can output on several formatters at the same time.

* The "threads" library:
  - implementation on top of native threads available for Win32 and
    POSIX 1003.1c;
  - added -thread option to select a thread-safe version of the
    standard library, the ThreadIO module is no longer needed.

* The "graph" library: avoid invalid pixmaps when doing 
  open_graph/close_graph several times.

* The "dynlink" library: support for "private" (no re-export) dynamic loading.

* ocamlyacc: skip '...' character literals correctly.

* C interface: C code linked with O'Caml code can provide its own main()
  and call caml_main() later.


Objective Caml 1.01:
--------------------
* Typing: better report of type incompatibilities; 
  non-generalizable type variables in a struct...end no longer flagged
  immediately as an error;
  name clashes during "open" avoided.

* Fixed bug in output_value where identical data structures
  could have different external representations; this bug caused wrong
  "inconsistent assumptions" errors when checking compatibility of
  interfaces at link-time.

* Standard library: fixed bug in Array.blit on overlapping array sections

* Unmarshaling from strings now working.

* ocamlc, ocamlopt: new flags -intf and -impl to force compilation as
  an implementation/an interface, regardless of file extension;
  overflow bug on wide-range integer pattern-matchings fixed.

* ocamlc: fixed bytecode generation bug causing problems with compilation
  units defining more than 256 values

* ocamlopt, all platforms:
  fixed GC bug in "let rec" over data structures;
  link startup file first, fixes "undefined symbol" errors with some
  libraries.

* ocamlopt, Intel x86:
  more efficient calling sequence for calling C functions;
  floating-point wars, chapter 5: don't use float stack for holding
  float pseudo-registers, stack-allocating them is just as efficient.

* ocamlopt, Alpha and Intel x86: more compact calling sequence for garbage
  collection.

* ocamllex: generated automata no longer use callbacks for refilling
  the input buffer (works better with threads); character literals
  correctly skipped inside actions.

* ocamldep: "-I" directories now searched in the right order

* Thread library: incompatibilities with callbacks, signals, and
  dynamic linking removed; scheduling bug with Thread.wait fixed.

* New "dbm" library, interfaces with NDBM.

* Object-oriented extensions:
    instance variables can now be omitted in class types;
    some error messages have been made clearer;
    several bugs fixes.

Objective Caml 1.00:
--------------------

* Merge of Jerome Vouillon and Didier Remy's object-oriented
extensions.

* All libraries: all "new" functions renamed to "create" because "new"
is now a reserved keyword.

* Compilation of "or" patterns (pat1 | pat2) completely revised to
avoid code size explosion.

* Compiler support for preprocessing source files (-pp flag).

* Library construction: flag -linkall to force linking of all units in
a library.

* Native-code compiler: port to the Sparc under NetBSD.

* Toplevel: fixed bug when tracing several times the same function
under different names.

* New format for marshaling arbitrary data structures, allows
marshaling to/from strings.

* Standard library: new module Genlex (configurable lexer for streams)

* Thread library: much better support for I/O and blocking system calls.

* Graphics library: faster reclaimation of unused pixmaps.

* Unix library: new functions {set,clear}_nonblock, {set,clear}_close_on_exec,
{set,get}itimer, inet_addr_any, {get,set}sockopt.

* Dynlink library: added support for linking libraries (.cma files).

Caml Special Light 1.15:
------------------------

* Caml Special Light now runs under Windows NT and 95. Many thanks to
Kevin Gallo (Microsoft Research) who contributed his initial port.

* csllex now generates tables for a table-driven automaton.
The resulting lexers are smaller and run faster.

* Completely automatic configuration script.

* Typing: more stringent checking of module type definitions against
manifest module type specifications.

* Toplevel: recursive definitions of values now working.

* Native-code compiler, all platforms:
        toplevel "let"s with refutable patterns now working;
        fixed bug in assignment to float record fields;
        direct support for floating-point negation and absolute value.

* Native-code compiler, x86: fixed bug with tail calls (with more than
4 arguments) from a function with a one-word stack frame.

* Native-code compiler, Sparc: problem with -compact fixed.

* Thread library: support for non-blocking writes; scheduler revised.

* Unix library: bug in gethostbyaddr fixed; bounds checking for read,
write, etc.

Caml Special Light 1.14:
------------------------

* cslopt ported to the PowerPC/RS6000 architecture. Better support for
AIX in the bytecode system as well.

* cslopt, all platforms: fixed bug in live range splitting around catch/exit.

* cslopt for the Intel (floating-point wars, chapter 4):
implemented Ershov's algorithm to minimize floating-point stack usage;
out-of-order pops fixed.

* Several bug fixes in callbacks and signals.

Caml Special Light 1.13:
------------------------

* Pattern-matching compilation revised to factor out accesses inside
matched structures.

* Callbacks and signals now supported in cslopt.
Signals are only detected at allocation points, though.
Added callback functions with 2 and 3 arguments.

* More explicit error messages when a native-code program aborts due
to array or string bound violations.

* In patterns, "C _" allowed even if the constructor C has several arguments.

* && and || allowed as alternate syntax for & and or.

* cslopt for the Intel: code generation for floating-point
operations entirely redone for the third time (a pox on whomever at
Intel decided to organize the floating-point registers as a stack).

* cslopt for the Sparc: don't use Sparc V8 smul and sdiv instructions,
emulation on V7 processors is abysmal.

Caml Special Light 1.12:
------------------------

* Fixed an embarrassing bug with references to floats.

Caml Special Light 1.11:
------------------------

* Streams and stream parsers a la Caml Light are back (thanks to
Daniel de Rauglaudre).

* User-level concurrent threads, with low-level shared memory primitives
(locks and conditions) as well as channel-based communication primitives
with first-class synchronous events, in the style of Reppy's CML.

* The native-code compiler has been ported to the HP PA-RISC processor
running under NextStep (sorry, no HPUX, its linker keeps dumping
core on me).

* References not captured in a function are optimized into variables.

* Fixed several bugs related to exceptions.

* Floats behave a little more as specified in the IEEE standard
(believe it or not, but x < y is not the negation of x >= y).

* Lower memory consumption for the native-code compiler.

Caml Special Light 1.10:
------------------------

* Many bug fixes (too many to list here).

* Module language: introduction of a "with module" notation over
signatures for concise sharing of all type components of a signature;
better support for concrete types in signatures.

* Native-code compiler: the Intel 386 version has been ported to
NextStep and FreeBSD, and generates better code (especially for
floats)

* Tools and libraries: the Caml Light profiler and library for
arbitrary-precision arithmetic have been ported (thanks to John
Malecki and Victor Manuel Gulias Fernandez); better docs for the Unix
and regexp libraries.

Caml Special Light 1.07:
------------------------

* Syntax: optional ;; allowed in compilation units and structures
(back by popular demand)

* cslopt: 
generic handling of float arrays fixed
direct function application when the function expr is not a path fixed
compilation of "let rec" over values fixed
multiple definitions of a value name in a module correctly handled
no calls to ranlib in Solaris

* csltop: #trace now working

* Standard library: added List.memq; documentation of Array fixed.

Caml Special Light 1.06:
------------------------

* First public release.