forked from ocaml/ocaml
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Changes
3937 lines (3471 loc) · 174 KB
/
Changes
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
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
OCaml 4.02.1:
-------------
(Changes that can break existing programs are marked with a "*")
Standard library:
* Add optional argument ?limit to Arg.align.
- PR#4099: Bug in Makefile.nt: won't stop on error
(George Necula)
- PR#6181: Improve MSVC build
(Chen Gang)
- PR#6207: Configure doesn't detect features correctly on Haiku
(Jessica Hamilton)
- PR#6466: Non-exhaustive matching warning message for open types is confusing
(Peter Zotov)
- PR#6529: fix quadratic-time algorithm in Consistbl.extract.
(Xavier Leroy, Alain Frisch, relase-worthy report by Jacques-Pascal Deplaix)
- PR#6530: Add stack overflow handling for native code (OpenBSD i386 and amd64)
(Cristopher Zimmermann)
- PR#6533: broken semantics of %(%) when substitued by a box
(Benoît Vaugon, report by Boris Yakobowski)
- PR#6534: legacy support for %.10s
(Benoît Vaugon, Gabriel Scherer, report by Nick Chapman)
- PR#6536: better documentation of flag # in format strings
(Damien Doligez, report by Nick Chapman)
- PR#6544: Bytes and CamlinternalFormat missing from threads stdlib.cma
(Christopher Zimmermann)
- PR#6546: -dsource omits parens for `List ((`String "A")::[]) in patterns
(Gabriel Scherer, report by Peter Zotov)
- PR#6547: __MODULE__ aborts the compiler if the module name cannot be inferred
(Jacques Garrigue, report by Kaustuv Chaudhuri)
- PR#6549: Debug section is sometimes not readable when using -pack
(Hugo Heuzard, review by Gabriel Scherer)
- PR#6553: Missing command line options for ocamldoc
(Maxence Guesdon)
- PR#6554: fix race condition when retrieving backtraces
(Jérémie Dimino, Mark Shinwell).
- PR#6557: String.sub throws Invalid_argument("Bytes.sub")
(Damien Doligez, report by Oliver Bandel)
- PR#6562: Fix ocamldebug module source lookup
(Leo White)
- PR#6563: Inclusion of packs failing to run module initializers
(Jacques Garrigue, report by Mark Shinwell)
- PR#6564: infinite loop in Mtype.remove_aliases
(Jacques Garrigue, report by Mark Shinwell)
- PR#6565: compilation fails with Env.Error(_)
(Jacques Garrigue and Mark Shinwell)
- PR#6566: -short-paths and signature inclusion errors
(Jacques Garrigue, report by Mark Shinwell)
- PR#6572: Fatal error with recursive modules
(Jacques Garrigue, report by Quentin Stievenart)
- PR#6578: Recursive module containing alias causes Segmentation fault
(Jacques Garrigue)
- PR#6581: Some bugs in generative functors
(Jacques Garrigue, report by Mark Shinwell)
- PR#6584: ocamldep support for "-open M"
(Gabriel Scherer, review by Damien Doligez, report by Hezekiah M. Carty)
- PR#6588: Code generation errors for ARM
(Mark Shinwell, Xavier Leroy)
- PR#6590: Improve Windows (MSVC and mingw) build
(Chen Gang)
- PR#6599: ocamlbuild: add -bin-annot when using -pack
(Christopher Zimmermann)
- PR#6602: Fatal error when tracing a function with abstract type
(Jacques Garrigue, report by Hugo Herbelin)
- ocamlbuild: add an -ocamlmklib option to change the ocamlmklib command
(Jérôme Vouillon)
OCaml 4.02.0:
-------------
(Changes that can break existing programs are marked with a "*")
Language features:
- Attributes and extension nodes
(Alain Frisch)
- Generative functors (PR#5905)
(Jacques Garrigue)
- Module aliases
(Jacques Garrigue)
* Alternative syntax for string literals {id|...|id} (can break comments)
(Alain Frisch)
- Separation between read-only strings (type string) and read-write byte
sequences (type bytes). Activated by command-line option -safe-string.
(Damien Doligez)
- PR#6318: Exception cases in pattern matching
(Jeremy Yallop, backend by Alain Frisch)
- PR#5584: Extensible open datatypes
(Leo White)
Build system for the OCaml distribution:
- Use -bin-annot when building.
- Use GNU make instead of portable makefiles.
- Updated build instructions for 32-bit Mac OS X on Intel hardware.
Shedding weight:
* Removed Camlp4 from the distribution, now available as third-party software.
* Removed Labltk from the distribution, now available as a third-party library.
Type system:
* PR#6235: Keep typing of pattern cases independent in principal mode
(i.e. information from previous cases is no longer used when typing
patterns; cf. 'PR#6235' in testsuite/test/typing-warnings/records.ml)
(Jacques Garrigue)
- Allow opening a first-class module or applying a generative functor
in the body of a generative functor. Allow it also in the body of
an applicative functor if no types are created
(Jacques Garrigue, suggestion by Leo White)
* Module aliases are now typed in a specific way, which remembers their
identity. In particular this changes the signature inferred by
"module type of"
(Jacques Garrigue, feedback from Leo White, Mark Shinwell and Nick Chapman)
- PR#6331: Slight change in the criterion to distinguish private
abbreviations and private row types: create a private abbreviation for
closed objects and fixed polymorphic variants.
(Jacques Garrigue)
* PR#6333: Compare first class module types structurally rather than
nominally. Value subtyping allows module subtyping as long as the internal
representation is unchanged.
(Jacques Garrigue)
Compilers:
- More aggressive constant propagation, including float and
int32/int64/nativeint arithmetic. Constant propagation for floats
can be turned off with option -no-float-const-prop, for codes that
change FP rounding modes at run-time.
(Xavier Leroy)
- New back-end optimization pass: common subexpression elimination (CSE).
(Reuses results of previous computations instead of recomputing them.)
(Xavier Leroy)
- New back-end optimization pass: dead code elimination.
(Removes arithmetic and load instructions whose results are unused.)
(Xavier Leroy)
- PR#6269: Optimization of sequences of string patterns
(Benoît Vaugon and Luc Maranget)
- Experimental native code generator for AArch64 (ARM 64 bits)
(Xavier Leroy)
- PR#6042: Optimization of integer division and modulus by constant divisors
(Xavier Leroy and Phil Denys)
- Add "-open" command line flag for opening a single module before typing
(Leo White, Mark Shinwell and Nick Chapman)
* "-o" now sets module name to the output file name up to the first "."
(it also applies when "-o" is not given, i.e. the module name is then
the input file name up to the first ".")
(Leo White, Mark Shinwell and Nick Chapman)
* PR#5779: better sharing of structured constants
(Alain Frisch)
- PR#5817: new flag to keep locations in cmi files
(Alain Frisch)
- PR#5854: issue warning 3 when referring to a value marked with
the [@@ocaml.deprecated] attribute
(Alain Frisch, suggestion by Pierre-Marie Pédrot)
- PR#6017: a new format implementation based on GADTs
(Benoît Vaugon and Gabriel Scherer)
* PR#6203: Constant exception constructors no longer allocate
(Alain Frisch)
- PR#6260: avoid unnecessary boxing in let
(Vladimir Brankov)
- PR#6345: Better compilation of optional arguments with default values
(Alain Frisch, review by Jacques Garrigue)
- PR#6389: ocamlopt -opaque option for incremental native compilation
(Pierre Chambart, Gabriel Scherer)
Toplevel interactive system:
- PR#5377: New "#show_*" directives
(ygrek, Jacques Garrigue and Alain Frisch)
Runtime system:
- New configure option "-no-naked-pointers" to improve performance by
avoiding page table tests during block darkening and the marking phase
of the major GC. In this mode, all out-of-heap pointers must point at
things that look like OCaml values: in particular they must have a valid
header. The colour of said headers should be black.
(Mark Shinwell, reviews by Damien Doligez and Xavier Leroy)
- Fixed bug in native code version of [caml_raise_with_string] that could
potentially lead to heap corruption.
(Mark Shinwell)
* Blocks initialized by [CAMLlocal*] and [caml_alloc] are now filled with
[Val_unit] rather than zero.
(Mark Shinwell)
- Fixed a major performance problem on large heaps (~1GB) by making heap
increments proportional to heap size by default
(Damien Doligez)
- PR#4765: Structural equality treats exception specifically
(Alain Frisch)
- PR#5009: efficient comparison/indexing of exceptions
(Alain Frisch, request by Markus Mottl)
- PR#6075: avoid using unsafe C library functions (strcpy, strcat, sprintf)
(Xavier Leroy, reports from user 'jfc' and Anil Madhavapeddy)
- An ISO C99-compliant C compiler and standard library is now assumed.
(Plus special exceptions for MSVC.) In particular, emulation code for
64-bit integer arithmetic was removed, the C compiler must support a
64-bit integer type.
(Xavier Leroy)
Standard library:
* Add new modules Bytes and BytesLabels for mutable byte sequences.
(Damien Doligez)
- PR#4986: add List.sort_uniq and Set.of_list
(Alain Frisch)
- PR#5935: a faster version of "raise" which does not maintain the backtrace
(Alain Frisch)
- PR#6146: support "Unix.kill pid Sys.sigkill" under Windows
(Romain Bardou and Alain Frisch)
- PR#6148: speed improvement for Buffer
(John Whitington)
- PR#6180: efficient creation of uninitialized float arrays
(Alain Frisch, request by Markus Mottl)
- PR#6355: Improve documentation regarding finalisers and multithreading
(Daniel Bünzli, Mark Shinwell)
- Trigger warning 3 for all values marked as deprecated in the documentation.
(Damien Doligez)
OCamldoc:
- PR#6257: handle full doc comments for variant constructors and
record fields
(Maxence Guesdon, request by ygrek)
- PR#6274: allow doc comments on object types
(Thomas Refis)
- PR#6310: fix ocamldoc's subscript/superscript CSS font size
(Anil Madhavapeddy)
- PR#6425: fix generation of man pages
(Maxence Guesdon, report by Anil Madhavapeddy)
Bug fixes:
- PR#2719: wrong scheduling of bound checks within a
try...with Invalid_argument -> _ ... (Xavier Leroy)
- PR#4719: Sys.executable_name wrong if executable name contains dots (Windows)
(Alain Frisch, report by Bart Jacobs)
- PR#5406 ocamlbuild: "tag 'package' does not expect a parameter"
(Gabriel Scherer)
- PR#5598, PR#6165: Alterations to handling of \013 in source files
breaking other tools
(David Allsopp and Damien Doligez)
- PR#5820: Fix camlp4 lexer roll back problem
(Hongbo Zhang)
- PR#5946: CAMLprim taking (void) as argument
(Benoît Vaugon)
- PR#6038: on x86-32, enforce 16-byte stack alignment for compatibility
with recent GCC and Clang. Win32/MSVC keeps 4-byte stack alignment.
(Xavier Leroy)
- PR#6062: Fix a 4.01 camlp4 DELETE_RULE regression caused by commit 13047
(Hongbo Zhang, report by Christophe Troestler)
- PR#6173: Typing error message is worse than before
(Jacques Garrigue and John Whitington)
- PR#6174: OCaml compiler loops on an example using GADTs (-rectypes case)
(Jacques Garrigue and Grégoire Henry, report by Chantal Keller)
- PR#6175: open! was not suppored by camlp4
(Hongbo Zhang)
- PR#6184: ocamlbuild: `ocamlfind ocamldep` does not support -predicate
(Jacques-Pascal Deplaix)
- PR#6194: Incorrect unused warning with first-class modules in patterns
(Jacques Garrigue, report by Markus Mottl and Leo White)
- PR#6211: in toplevel interactive use, bad interaction between uncaught
exceptions and multiple bindings of the form "let x = a let y = b;;".
(Xavier Leroy)
- PR#6216: inlining of GADT matches generates invalid assembly
(Xavier Leroy and Alain Frisch, report by Mark Shinwell)
- PR#6232: Don't use [mktemp] on platforms where [mkstemp] is available
(Stéphane Glondu, Mark Shinwell)
- PR#6233: out-of-bounds exceptions lose their locations on ARM, PowerPC
(Jacques-Henri Jourdan and Xavier Leroy,
report and testing by Stéphane Glondu)
- PR#6235: Issue with type information flowing through a variant pattern
(Jacques Garrigue, report by Hongbo Zhang)
- PR#6239: sometimes wrong stack alignment when raising exceptions
in -g mode with backtraces active
(Xavier Leroy, report by Yaron Minsky)
- PR#6240: Fail to expand module type abbreviation during substyping
(Jacques Garrigue, report by Leo White)
- PR#6241: Assumed inequality between paths involving functor arguments
(Jacques Garrigue, report by Jeremy Yallop)
- PR#6243: Make "ocamlopt -g" more resistant to ill-formed locations
(Xavier Leroy, report by Pierre-Marie Pédrot)
- PR#6262: equality of first-class modules take module aliases into account
(Alain Frisch and Leo White)
- PR#6268: -DMODEL_$(MODEL) not passed when building asmrun/arm.p.o
(Peter Michael Green)
- PR#6273: fix Sys.file_exists on large files (Win32)
(Christoph Bauer)
- PR#6275: Soundness bug related to type constraints
(Jacques Garrigue, report by Leo White)
- PR#6293: Assert_failure with invalid package type
(Jacques Garrigue, report by Elnatan Reisner)
- PR#6300: ocamlbuild -use-ocamlfind conflicts with -ocamlc
(Gabriel Scherer)
- PR#6302: bytecode debug information re-read from filesystem every time
(Jacques-Henri Jourdan)
- PR#6307: Behavior of 'module type of' w.r.t. module aliases
(Jacques Garrigue, report by Alain Frisch)
- PR#6332: Unix.open_process fails to pass empty arguments under Windows
(Damien Doligez, report Virgile Prevosto)
- PR#6346: Build failure with latest version of xcode on OSX
(Jérémie Dimino)
- PR#6348: Unification failure for GADT when original definition is hidden
(Leo White and Jacques Garrigue, report by Jeremy Yallop)
- PR#6352: Automatic removal of optional arguments and sequencing
(Jacques Garrigue and Alain Frisch)
- PR#6361: Hashtbl.hash not terminating on some lazy values w/ recursive types
(Xavier Leroy, report by Leo White)
- PR#6383: Exception Not_found when using object type in absent module
(Jacques Garrigue, report by Sébastien Briais)
- PR#6384: Uncaught Not_found exception with a hidden .cmi file
(Leo White)
- PR#6385: wrong allocation of large closures by the bytecode interpreter
(Xavier Leroy, report by Stephen Dolan)
- PR#6394: Assertion failed in Typecore.expand_path
(Alain Frisch and Jacques Garrigue)
- PR#6405: unsound interaction of -rectypes and GADTs
(Jacques Garrigue, report by Gabriel Scherer and Benoît Vaugon)
- PR#6408: Optional arguments given as ~?arg instead of ?arg in message
(Michael O'Connor)
- PR#6411: missing libgcc_s_sjlj-1.dll in mingw (add -static-libgcc)
(Jun Furuse and Alain Frisch, Jonathan Protzenko and Adrien Nader)
- PR#6436: Typos in @deprecated text in stdlib/arrayLabels.mli
(John Whitington)
- PR#6439: Don't use the deprecated [getpagesize] function
(John Whitington, Mark Shinwell)
- PR#6441: undetected tail-call in some mutually-recursive functions
(many arguments, and mutual block mixes functions and non-functions)
(Stefan Holdermans, review by Xavier Leroy)
- PR#6443: ocaml segfault when List.fold_left is traced then executed
(Jacques Garrigue, report by user 'Reventlov')
- PR#6451: some bugs in untypeast.ml
(Jun Furuse, review by Alain Frisch)
- PR#6460: runtime assertion failure with large [| e1;...eN |]
float array expressions
(Leo White)
- PR#6463: -dtypedtree fails on class fields
(Leo White)
- PR#6469: invalid -dsource printing of "external _pipe = ...", "Pervasives.(!)"
(Gabriel Scherer and Damien Doligez, user 'ngunn')
- PR#6482: ocamlbuild fails when _tags file in unhygienic directory
(Gabriel Scherer)
- PR#6502: ocamlbuild spurious warning on "use_menhir" tag
(Xavier Leroy)
- PR#6505: Missed Type-error leads to a segfault upon record access
(Jacques Garrigue, Jeremy Yallop, report by Christoph Höger)
- PR#6507: crash on AArch64 resulting from incorrect setting of
[caml_bottom_of_stack]. (Richard Jones, Mark Shinwell)
- PR#6509: add -linkall flag to ocamlcommon.cma
(Frédéric Bour)
- PR#6513: Fatal error Ctype.Unify(_) in functor type
- PR#6523: failure upon character bigarray access, and unnecessary change
in comparison ordering (Jeremy Yallop, Mark Shinwell)
- bound-checking bug in caml_string_{get,set}{16,32,64}
(Pierre Chambart and Gabriel Scherer, report by Nicolas Trangez)
- sometimes wrong stack alignment at out-of-bounds array access
(Gabriel Scherer and Xavier Leroy, report by Pierre Chambart)
Features wishes:
- PR#4243: make the Makefiles parallelizable
(Grégoire Henry and Damien Doligez)
- PR#4323: have "of_string" in Num and Big_int work with binary and
hex representations
(Zoe Paraskevopoulou, review by Gabriel Scherer)
- PR#4771: Clarify documentation of Dynlink.allow_only
(Damien Doligez, report by David Allsopp)
- PR#4855: 'camlp4 -I +dir' accepted, dir is relative to 'camlp4 -where'
(Jun Furuse and Hongbo Zhang, report by Dmitry Grebeniuk)
- PR#5201: ocamlbuild: add --norc to the bash invocation to help performances
(user 'daweil')
- PR#5650: Camlp4FoldGenerator doesn't handle well "abstract" types
(Hongbo Zhang)
- PR#5808: allow simple patterns, not just identifiers, in "let p : t = ..."
(Alain Frisch)
- PR#5851: warn when -r is disabled because no _tags file is present
(Gabriel Scherer)
- PR#5899: a programmer-friendly access to backtrace information
(Jacques-Henri Jourdan and Gabriel Scherer)
- PR#6000 comment 9644: add a warning for non-principal coercions to format
(Jacques Garrigue, report by Damien Doligez)
- PR#6054: add support for M.[ foo ], M.[| foo |] etc.
(Kaustuv Chaudhuri)
- PR#6064: GADT representation for Bigarray.kind + CAML_BA_CHAR runtime kind
(Jeremy Yallop, review by Gabriel Scherer)
- PR#6071: Add a -noinit option to the toplevel
(David Sheets)
- PR#6087: ocamlbuild, improve _tags parsing of escaped newlines
(Gabriel Scherer, request by Daniel Bünzli)
- PR#6109: Typos in ocamlbuild error messages
(Gabriel Kerneis)
- PR#6116: more efficient implementation of Digest.to_hex
(ygrek)
- PR#6142: add cmt file support to ocamlobjinfo
(Anil Madhavapeddy)
- PR#6166: document -ocamldoc option of ocamlbuild
(Xavier Clerc)
- PR#6182: better message for virtual objects and class types
(Leo White, Stephen Dolan)
- PR#6183: enhanced documentation for 'Unix.shutdown_connection'
(Anil Madhavapeddy, report by Jun Furuse)
- PR#6187: ocamlbuild: warn when using -plugin-tag(s) without myocamlbuild.ml
(Jacques-Pascal Deplaix)
- PR#6246: allow wildcard _ as for-loop index
(Alain Frisch, request by ygrek)
- PR#6267: more information printed by "bt" command of ocamldebug
(Josh Watzman)
- PR#6270: remove need for -I directives to ocamldebug in common case
(Josh Watzman, review by Xavier Clerc and Alain Frisch)
- PR#6311: Improve signature mismatch error messages
(Alain Frisch, suggestion by Daniel Bünzli)
- PR#6358: obey DESTDIR in install targets
(Gabriel Scherer, request by François Berenger)
- PR#6388, PR#6424: more parsetree correctness checks for -ppx users
(Alain Frisch, request by Peter Zotov and Jun Furuse)
- PR#6406: Expose OCaml version in C headers
(Peter Zotov and Romain Calascibetta)
- PR#6446: improve "unused declaration" warnings wrt. name shadowing
(Alain Frisch)
- PR#6495: ocamlbuild tags 'safe_string', 'unsafe_string'
(Anil Madhavapeddy)
- PR#6497: pass context information to -ppx preprocessors
(Peter Zotov, Alain Frisch)
- ocamllex: user-definable refill action
(Frédéric Bour, review by Gabriel Scherer and Luc Maranget)
- shorten syntax for functor signatures: "functor (M1:S1) (M2:S2) .. -> .."
(Thomas Gazagnaire and Jeremy Yallop, review by Gabriel Scherer)
- make ocamldebug -I auto-detection work with ocamlbuild
(Josh Watzman)
OCaml 4.01.0:
-------------
(Changes that can break existing programs are marked with a "*")
Other libraries:
- Labltk: updated to Tcl/Tk 8.6.
Type system:
- PR#5759: use well-disciplined type information propagation to
disambiguate label and constructor names
(Jacques Garrigue, Alain Frisch and Leo P. White)
* Propagate type information towards pattern-matching, even in the presence of
polymorphic variants (discarding only information about possibly-present
constructors). As a result, matching against absent constructors is no longer
allowed for exact and fixed polymorphic variant types.
(Jacques Garrigue)
* PR#6035: Reject multiple declarations of the same method or instance variable
in an object
(Alain Frisch)
Compilers:
- PR#5861: raise an error when multiple private keywords are used in type
declarations
(Hongbo Zhang)
- PR#5634: parsetree rewriter (-ppx flag)
(Alain Frisch)
- ocamldep now supports -absname
(Alain Frisch)
- PR#5768: On "unbound identifier" errors, use spell-checking to suggest names
present in the environment
(Gabriel Scherer)
- ocamlc has a new option -dsource to visualize the parsetree
(Alain Frisch, Hongbo Zhang)
- tools/eqparsetree compares two parsetree ignoring location
(Hongbo Zhang)
- ocamlopt now uses clang as assembler on OS X if available, which enables
CFI support for OS X.
(Benedikt Meurer)
- Added a new -short-paths option, which attempts to use the shortest
representation for type constructors inside types, taking open modules
into account. This can make types much more readable if your code
uses lots of functors.
(Jacques Garrigue)
- PR#5986: added flag -compat-32 to ocamlc, ensuring that the generated
bytecode executable can be loaded on 32-bit hosts.
(Xavier Leroy)
- PR#5980: warning on open statements which shadow an existing
identifier (if it is actually used in the scope of the open); new
open! syntax to silence it locally
(Alain Frisch, thanks to a report of Daniel Bünzli)
* warning 3 is extended to warn about other deprecated features:
- ISO-latin1 characters in identifiers
- uses of the (&) and (or) operators instead of (&&) and (||)
(Damien Doligez)
- Experimental OCAMLPARAM for ocamlc and ocamlopt
(Fabrice Le Fessant)
- PR#5571: incorrect ordinal number in error message
(Alain Frisch, report by John Carr)
- PR#6073: add signature to Tstr_include
(patch by Leo P. White)
Standard library:
- PR#5899: expose a way to inspect the current call stack,
Printexc.get_callstack
(Gabriel Scherer, Jacques-Henri Jourdan, Alain Frisch)
- PR#5986: new flag Marshal.Compat_32 for the serialization functions
(Marshal.to_*), forcing the output to be readable on 32-bit hosts.
(Xavier Leroy)
- infix application operators |> and @@ in Pervasives
(Fabrice Le Fessant)
- PR#6176: new Format.asprintf function with a %a formatter
compatible with Format.fprintf (unlike Format.sprintf)
(Pierre Weis)
Other libraries:
- PR#5568: add O_CLOEXEC flag to Unix.openfile, so that the returned
file descriptor is created in close-on-exec mode
(Xavier Leroy)
Runtime system:
* PR#6019: more efficient implementation of caml_modify() and caml_initialize().
The new implementations are less lenient than the old ones: now,
the destination pointer of caml_modify() must point within the minor or
major heaps, and the destination pointer of caml_initialize() must
point within the major heap.
(Xavier Leroy, from an experiment by Brian Nigito, with feedback
from Yaron Minsky and Gerd Stolpmann)
Internals:
- Moved debugger/envaux.ml to typing/envaux.ml to publish env_of_only_summary
as part of compilerlibs, to be used on bin-annot files.
(Fabrice Le Fessant)
- The test suite can now be run without installing OCaml first.
(Damien Doligez)
Bug fixes:
- PR#3236: Document the fact that queues are not thread-safe
(Damien Doligez)
- PR#3468: (part 1) Sys_error documentation
(Damien Doligez)
- PR#3679: Warning display problems
(Fabrice Le Fessant)
- PR#3963: Graphics.wait_next_event in Win32 hangs if window closed
(Damien Doligez)
- PR#4079: Queue.copy is now tail-recursive
(patch by Christophe Papazian)
- PR#4138: Documentation for Unix.mkdir
(Damien Doligez)
- PR#4469: emacs mode: caml-set-compile-command is annoying with ocamlbuild
(Daniel Bünzli)
- PR#4485: Graphics: Keyboard events incorrectly delivered in native code
(Damien Doligez, report by Sharvil Nanavati)
- PR#4502: ocamlbuild now reliably excludes the build-dir from hygiene check
(Gabriel Scherer, report by Romain Bardou)
- PR#4762: ?? is not used at all, but registered as a lexer token
(Alain Frisch)
- PR#4788: wrong error message when executable file is not found for backtrace
(Damien Doligez, report by Claudio Sacerdoti Coen)
- PR#4812: otherlibs/unix: add extern int code_of_unix_error (value error);
(Goswin von Berdelow)
- PR#4887: input_char after close_in crashes ocaml (msvc runtime)
(Alain Frisch and Christoph Bauer, report by ygrek)
- PR#4994: ocaml-mode doesn't work with xemacs21
(Damien Doligez, report by Stéphane Glondu)
- PR#5098: creating module values may lead to memory leaks
(Alain Frisch, report by Milan Stanojević)
- PR#5102: ocamlbuild fails when using an unbound variable in rule dependency
(Xavier Clerc, report by Daniel Bünzli)
* PR#5119: camlp4 now raises a specific exception when 'DELETE_RULE' fails,
rather than raising 'Not_found'
(ygrek)
- PR#5121: %( %) in Format module seems to be broken
(Pierre Weis, first patch by Valentin Gatien-Baron, report by Khoo Yit Phang)
- PR#5178: document in INSTALL how to build a 32-bit version under Linux x86-64
(Benjamin Monate)
- PR#5212: Improve ocamlbuild error messages of _tags parser
(ygrek)
- PR#5240: register exception printers for Unix.Unix_error and Dynlink.Error
(Jérémie Dimino)
- PR#5300: ocamlbuild: verbose parameter should implicitly set classic display
(Xavier Clerc, report by Robert Jakob)
- PR#5327: (Windows) Unix.select blocks if same socket listed in first and
third arguments
(David Allsopp, displaying impressive MSDN skills)
- PR#5343: ocaml -rectypes is unsound wrt module subtyping (was still unsound)
(Jacques Garrigue)
- PR#5350: missing return code checks in the runtime system
(Xavier Leroy)
- PR#5468: ocamlbuild should preserve order of parametric tags
(Wojciech Meyer, report by Dario Texeira)
- PR#5551: Avoid repeated lookups for missing cmi files
(Alain Frisch)
- PR#5552: unrecognized gcc option -no-cpp-precomp
(Damien Doligez, report by Markus Mottl)
* PR#5580: missed opportunities for constant propagation
(Xavier Leroy and John Carr)
- PR#5611: avoid clashes betwen .cmo files and output files during linking
(Wojciech Meyer)
- PR#5662: typo in md5.c
(Olivier Andrieu)
- PR#5673: type equality in a polymorphic field
(Jacques Garrigue, report by Jean-Louis Giavitto)
- PR#5674: Methods call are 2 times slower with 4.00 than with 3.12
(Jacques Garrigue, Gabriel Scherer, report by Jean-Louis Giavitto)
- PR#5694: Exception raised by type checker
(Jacques Garrigue, report by Markus Mottl)
- PR#5695: remove warnings on sparc code emitter
(Fabrice Le Fessant)
- PR#5697: better location for warnings on statement expressions
(Dan Bensen)
- PR#5698: remove harcoded limit of 200000 labels in emitaux.ml
(Fabrice Le Fessant, report by Marcin Sawicki)
- PR#5702: bytecomp/bytelibrarian lib_sharedobjs was defined but never used
(Hongbo Zhang, Fabrice Le Fessant)
- PR#5708: catch Failure"int_of_string" in ocamldebug
(Fabrice Le Fessant, report by user 'schommer')
- PR#5712: (9) new option -bin-annot is not documented
(Damien Doligez, report by Hendrik Tews)
- PR#5731: instruction scheduling forgot to account for destroyed registers
(Xavier Leroy, Benedikt Meurer, reported by Jeffrey Scofield)
- PR#5734: improved Win32 implementation of Unix.gettimeofday
(David Allsopp)
- PR#5735: %apply and %revapply not first class citizens
(Fabrice Le Fessant, reported by Jun Furuse)
- PR#5738: first class module patterns not handled by ocamldep
(Fabrice Le Fessant, Jacques Garrigue, reported by Hongbo Zhang)
- PR#5739: Printf.printf "%F" (-.nan) returns -nan
(Xavier Leroy, David Allsopp, reported by Samuel Mimram)
- PR#5741: make pprintast.ml in compiler_libs
(Alain Frisch, Hongbo Zhang)
- PR#5747: 'unused open' warning not given when compiling with -annot
(Alain Frisch, reported by Valentin Gatien-Baron)
- PR#5752: missing dependencies at byte-code link with mlpack
(Wojciech Meyer, Nicholas Lucaroni)
- PR#5763: ocamlbuild does not give correct flags when running menhir
(Gabriel Scherer, reported by Philippe Veber)
- PR#5765: ocamllex doesn't preserve line directives
(Damien Doligez, reported by Martin Jambon)
- PR#5770: Syntax error messages involving unclosed parens are sometimes
incorrect
(Michel Mauny)
- PR#5772: problem with marshaling of mutually-recursive functions
(Jacques-Henri Jourdan, reported by Cédric Pasteur)
- PR#5775: several bug fixes for tools/pprintast.ml
(Hongbo Zhang)
- PR#5784: -dclambda option is ignored
(Pierre Chambart)
- PR#5785: misbehaviour with abstracted structural type used as GADT index
(Jacques Garrigue, report by Jeremy Yallop)
- PR#5787: Bad behavior of 'Unused ...' warnings in the toplevel
(Alain Frisch)
- PR#5793: integer marshalling is inconsistent between architectures
(Xavier Clerc, report by Pierre-Marie Pédrot)
- PR#5798: add ARM VFPv2 support for Raspbian (ocamlopt)
(Jeffrey Scofield and Anil Madhavapeddy, patch review by Benedikt Meurer)
- PR#5802: Avoiding "let" as a value name
(Jacques Garrigue, report by Tiphaine Turpin)
- PR#5805: Assert failure with warning 34 on pre-processed file
(Alain Frisch, report by Tiphaine Turpin)
- PR#5806: ensure that backtrace tests are always run (testsuite)
(Xavier Clerc, report by user 'michi')
- PR#5809: Generating .cmt files takes a long time, in case of type error
(Alain Frisch)
- PR#5810: error in switch printing when using -dclambda
(Pierre Chambart)
- PR#5811: Untypeast produces singleton tuples for constructor patterns
with only one argument
(Tiphaine Turpin)
- PR#5813: GC not called when unmarshaling repeatedly in a tight loop (ocamlopt)
(Xavier Leroy, report by David Waern)
- PR#5814: read_cmt -annot does not report internal references
(Alain Frisch)
- PR#5815: Multiple exceptions in signatures gives an error
(Leo P. White)
- PR#5816: read_cmt -annot does not work for partial .cmt files
(Alain Frisch)
- PR#5819: segfault when using [with] on large recursive record (ocamlopt)
(Xavier Leroy, Damien Doligez)
- PR#5821: Wrong record field is reported as duplicate
(Alain Frisch, report by Martin Jambon)
- PR#5824: Generate more efficient code for immediate right shifts.
(Pierre Chambart, review by Xavier Leroy)
- PR#5825: Add a toplevel primitive to use source file wrapped with the
coresponding module
(Grégoire Henry, Wojciech Meyer, caml-list discussion)
- PR#5833: README.win32 can leave the wrong flexlink in the path
(Damien Doligez, report by William Smith)
- PR#5835: nonoptional labeled arguments can be passed with '?'
(Jacques Garrigue, report by Elnatan Reisner)
- PR#5840: improved documentation for 'Unix.lseek'
(Xavier Clerc, report by Matej Košík)
- PR#5848: Assertion failure in type checker
(Jacques Garrigue, Alain Frisch, report by David Waern)
- PR#5858: Assert failure during typing of class
(Jacques Garrigue, report by Julien Signoles)
- PR#5865: assert failure when reporting undefined field label
(Jacques Garrigue, report by Anil Madhavapeddy)
- PR#5872: Performance: Buffer.add_char is not inlined
(Gerd Stolpmann, Damien Doligez)
- PR#5876: Uncaught exception with a typing error
(Alain Frisch, Gabriel Scherer, report by Julien Moutinho)
- PR#5877: multiple "open" can become expensive in memory
(Fabrice Le Fessant and Alain Frisch)
- PR#5880: 'Genlex.make_lexer' documention mentions the wrong exception
(Xavier Clerc, report by Virgile Prevosto)
- PR#5885: Incorrect rule for compiling C stubs when shared libraries are not
supported.
(Jérôme Vouillon)
- PR#5891: ocamlbuild: support rectypes tag for mlpack
(Khoo Yit Phang)
- PR#5892: GADT exhaustiveness check is broken
(Jacques Garrigue and Leo P. White)
- PR#5906: GADT exhaustiveness check is still broken
(Jacques Garrigue, report by Sébastien Briais)
- PR#5907: Undetected cycle during typecheck causes exceptions
(Jacques Garrigue, report by Pascal Zimmer)
- PR#5910: Fix code generation bug for "mod 1" on ARM.
(Benedikt Meurer, report by user 'jteg68')
- PR#5911: Signature substitutions fail in submodules
(Jacques Garrigue, report by Markus Mottl)
- PR#5912: add configure option -no-cfi (for OSX 10.6.x with XCode 4.0.2)
(Damien Doligez against XCode versions, report by Thomas Gazagnaire)
- PR#5914: Functor breaks with an equivalent argument signature
(Jacques Garrigue, report by Markus Mottl and Grégoire Henry)
- PR#5920, PR#5957: linking failure for big bytecodes on 32bit architectures
(Benoît Vaugon and Chet Murthy, report by Jun Furuse and Sebastien Mondet)
- PR#5928: Missing space between words in manual page for ocamlmktop
(Damien Doligez, report by Matej Košík)
- PR#5930: ocamldep leaks temporary preprocessing files
(Gabriel Scherer, report by Valentin Gatien-Baron)
- PR#5933: Linking is slow when there are functions with large arities
(Valentin Gatien-Baron, review by Gabriel Scherer)
- PR#5934: integer shift by negative amount (in otherlibs/num)
(Xavier Leroy, report by John Regehr)
- PR#5944: Bad typing performances of big variant type declaration
(Benoît Vaugon)
- PR#5945: Mix-up of Minor_heap_min and Minor_heap_max units
(Benoît Vaugon)
- PR#5948: GADT with polymorphic variants bug
(Jacques Garrigue, report by Leo P. White)
- PR#5953: Unix.system does not handle EINTR
(Jérémie Dimino)
- PR#5965: disallow auto-reference to a recursive module in its definition
(Alain Frisch, report by Arthur Windler via Gabriel Scherer)
- PR#5973: Format module incorrectly parses format string
(Pierre Weis, report by Frédéric Bour)
- PR#5974: better documentation for Str.regexp
(Damien Doligez, report by william)
- PR#5976: crash after recovering from two stack overflows (ocamlopt on MacOS X)
(Xavier Leroy, report by Pierre Boutillier)
- PR#5977: Build failure on raspberry pi: "input_value: integer too large"
(Alain Frisch, report by Sylvain Le Gall)
- PR#5981: Incompatibility check assumes abstracted types are injective
(Jacques Garrigue, report by Jeremy Yallop)
- PR#5982: caml_leave_blocking section and errno corruption
(Jérémie Dimino)
- PR#5985: Unexpected interaction between variance and GADTs
(Jacques Garrigue, Jeremy Yallop and Leo P. White and Gabriel Scherer)
- PR#5988: missing from the documentation: -impl is a valid flag for ocamlopt
(Damien Doligez, report by Vincent Bernardoff)
- PR#5989: Assumed inequalities involving private rows
(Jacques Garrigue, report by Jeremy Yallop)
- PR#5992: Crash when pattern-matching lazy values modifies the scrutinee
(Luc Maranget, Leo P. White)
- PR#5993: Variance of private type abbreviations not checked for modules
(Jacques Garrigue)
- PR#5997: Non-compatibility assumed for concrete types with same constructor
(Jacques Garrigue, report by Gabriel Scherer)
- PR#6004: Type information does not flow to "inherit" parameters
(Jacques Garrigue, report by Alain Frisch)
- PR#6005: Type unsoundness with recursive modules
(Jacques Garrigue, report by Jérémie Dimino and Josh Berdine)
- PR#6010: Big_int.extract_big_int gives wrong results on negative arguments
(Xavier Leroy, report by Drake Wilson via Stéphane Glondu)
- PR#6024: Format syntax for printing @ is incompatible with 3.12.1
(Damien Doligez, report by Boris Yakobowski)
- PR#6001: Reduce the memory used by compiling Camlp4
(Hongbo Zhang and Gabriel Scherer, report by Henri Gouraud)
- PR#6031: Camomile problem with -with-frame-pointers
(Fabrice Le Fessant, report by Anil Madhavapeddy)
- PR#6032: better Random.self_init under Windows
(Alain Frisch, Xavier Leroy)
- PR#6033: Matching.inline_lazy_force needs eta-expansion (command-line flags)
(Pierre Chambart, Xavier Leroy and Luc Maranget,
regression report by Gabriel Scherer)
- PR#6046: testsuite picks up the wrong ocamlrun dlls
(Anil Madhavapeddy)
- PR#6056: Using 'match' prevents generalization of values
(Jacques Garrigue, report by Elnatan Reisner)
- PR#6058: 'ocamlbuild -use-ocamlfind -tag thread -package threads t.cma' fails
(Gabriel Scherer, report by Hezekiah M. Carty)
- PR#6069: ocamldoc: lexing: empty token
(Maxence Guesdon, Grégoire Henry, report by ygrek)
- PR#6072: configure does not handle FreeBSD current (i.e. 10) correctly
(Damien Doligez, report by Prashanth Mundkur)
- PR#6074: Wrong error message for failing Condition.broadcast
(Markus Mottl)
- PR#6084: Define caml_modify and caml_initialize as weak symbols to help
with Netmulticore
(Xavier Leroy, Gerd Stolpmann)
- PR#6090: Module constraint + private type seems broken in ocaml 4.01.0
(Jacques Garrigue, report by Jacques-Pascal Deplaix)
- PR#6109: Typos in ocamlbuild error messages
(Gabriel Kerneis)
- PR#6123: Assert failure when self escapes its class
(Jacques Garrigue, report by whitequark)
- PR#6158: Fatal error using GADTs
(Jacques Garrigue, report by Jeremy Yallop)
- PR#6163: Assert_failure using polymorphic variants in GADTs
(Jacques Garrigue, report by Leo P. White)
- PR#6164: segmentation fault on Num.power_num of 0/1
(Fabrice Le Fessant, report by Johannes Kanig)
- PR#6210: Camlp4 location error
(Hongbo Zhang, report by Jun Furuse)
Feature wishes:
- PR#5181: Merge common floating point constants in ocamlopt
(Benedikt Meurer)
- PR#5243: improve the ocamlbuild API documentation in signatures.mli
(Christophe Troestler)
- PR#5546: moving a function into an internal module slows down its use
(Alain Frisch, report by Fabrice Le Fessant)
- PR#5597: add instruction trace option 't' to OCAMLRUNPARAM
(Anil Madhavapeddy, Wojciech Meyer)
- PR#5676: IPv6 support under Windows
(Jérôme Vouillon, review by Jonathan Protzenko)
- PR#5721: configure -with-frame-pointers for Linux perf profiling
(Fabrice Le Fessant, test by Jérémie Dimino)
- PR#5722: toplevel: print full module path only for first record field
(Jacques Garrigue, report by ygrek)
- PR#5762: Add primitives for fast access to bigarray dimensions
(Pierre Chambart)
- PR#5769: Allow propagation of Sys.big_endian in native code
(Pierre Chambart, stealth commit by Fabrice Le Fessant)
- PR#5771: Add primitives for reading 2, 4, 8 bytes in strings and bigarrays
(Pierre Chambart)
- PR#5774: Add bswap primitives for amd64 and arm
(Pierre Chambart, test by Alain Frisch)
- PR#5795: Generate sqrtsd opcode instead of external call to sqrt on amd64
(Pierre Chambart)
- PR#5827: provide a dynamic command line parsing mechanism
(Hongbo Zhang)
- PR#5832: patch to improve "wrong file naming" error messages
(William Smith)
- PR#5864: Add a find operation to Set
(François Berenger)
- PR#5886: Small changes to compile for Android
(Jérôme Vouillon, review by Benedikt Meurer)
- PR#5902: -ppx based pre-processor executables accept arguments
(Alain Frisch, report by Wojciech Meyer)
- PR#5986: Protect against marshaling 64-bit integers in bytecode
(Xavier Leroy, report by Alain Frisch)
- PR#6049: support for OpenBSD/macppc platform
(Anil Madhavapeddy, review by Benedikt Meurer)
- PR#6059: add -output-obj rules for ocamlbuild
(Anil Madhavapeddy)
- PR#6060: ocamlbuild tags 'principal', 'strict_sequence' and 'short_paths'
(Anil Madhavapeddy)
- ocamlbuild tag 'no_alias_deps'
(Daniel Bünzli)
Tools:
- OCamlbuild now features a bin_annot tag to generate .cmt files.
(Jonathan Protzenko)
- OCamlbuild now features a strict_sequence tag to trigger the
strict-sequence option.
(Jonathan Protzenko)
- OCamlbuild now picks the non-core tools like ocamlfind and menhir from PATH
(Wojciech Meyer)
- PR#5884: Misc minor fixes and cleanup for emacs mode
(Stefan Monnier)
- PR#6030: Improve performance of -annot
(Guillaume Melquiond, Alain Frisch)
OCaml 4.00.1:
-------------
Bug fixes:
- PR#4019: better documentation of Str.matched_string
- PR#5111: ocamldoc, heading tags inside spans tags is illegal in html
- PR#5278: better error message when typing "make"
- PR#5468: ocamlbuild should preserve order of parametric tags
- PR#5563: harden Unix.select against file descriptors above FD_SETSIZE
- PR#5690: "ocamldoc ... -text README" raises exception
- PR#5700: crash with native-code stack backtraces under MacOS 10.8 x86-64
- PR#5707: AMD64 code generator: do not use r10 and r11 for parameter passing,
as these registers can be destroyed by the dynamic loader
- PR#5712: some documentation problems
- PR#5715: configuring with -no-shared-libs breaks under cygwin
- PR#5718: false positive on 'unused constructor' warning
- PR#5719: ocamlyacc generates code that is not warning 33-compliant
- PR#5725: ocamldoc output of preformatted code
- PR#5727: emacs caml-mode indents shebang line in toplevel scripts
- PR#5729: tools/untypeast.ml creates unary Pexp_tuple
- PR#5731: instruction scheduling forgot to account for destroyed registers
- PR#5735: %apply and %revapply not first class citizens
- PR#5738: first class module patterns not handled by ocamldep
- PR#5742: missing bound checks in Array.sub
- PR#5744: ocamldoc error on "val virtual"
- PR#5757: GC compaction bug (crash)
- PR#5758: Compiler bug when matching on floats
- PR#5761: Incorrect bigarray custom block size
OCaml 4.00.0:
-------------
(Changes that can break existing programs are marked with a "*")
- The official name of the language is now OCaml.
Language features:
- Added Generalized Algebraic Data Types (GADTs) to the language.
See chapter "Language extensions" of the reference manual for documentation.
- It is now possible to omit type annotations when packing and unpacking
first-class modules. The type-checker attempts to infer it from the context.
Using the -principal option guarantees forward compatibility.
- New (module M) and (module M : S) syntax in patterns, for immediate
unpacking of a first-class module.
Compilers:
- Revised simplification of let-alias (PR#5205, PR#5288)
- Better reporting of compiler version mismatch in .cmi files
* Warning 28 is now enabled by default.
- New option -absname to use absolute paths in error messages
- Optimize away compile-time beta-redexes, e.g. (fun x y -> e) a b.
- Added option -bin-annot to dump the AST with type annotations.
- Added lots of new warnings about unused variables, opens, fields,
constructors, etc.
* New meaning for warning 7: it is now triggered when a method is overridden
with the "method" keyword. Use "method!" to avoid the warning.
Native-code compiler:
- Optimized handling of partially-applied functions (PR#5287)
- Small improvements in code generated for array bounds checks (PR#5345,
PR#5360).
* New ARM backend (PR#5433):
. Supports both Linux/EABI (armel) and Linux/EABI+VFPv3 (armhf).
. Added support for the Thumb-2 instruction set with average code size
savings of 28%.
. Added support for position-independent code, natdynlink, profiling and
exception backtraces.
- Generation of CFI information, and filename/line number debugging (with -g)
annotations, enabling in particular precise stack backtraces with
the gdb debugger. Currently supported for x86 32-bits and 64-bits only.
(PR#5487)
- New tool: ocamloptp, the equivalent of ocamlcp for the native-code compiler.
OCamldoc:
- PR#5645: ocamldoc doesn't handle module/type substitution in signatures
- PR#5544: improve HTML output (less formatting in html code)
- PR#5522: allow refering to record fields and variant constructors
- fix PR#5419 (error message in french)
- fix PR#5535 (no cross ref to class after dump+load)
* Use first class modules for custom generators, to be able to
load various plugins incrementally adding features to the current
generator
* PR#5507: Use Location.t structures for locations.
- fix: do not keep code when not told to keep code.
Standard library:
- Added float functions "hypot" and "copysign" (PR#3806, PR#4752, PR#5246)
* Arg: options with empty doc strings are no longer included in the usage string
(PR#5437)
- Array: faster implementations of "blit", "copy", "sub", "append" and "concat"
(PR#2395, PR#2787, PR#4591)
* Hashtbl:
. Statistically-better generic hash function based on Murmur 3 (PR#5225)
. Fixed behavior of generic hash function w.r.t. -0.0 and NaN (PR#5222)
. Added optional "random" parameter to Hashtbl.create to randomize
collision patterns and improve security (PR#5572, CVE-2012-0839)
. Added "randomize" function and "R" parameter to OCAMLRUNPARAM
to turn randomization on by default (PR#5572, CVE-2012-0839)
. Added new functorial interface "MakeSeeded" to support randomization
with user-provided seeded hash functions.
. Install new header <caml/hash.h> for C code.
- Filename: on-demand (lazy) initialization of the PRNG used by "temp_file".
- Marshal: marshalling of function values (flag Marshal.Closures) now
also works for functions that come from dynamically-loaded modules (PR#5215)
- Random:
. More random initialization (Random.self_init()), using /dev/urandom
when available (e.g. Linux, FreeBSD, MacOS X, Solaris)
* Faster implementation of Random.float (changes the generated sequences)
- Format strings for formatted input/output revised to correct PR#5380
. Consistently treat %@ as a plain @ character
. Consistently treat %% as a plain % character
- Scanf: width and precision for floating point numbers are now handled
- Scanf: new function "unescaped" (PR#3888)
- Set and Map: more efficient implementation of "filter" and "partition"
- String: new function "map" (PR#3888)
Installation procedure:
- Compiler internals are now installed in `ocamlc -where`/compiler-libs.
The files available there include the .cmi interfaces for all compiler
modules, plus the following libraries:
ocamlcommon.cma/.cmxa modules common to ocamlc, ocamlopt, ocaml
ocamlbytecomp.cma/.cmxa modules for ocamlc and ocaml
ocamloptcomp.cma/.cmxa modules specific to ocamlopt
ocamltoplevel.cma modules specific to ocaml
(PR#1804, PR#4653, frequently-asked feature).
* Some .cmi for toplevel internals that used to be installed in
`ocamlc -where` are now to be found in `ocamlc -where`/compiler-libs.
Add "-I +compiler-libs" where needed.
* toplevellib.cma is no longer installed because subsumed by
ocamlcommon.cma ocamlbytecomp.cma ocamltoplevel.cma
- Added a configuration option (-with-debug-runtime) to compile and install
a debug version of the runtime system, and a compiler option
(-runtime-variant) to select the debug runtime.
Bug Fixes:
- PR#1643: functions of the Lazy module whose named started with 'lazy_' have
been deprecated, and new ones without the prefix added
- PR#3571: in Bigarrays, call msync() before unmapping to commit changes
- PR#4292: various documentation problems
- PR#4511, PR#4838: local modules remove polymorphism
* PR#4549: Filename.dirname is not handling multiple / on Unix