forked from ocaml/ocaml
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathChanges
4727 lines (4229 loc) · 212 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.03.0:
-------------
(Changes that can break existing programs are marked with a "*")
Language features:
- PR#5528: inline records for constructor arguments (Alain Frisch)
- PR#6220, PR#6403, PR#6437, PR#6801:
Improved redundancy and exhaustiveness checks for GADTs.
Namely, the redundancy checker now checks whether the uncovered pattern
of the pattern is actually inhabited, exploding at most one wild card.
This is also done for exhaustiveness when there is only one case.
Additionnally, one can now write unreachable cases, of the form,
"pat -> .", which are treated by the redundancy check. (Jacques Garrigue)
- PR#6374: allow "_ t" as a short-hand for "(_, _, ..) t" for n-ary type
constructors (Alain Frisch)
- PR#6714: allow [@@ocaml.warning] on most structure and signature items:
values, modules, module types
(whitequark)
- GPR#26: support for "(type a b)" as syntactic sugar for "(type a) (type b)"
(Gabriel Scherer)
- GPR#42: short functor type syntax: "S -> T" for "functor (_ : S) -> T"
(Leo White)
- GPR#88: allow field punning in object copying expressions:
{< x; y; >} is sugar for {< x = x; y = y; >}
(Jeremy Yallop)
- GPR#167: allow to annotate externals' arguments and result types so
they can be unboxed or untagged. Supports untagging int and unboxing
int32, int64, nativeint and float.
(Jérémie Dimino, Mark Shinwell)
- GPR240: replace special annotations on externals by attributes:
* "float" is generalized to [@@unboxed]
* "noalloc" becomes [@@noalloc]
Deprecate "float" and "noalloc".
(Jérémie Dimino)
- GPR#254: @ocaml.warn_on_literal_pattern attribute on constructors to
warn when the argument is matches against a constant pattern. This
attribute is applied on predefined exception constructors which
take an purely informational (with no stability guarantee) message.
(Alain Frisch)
- GPR#268: hexadecimal notation for floating-point literals
In OCaml source code, FP literals can be written using the hexadecimal
notation 0x<mantissa in hex>p<exponent> from ISO C99.
(Xavier Leroy)
- GPR#173: [@inline] and [@inlined] attributes (for function declarations
and call sites respectively) to control inlining
(Pierre Chambart, Mark Shinwell)
- PR#6806: Syntax shortcut for putting a type annotation on a record field
(Valentin Gatien-Baron, review by Jérémie Dimino)
- PR#6806: Allow type annotations before the "->" in "fun <args> -> <expr>"
(Valentin Gatien-Baron, review by Jérémie Dimino)
- GPR#282: change short-paths penalty heuristic to assign the same cost to
idents containing double underscores as to idents starting with an underscore
(Thomas Refis, Leo White)
- GPR#273: allow to get the extension slot of an extension constructor
by writing [%extension_constructor <path>]
(Jérémie Dimino)
- PR#6681 GPR#326: signature items are now accepted as payloads for
extension and attributes, using the syntax [%foo: SIG ] or [@foo: SIG ].
(Alain Frisch and Gabriel Radanne)
Compilers:
- PR#4080, PR#6537, PR#5333: fix stack overflow in the compiler when -pack'ing
a module
that includes a module of the same name (Alain Frisch)
- PR#4231, PR#5461: (interim solution) warning 31 is now fatal by default
- PR#4800: better compilation of tuple assignment (Gabriel Scherer and
Alain Frisch)
- PR#5995: keep -for-pack into account to name exceptions; document -for-pack
as mandatory for bytecode as well (Alain Frisch, report by Christophe
Troestler)
- PR#6400: better error message for '_' used as an expression
(Alain Frisch, report by whitequark)
- PR#6501: harden the native-code generator against certain uses of "%identity"
(Xavier Leroy, report by Antoine Miné).
- PR#6636: add --version option
(whitequark)
- improve type-specialization of unapplied primitives
(Frédéric Bour, review by Gabriel Scherer)
- PR#6737: fix Typedtree attributes on (fun x -> body) expressions
- PR#6679: fix pprintast printing of constraints in type declarations
- PR#6845: -no-check-prims to tell ocamlc not to check primitives in runtime
* PR#6865: remove special case for parsing "let _ = expr" in structures
(Jérémie Dimino, Alain Frisch)
* PR#6438: Pattern guard disables exhaustiveness check
(Alain Frisch)
- PR#6939: Segfault with improper use of let-rec (Alain Frisch)
- PR#6943: native-code generator for POWER/PowerPC 64 bits, both in
big-endian (ppc64) and little-endian (ppc64le) configuration.
(Xavier Leroy, with inspiration from RedHat's unofficial ppc64 and ppc64le
ports)
- PR#6979: better code generation in x86-32 backend for copying floats to
the stack (Marc Lasson, review by Xavier Leroy)
- PR#7018: fix missing identifier renaming during inlining (Alain Frisch,
review by Xavier Leroy)
- PR#7026, GPR#288: remove write barrier for polymorphic variants without
arguments
(Simon Cruanes)
- PR#7031: new warning, ambiguous guarded or-patterns (Luc Maranget,
Gabriel Scherer, report by Martin Clochard and Claude Marché).
- PR#7067: Performance regression in the native compiler for long
nested structures (Alain Frisch, report by Daniel Bünzli, review
by Jacques Garrigue)
- PR#7097: Strange syntax error message around illegal packaged module signature
constraints (Alain Frisch, report by Jun Furuse)
- GPR#17: some cmm optimizations of integer operations with constants
(Stephen Dolan, review by Pierre Chambart)
- GPR#109: new unboxing strategy for float and int references (Vladimir Brankov,
review by Alain Frisch)
- GPR#107: Prevent more unnecessary float boxing, especially in `if` and `match`
(Vladimir Brankov, review by Alain Frisch)
- GPR#115: More precise typing of values at the C-- and Mach level,.
(Xavier Leroy, review by Pierre Chambart)
- GPR#207: Colors in compiler messages (warnings, errors)
(Simon Cruanes, review by Gabriel Scherer)
- GPR#258: more precise information on PowerPC instruction sizes
(Pierre Chambart, Xavier Leroy)
- PR#7022, GPR#259: unbox float and boxed ints earlier, avoid second pass
(Alain Frisch)
- PR#7064, GPR#316: allowing to mark compilation units and sub-modules as
deprecated (Alain Frisch)
- GPR#263: improve code generation for if-equivalents of (&&) and (||)
(Pierre Chambart)
- GPR#271: Fix incorrect mutability flag when records are built using "with"
(Mark Shinwell)
- GPR#270: Make [transl_exception_constructor] generate [Immutable] blocks
(Mark Shinwell)
- GPR#275: native-code generator for IBM z System running Linux.
In memoriam Gene Amdahl, 1922-2015.
(Bill O'Farrell, Tristan Amini, Xavier Leroy)
- GPR#282: relax short-paths safety check in presence of module aliases, take
penalty into account while building the printing map.
(Thomas Refis, Leo White)
- GPR#306: Instrument the compiler to debug performance regressions
(Pierre Chambart)
- GPR#319: add warning for missing cmx files, and extend -opaque option to mli
files.
(Leo White)
- PR#6920: fix debug informations around uses of %apply or %revapply
(Jérémie Dimino)
Runtime system:
- PR#3612: allow allocating custom block with finalizers in the minor heap
(Pierre Chambart)
- PR#6517: use ISO C99 types {,u}int{32,64}_t in preference to our homegrown
types {,u}int{32,64}.
(Xavier Leroy)
- PR#6760: closures evaluated in the toplevel can now be marshalled
(whitequark, review by Jacques-Henri Jourdan)
- PR#6902, GPR#210: runtime emits a warning when finalizing an I/O channel
which is still open (Alain Frisch, review by Damien Doligez);
this is controlled by OCAMLRUNPARAM=W=1 or with Sys.enable_runtime_warnings.
- Signal handling: for read-and-clear, use GCC/Clang atomic builtins
if available. (Xavier Leroy)
- PR#6910, GPR#224: marshaling (output_value, input_value, et al)
now support marshaled data bigger than 4 Gb. (Xavier Leroy)
- GPR#226: select higher levels of optimization for GCC and Clang when
compiling the run-time system and C stub code. (Xavier Leroy)
- GPR#262: Multiple GC roots per compilation unit (Pierre Chambart, Mark
Shinwell, review by Damien Doligez)
- GPR#325: Add v=0x400 flag to OCAMLRUNPARAM to display GC stats on exit (Louis
Gesbert, review by Alain Frisch)
- GPR#297: Several changes to improve the worst-case GC pause time.
(Damien Doligez, with help from Leo White and Francois Bobot)
Standard library:
- PR#5197, GPR#63: Arg: allow flags such as --flag=arg as well as --flag arg
(Richard Jones)
- PR#6017, PR#7034, GPR#267: More efficient ifprintf implementation
(Jeremy Yallop, review by Gabriel Scherer)
- PR#6296: Some documentation on the floating-point representations
recognized by Pervasives.float_of_string
(Xavier Leroy)
- PR#6316: Scanf.scanf failure on %u formats when reading big integers
(Xavier Leroy, Benoît Vaugon)
- PR#6321: guarantee that "hypot infinity nan = infinity"
(for conformance with ISO C99) (Xavier Leroy)
- PR#6390, GPR#36: expose Sys.{int_size,max_wosize} for improved js_of_ocaml
portability (Hugo Heuzard)
- PR#6449: Add Map.union (Alain Frisch)
* PR#6494: Add equal function in modules
Bytes, Char, Digest, Int32, Int64, Nativeint, and String
(Romain Calascibetta)
* PR#6524, GPR#79: Filename: Optional ?perms argument to open_temp_file
(Daniel Bünzli, review by Jacques-Pascal Deplaix)
* PR#6525, GPR#80: Add Uchar module to the standard library
(Daniel Bünzli, review by Yoriyuki Yamagata and Damien Doligez)
- PR#6577: improve performance of %L, %l, %n, %S, %C format specifiers
(Alain Frisch)
- PR#6585: fix memory leak in win32unix/createprocess.c
- PR#6649, GPR#222: accept (int_of_string "+3")
(Christopher McAlpine)
- PR#6645, GPR#174: Guarantee that Set.add, Set.remove, Set.filter
return the original set if no change is required (Alain Frisch,
Mohamed Iguernlala)
- GPR#175: Guarantee that Map.add, Map.remove, Map.filter
return the original map if no change is required.
(Mohamed Iguernlala)
- PR#6694, PR#6695: deprecate functions using ISO-8859-1 character set
in Char, Bytes, String and provide alternatives using US-ASCII.
(whitequark)
- GPR#164: more efficient (branchless) implementation of Pervasives.compare
specialized at type 'float'.
(Vladimir Brankov)
- GPR#201: generalize types of Printf.{ifprintf,ikfprintf}
(Maxence Guesdon)
- GPR#216: add the missing POSIX.1-2001 signals in Sys
(Guillaume Bury)
- GPR#239: remove type-unsafe code from Stream
(Pierre Chambart, review by Gabriel Scherer and Jeremy Yallop)
- GPR#250: Check for negative start element in Array.sub
(report and fix by Jeremy Yallop)
- GPR#265: new implementation of Queue avoiding Obj.magic
(Jérémie Dimino)
- GPR#268, GPR#303: '%h' and '%H' modifiers for printf and scanf to
support floating-point numbers in hexadecimal notation
(Xavier Leroy, Benoît Vaugon)
- GPR#272: Switch classify_float to [@@unboxed] (Alain Frisch)
- Improve speed of classify_float by not going through fpclassify()
(Alain Frisch, Xavier Leroy)
- GPR#277: Switch the following externals to [@@unboxed]:
* {Nativeint,Int32,Int64}.{of,to}_float
* Int{32,64}.float_of_bits
* Int{32,64}.bits_of_float
(Jérémie Dimino)
- GPR#281: Switch the following externals to [@@unboxed]:
* Sys.time (and [@@noalloc])
* Pervasives.ldexp (and [@@noalloc])
* Pervasives.compare for float, nativeint, int32, int64.
(Bobot François)
- GPR#329: Add exists, for_all, mem and memq functions in Array
(Bernhard Schommer)
- GPR#356: Add [Format.kasprintf] (Jérémie Dimino, Mark Shinwell)
Type system:
- PR#5545: Type annotations on methods cannot control the choice of abbreviation
* PR#6465: allow incremental weakening of module aliases (Jacques Garrigue).
This is done by adding equations to submodules when expanding aliases.
In theory this may be incompatible is some corner cases defining a module
type through inference, but no breakage known on published code.
- PR#6593: Functor application in tests/basic-modules fails after commit 15405
Toplevel and debugger:
- PR#6113: Add descriptions to directives, and display them via #help
(Nick Giannarakis, Berke Durak, Francis Southern and Gabriel Scherer)
- PR#6396: Warnings-as-errors not properly flushed in the toplevel
(Alain Frisch)
- PR#6468: toplevel now supports backtraces if invoked with OCAMLRUNPARAM=b
(whitequark and Jake Donham,
review by Gabriel Scherer and Jacques-Henri Jourdan)
- PR#6935, GPR#298: crash in debugger when load_printer is given a directory
(Junsong Li, review by Gabriel Scherer)
- PR#6401: use proper error reporting for toplevel's environment
initialization (Gabriel Scherer)
- PR#7081: report preprocessor warnings in the toplevel
(Valentin Gatien-Baron, review by Jérémie Dimino)
- PR#7098: Loss of ppx context in toplevel after an exception
(Alain Frisch, report by whitequark)
- PR#7101: The toplevel does not close in_channel for libraries specified on
its command line (Alain Frisch)
- PR#7119: ocaml doesn't respect [@@@warning] (Alain Frisch, report by
Gabriel Radanne)
Other libraries:
* Unix library: channels created by Unix.in_channel_of_descr or
Unix.out_channel_of_descr no longer support text mode under Windows.
Calling [set_binary_mode_{in,out} chan false] on these channels
now causes an error.
- PR#4023 and GPR#68: add Unix.sleepf (sleep with sub-second resolution)
(Evgenii Lepikhin and Xavier Leroy)
* Protect Unix.sleep against interruptions by handled signals.
Before, a handled signal could cause Unix.sleep to return early.
Now, the sleep is restarted until the given time is elapsed.
(Xavier Leroy)
- PR#6289: Unix.utimes uses the current time only if both arguments
are exactly 0.0. Also, use sub-second resolution if available.
(Xavier Leroy, report by Christophe Troestler)
- PR#6896: serious reimplementation of Big_int.float_of_big_int and
Ratio.float_of_ratio, ensuring that the result is correctly rounded.
(Xavier Leroy)
- PR#6989: in Str library, make sure that all \(...\) groups are binding
and can be consulted with Str.matched_group. There used to be
a limitation to 32 binding groups.
(Xavier Leroy)
- PR#7013: spurious wake-up in the Event module
(Xavier Leroy)
- PR#7024: in documentation of Str regular expressions, clarify what
"end of line" means for "^" and "$" regexps.
OCamlbuild:
- PR#6794, PR#6809: pass package-specific include flags when building C files
(Jérémie Dimino, request by whitequark)
- GPR#208: add "asm" tag to ocamlbuild to enable flag -S
(ygrek)
- Changed OCamlbuild's license to LGPLv2 with static linking exception.
- GPR#219: speedup target-already-built builds
(ygrek)
- PR#6605, GPR#117: use ocamlfind, if available, to discover camlp4 path
(Vincent Laporte)
OCamldep:
- GRP#286: add support for module aliases
(jacques Garrigue)
Manual:
- GPR#302: The OCaml reference manual is now included in the manual/
subdirectory of the main OCaml source repository. Contributions to
the manual are warmly welcome.
(François Bobot, review by Florian Angeletti)
- MPR#6676: ongoing simplification of the "Language Extensions" section
(Alain Frisch, John Whitington)
- MPR#7092, GPR#379: Add missing documentation for new 4.03 features
(Florian Angeletti)
- MPR#7109, GPR#380: Fix bigarray documentation layout
(Florian Angeletti, Leo White)
Bug fixes:
- PR#3612: memory leak in bigarray read from file
(Pierre Chambart, report by Gary Huber)
* PR#4166, PR#6956: force linking when calling external C primitives
(Jacques Garrigue, reports by Markus Mottl and Christophe Troestler)
* PR#4466, PR#5325: under Windows, concurrent read and write operations
on the same socket could block unexpectedly. Fixed by keeping sockets
in asynchronous mode rather than creating them in synchronous mode.
(Xavier Leroy)
* PR#4539: change exception string raised when comparing functional values
(Nicolas Braud-Santoni, report by Eric Cooper)
- PR#4832: Filling bigarrays may block out runtime
(Markus Mottl)
- PR#5663: program rejected due to nongeneralizable type variable that
appears nowhere
(Jacques Garrigue, report by Stephen Weeks)
- PR#5780: Strange type variable names in error messages (GADTs)
(only made the names more informative)
(Jacques Garrigue, report by Sebastien Furic)
- PR#5887: move the byterun/*.h headers to byterun/caml/*.h to avoid header
name clashes
(Jérôme Vouillon and Adrien Nader and whitequark)
* PR#6081: ocaml should add script's directory to search path, not current
directory
(Thomas Leonard and Damien Doligez)
- PR#6108, PR#6802: fail cleanly if dynlink.cma or ocamltoplevel.cma
are loaded inside the toplevel loop.
(Xavier Leroy)
- PR#6171: Error message confusing when a type escapes its scope.
- PR#6340: Incorrect handling of \r when processing "Windows" source files
(Damien Doligez, report by David Allsopp)
- PR#6342: Incorrect error message when type constraints differ
(Alain Frisch, report by Philippe Wang)
* PR#6521: {Bytes,Char,String}.escaped are locale-dependent
(Damien Doligez, report by Jun Furuse)
- PR#6526: ocamllex warning: unescaped newline in comment string
(Damien Doligez, report by user 'dhekir')
- PR#6341: ocamldoc -colorize-code adds spurious <br> tags to <pre> blocks
- PR#6560: Wrong failure message for {Int32,Int64,NativeInt}.of_string
(Maxime Dénès and Gabriel Scherer)
- PR#6648: show_module should indicate its elision
- PR#6650: Cty_constr not handled correctly by Subst
- PR#6651: Failing component lookup
* PR#6664: Crash when finalising lazy values of the wrong type.
(Damien Doligez)
- PR#6672: Unused variance specification allowed in with constraint
- PR#6744: Univars can escape through polymorphic variants (partial fix)
- PR#6752: Extensible variant types and scope escaping
- PR#6762: improve warning 45 in presence of re-exported type definitions
(Alain Frisch, report by Olivier Andrieu)
- PR#6776: Failure to kill the "tick" thread, segfault when exiting the runtime
- PR#6780: Poor error message for wrong -farch and -ffpu options (ocamlopt, ARM)
- PR#6805: Duplicated expression in case of hole in a non-failing switch.
(Luc Maranget)
- PR#6808: the parsing of OCAMLRUNPARAM is too lax
(Damien Doligez)
- PR#6874: Inefficient code generated for module function arguments
- PR#6897: Bad error message for some pattern matching on extensible variants
- PR#6899: Optional parameters and non generalizable type variables
(Thomas Refis and Leo White)
- PR#6907: Stack overflow printing error in class declaration
- PR#6931: Incorrect error message
- PR#6938: fix regression on "%047.27{l,L,n}{d,i,x,X,o,u}"
(Benoît Vaugon, report by Arduino Cascella)
- PR#6944: let module X = Path in … is not typed as a module alias
(Jacques Garrigue, report by def)
- PR#6945 and GPR#227: protect Sys and Unix functions against string
arguments containing the null character '\000'
(c-cube and Xavier Leroy, report by Daniel Bünzli)
- PR#6946: Uncaught exception with wrong type for "%ignore"
- PR#6954: Infinite loop in type checker with module aliases
- PR#6972, GPR#276: 4.02.3 regression on documentation comments in .cmt files
(Leo White, report by Olivier Andrieu)
- PR#6980: Assert failure from polymorphic variants and existentials
- PR#6981: Ctype.Unify(_) with associated functor arg refering to previous one
- PR#6982: unexpected type error when packing a module alias
- PR#6985: `module type of struct include Bar end exposes
%s#row when Bar contains private row types
- PR#6992: Segfault from bug in GADT/module typing
- PR#6993: Segfault from recursive modules violating exhaustiveness assumptions
- PR#6998: Typer fails reading unnecessary cmis with -no-alias-deps and -w -49
(Leo White, report by Valentin Gatien-Baron)
- PR#7003: String.sub causes segmentation fault
(Damien Doligez, report by Radek Micek)
- PR#7008: Fatal error in ocamlc with empty compilation unit name
(Damien Doligez, report by Cesar Kunz)
- PR#7012: Variable name forgotten when it starts with a capital letter
(Jacques Garrigue, Gabriel Scherer,
report by Thomas Leonard and Florian Angeletti)
- PR#7016: Stack overflow in GADT typing
- PR#7030: libasmrun_shared.so fails to build on SPARC Solaris
(report and fix by Patrick Star)
- PR#7036: Module alias is not taken into account when checking module
type compatibility (in a class type) (Jacques Garrigue)
- PR#7037: more reproducible builds, don't put temp file names into objects
(Xavier Leroy)
- PR#7038: out of memory condition in caml_io_mutex_lock
(Xavier Leroy, report by Marc Lasson)
- PR#7039: Unix.getsockname returns garbage for unnamed PF_UNIX sockets
(Xavier Leroy)
- PR#7042 and GPR#295: CSE optimization confuses the FP literals +0.0 and -0.0
(Xavier Leroy)
- PR#7075: Fix repetitions in ocamldoc generated documentation
(Florian Angeletti)
- PR#7082: Object type in recursive module's `with` annotation
- PR#7108: ocamldoc, have -html preserve custom/extended html generators
(Armaël Guéneau)
- PR#7096: ocamldoc uses an incorrect subscript/superscript style
- PR#7115: shadowing in a branch of a GADT match breaks unused variable
warning (Alain Frisch, report by Valentin Gatien-Baron)
- GPR#205: Clear caml_backtrace_last_exn before registering as root
(report and fix by Frederic Bour)
- GPR#220: minor -dsource error on recursive modules
(Hongbo Zhang)
- GPR#228: fix a dangling internal pointer in (bytecode )debug_info
(Gabriel Scherer and Mark Shinwell and Xavier Leroy)
- GPR#233: Make CamlinternalMod.init_mod robust to optimization
(Pierre Chambart, Mark Shinwell)
- GPR#249: fix a few hardcoded ar commands
(Daniel Bünzli)
- GPR#251: fix cross-compilation with ocamldoc enabled
(whitequark)
- GPR#280: Fix stdlib dependencies for .p.cmx (Pierre Chambart,
Mark Shinwell)
- GPR#283: Fix memory leaks in intern.c when OOM is raised
(Marc Lasson, review by Alain Frisch)
- GPR#313: Prevent quadratic cases in CSE
(Pierre Chambart, review by Xavier Leroy)
- PR#6795, PR#6996: Make ocamldep report errors passed in
[%ocaml.error] extension points
(Jérémie Dimino)
- GPR#355: make ocamlnat build again
(Jérémie Dimino, Thomas Refis)
- GPR#405: fix compilation under Visual Studio 2015
(David Allsopp)
Features wishes:
- PR#4518, GPR#29: change location format for reporting errors in ocamldoc
(Sergei Lebedev)
- PR#4714: List.cons
- PR#5418 (comments) : generate dependencies with $(CC) instead of gcc
- PR#6167: OCAMLPARAM support for disabling PIC generation ("pic=0")
(Gabor Pali)
- PR#6367: introduce Asttypes.arg_label to encode labelled arguments
- PR#6452, GPR#140: add internal suport for custom printing formats
(Jérémie Dimino)
- PR#6611: remove the option wrapper on optional arguments in the syntax tree
- PR#6635: support M.[], M.(), M.{< >} and M.[| |]
(Jeremy Yallop, review by Gabriel Radanne)
- PR#6691: install .cmt[i] files for stdlib and compiler-libs
(David Sheets, request by Gabriel Radanne)
- PR#6722: compatibility with x32 architecture (x86-64 in ILP32 mode).
ocamlopt is not supported, but bytecode compiles cleanly.
- PR#6742: remove duplicate virtual_flag information from Tstr_class
- PR#6719: improve Buffer.add_channel when not enough input is available
(Simon Cruanes)
* PR#6816: reject integer and float literals directly followed by an identifier.
This was prevously read as two separate tokens.
[let abc = 1 in (+) 123abc] was accepted and is now rejected.
(Hugo Heuzard)
- PR#6876: improve warning 6 by listing the omitted labels.
(Eyyüb Sari)
- PR#6924: tiny optim to avoid some spilling of floats in x87
(Alain Frisch)
- GPR#111: `(f [@taillcall]) x y` warns if `f x y` is not a tail-call
(Simon Cruanes)
- GPR#118: ocamldep -allow-approx: fallback to a lexer-based approximation
(Frédéric Bour)
- GPR#137: add untypeast.ml (in open recursion style) to compiler-libs
(Gabriel Radanne)
- GPR#142: add a CAMLdrop macro for undoing CAMLparam*/CAMLlocal*
- GPR#145: speeedup bigarray access by optimizing Cmmgen.bigarray_indexing
(Vladimir Brankov, review by Gabriel Scherer)
- GPR#147: [type 'a result = Ok of 'a | Error of 'b] in Pervasives
(Yaron Minsky)
- GPR#156, GPR#279: optimize caml_frame_descriptors realloc (dynlink speedup)
(Pierre Chambart, Alain Frisch,
review by François Bobot, Xavier Leroy and Damien Doligez)
- GPR#191: Making gc.h and some part of memory.h public
(Thomas Refis)
- GPR#196: Make [Thread.id] and [Thread.self] [noalloc]
(Clark Gaebel)
- GPR#165, GPR#221: fix windows compilation warnings
(Bernhard Schommer, Gabriel Scherer, report by Alain Frisch)
- GPR#189: Added .dylib and .so as extensions for ocamlmklib
(Edgar Aroutiounian, whitequark)
- GPR#237: a CONTRIBUTING document
(François Bobot, Gabriel Scherer, review by Xavier Leroy)
- GPR#245: remove a few remaining French comments
(Florian Angeletti)
- GPR#252: improve build instructions in MSVC Windows README
(Philip Daian)
* GPR#170: Parse arbitrary precision integers.
Accept a single [A-Za-z] as modifier for integers (generalizing 'l','L','n')
and floats.
May cause breakage (ie. ppx preprocessor) because of changes in the parsetree.
This changes PR#6816 a little bit by reading the literal [123a] as a single
token that can later be rewritten by a ppx preprocessor.
(Hugo Heuzard)
- GPR#308: add experimental support for NetBSD/arm (verified on RaspberryPi)
(Rich Neswold)
- GPR#365: prevent printing just a single type variable on one side
of a type error clash. (Hugo Heuzard)
- GPR#383: configure: define _ALL_SOURCE for build on AIX7.1
(tkob)
OCaml 4.02.3 (27 Jul 2015):
---------------------------
Bug fixes:
- PR#6908: Top-level custom printing for GADTs: interface change in 4.02.2
(Grégoire Henry, report by Jeremy Yallop)
- PR#6919: corrupted final_table
(ygrek)
- PR#6926: Regression: ocamldoc lost unattached comment
(Damien Doligez, report by François Bobot)
- PR#6930: Aliased result type of GADT constructor results in assertion failure
(Jacques Garrigue)
Feature wishes:
- PR#6691: install .cmt[i] files for stdlib and compiler-libs
(David Sheets, request by Gabriel Radanne)
- GPR#37: New primitive: caml_alloc_dummy_function
(Hugo Heuzard)
OCaml 4.02.2 (17 Jun 2015):
---------------------------
(Changes that can break existing programs are marked with a "*")
Language features:
- PR#6583: add a new class of binary operators with the same syntactic
precedence as method calls; these operators start with # followed
by a non-empty sequence of operator symbols (for instance #+, #!?).
It is also possible to use '#' as part of these extra symbols
(for instance ##, or #+#); this is rejected by the type-checker,
but can be used e.g. by ppx rewriters.
(Alain Frisch, request by Gabriel Radanne)
* PR#6016: add a "nonrec" keyword for type declarations
(Jérémie Dimino)
* PR#6612, GPR#152: change the precedence of attributes in type declarations
(Jérémie Dimino)
Compilers:
- PR#6600: make -short-paths faster by building the printing map
incrementally
(Jacques Garrigue)
- PR#6642: replace $CAMLORIGIN in -ccopt with the path to cma or cmxa
(whitequark, Gabriel Scherer, review by Damien Doligez)
- PR#6797: new option -output-complete-obj
to output an object file with included runtime and autolink libraries
(whitequark)
- PR#6845: -no-check-prims to tell ocamlc not to check primitives in runtime
(Alain Frisch)
- GPR#149: Attach documentation comments to parse tree
(Leo White)
- GPR#159: Better locations for structure/signature items
(Leo White)
Toplevel and debugger:
- PR#5958: generalized polymorphic #install_printer
(Pierre Chambart and Grégoire Henry)
OCamlbuild:
- PR#6237: explicit "infer" tag to control or disable menhir --infer
(Hugo Heuzard)
- PR#6625: pass -linkpkg to files built with -output-obj.
(whitequark)
- PR#6702: explicit "linkpkg" and "dontlink(foo)" flags
(whitequark, Gabriel Scherer)
- PR#6712: Ignore common VCS directories
(whitequark)
- PR#6720: pass -g to C compilers when tag 'debug' is set
(whitequark, Gabriel Scherer)
- PR#6733: add .byte.so and .native.so targets to pass
-output-obj -cclib -shared.
(whitequark)
- PR#6733: "runtime_variant(X)" to pass -runtime-variant X option.
(whitequark)
- PR#6774: new menhir-specific flags "only_tokens" and "external_tokens(Foo)"
(François Pottier)
Libraries:
- PR#6285: Add support for nanosecond precision in Unix.stat()
(Jérémie Dimino, report by user 'gfxmonk')
- PR#6781: Add higher baud rates to Unix termios
(Damien Doligez, report by Berke Durak)
- PR#6834: Add Obj.{first,last}_non_constant_constructor_tag
(Mark Shinwell, request by Gabriel Scherer)
Runtime:
- PR#6078: Release the runtime system when calling caml_dlopen
(Jérémie Dimino)
- PR#6675: GC hooks
(Damien Doligez and Roshan James)
Build system:
- PR#5418 (comments) : generate dependencies with $(CC) instead of gcc
(Damien Doligez and Michael Grünewald)
- PR#6266: Cross compilation for iOs, Android etc
(whitequark, review by Damien Doligez and Mark Shinwell)
Installation procedure:
- Update instructions for x86-64 PIC mode and POWER architecture builds
(Mark Shinwell)
Bug fixes:
- PR#5271: Location.prerr_warning is hard-coded to use Format.err_formatter
(Damien Doligez, report by Rolf Rolles)
- PR#5395: OCamlbuild mishandles relative symlinks and include paths
(Damien Doligez, report by Didier Le Botlan)
- PR#5822: wrong value of Options.ext_dll on windows
(Damien Doligez and Daniel Weil)
- PR#5836, PR#6684: printing lazy values in ocamldebug may segfault
(Gabriel Scherer, request by the Coq team)
- PR#5887: move the byterun/*.h headers to byterun/caml/*.h to avoid
header name clashes
(Jérôme Vouillon and Adrien Nader and whitequark)
- PR#6281: Graphics window does not acknowledge second click (double click)
(Kyle Headley)
- PR#6490: incorrect backtraces in gdb on AArch64. Also fixes incorrect
backtraces on 32-bit ARM.
(Mark Shinwell)
- PR#6573: extern "C" for systhreads/threads.h
(Mickaël Delahaye)
- PR#6575: Array.init evaluates callback although it should not do so
(Alain Frisch, report by Gerd Stolpmann)
- PR#6607: The manual doesn't mention 0x200 flag for OCAMLRUNPARAM=v
(Alain Frisch)
- PR#6616: allow meaningful use of -use-runtime without -custom.
(whitequark)
- PR#6617: allow android build with pthreads support (since SDK r10c)
(whitequark)
- PR#6626: ocamlbuild on cygwin cannot find ocamlfind
(Gergely Szilvasy)
- PR#6628: Configure script rejects legitimate arguments
(Michael Grünewald, Damien Doligez)
- PR#6630: Failure of tests/prim-bigstring/{big,}string.ml on big-endian
architectures
(Pierre Chambart, testing by Mark Shinwell)
- PR#6640: ocamlbuild: wrong "unused tag" warning on "precious"
(report by user 'william')
- PR#6652: ocamlbuild -clean does not print a newline after output
(Damien Doligez, report by Andi McClure)
- PR#6658: cross-compiler: version check not working on OS X
(Gerd Stolpmann)
- PR#6665: Failure of tests/asmcomp on sparc
(Stéphane Glondu)
- PR#6667: wrong implementation of %bswap16 on ARM64
(Xavier Leroy)
- PR#6669: fix 4.02 regression in toplevel printing of lazy values
(Leo White, review by Gabriel Scherer)
- PR#6671: Windows: environment variable 'TZ' affects Unix.gettimeofday
(Mickael Delahaye and Damien Doligez)
- PR#6680: Missing parentheses in warning about polymorphic variant value
(Jacques Garrigue and Gabriel Scherer, report by Philippe Veber)
- PR#6686: Bug in [subst_boxed_number]
(Jérémie Dimino, Mark Shinwell)
- PR#6690: Uncaught exception (Not_found) with (wrong) wildcard or unification
type variable in place of a local abstract type
(Jacques Garrigue, report by Mikhail Mandrykin)
- PR#6693 (part two): Incorrect relocation types in x86-64 runtime system
(whitequark, review by Jacques-Henri Jourdan, Xavier Leroy and Mark Shinwell)
- PR#6717: Pprintast does not print let-pattern attributes
(Gabriel Scherer, report by whitequark)
- PR#6727: Printf.sprintf "%F" misbehavior
(Benoît Vaugon, report by Vassili Karpov)
- PR#6747: ocamlobjinfo: missing symbol caml_plugin_header due to underscore
(Damien Doligez, Maverick Woo)
- PR#6749: ocamlopt returns n for (n mod 1) instead of 0
(Mark Shinwell and Jérémie Dimino)
- PR#6753: Num.quo_num and Num.mod_num incorrect for some negative arguments
(Xavier Leroy)
- PR#6758: Ocamldoc "analyse_module: parsetree and typedtree don't match"
(Damien Doligez, report by user 'maro')
- PR#6759: big_int_of_string incorrectly parses some hexa literals
(Damien Doligez, report by Pierre-yves Strub)
- PR#6763: #show with -short-paths doesn't select shortest type paths
(Jacques Garrigue, report by David Sheets)
- PR#6768: Typechecker overflow the stack on cyclic type
(Jacques Garrigue, report by user 'darktenaibre')
- PR#6770: (duplicate of PR#6686)
- PR#6772: asmrun/signals_asm.c doesn't compile on NetBSD/i386
(Kenji Tokudome)
- PR#6775: Digest.file leaks file descriptor on error
(Valentin Gatien-Baron)
- PR#6779: Cross-compilers cannot link bytecode using custom primitives
(Damien Doligez, request by whitequark)
- PR#6787: Soundness bug with polymorphic variants
(Jacques Garrigue, with help from Leo White and Grégoire Henry,
report by Michael O'Connor)
- PR#6790: otherlibs should be built with -g
(Damien Doligez, report by whitequark)
- PR#6791: "%s@[", "%s@{" regression in Scanf
(Benoît Vaugon)
- PR#6793: ocamlbuild passes nonsensical "-ocamlc ..." commands to menhir
(Gabriel Scherer, report by Damien Doligez)
- PR#6799: include guards missing for unixsupport.h and other files
(Andreas Hauptmann)
- PR#6810: Improve documentation of Bigarray.Genarray.map_file
(Mark Shinwell and Daniel Bünzli)
- PR#6812: -short-paths and -no-alias-deps can create inconsistent assumptions
(Jacques Garrigue, report by Valentin Gatien-Baron)
- PR#6817: GADT exhaustiveness breakage with modules
(Leo White, report by Pierre Chambart)
- PR#6824: fix buffer sharing on partial application of Format.asprintf
(Gabriel Scherer, report by Alain Frisch)
- PR#6831: Build breaks for -aspp gcc on solaris-like OSs
(John Tibble)
- PR#6836: Assertion failure using -short-paths
(Jacques Garrigue, report by David Sheets)
- PR#6837: Build profiling libraries on FreeBSD and NetBSD x86-64
(Mark Shinwell, report by Michael Grünewald)
- PR#6841: Changing compilation unit name with -o breaks ocamldebug
(Jacques Garrigue, report by Jordan Walke)
- PR#6842: export Typemod.modtype_of_package
- PR#6843: record weak dependencies even when the .cmi is missing
(Leo White, Gabriel Scherer)
- PR#6849: Inverted pattern unification error
(Jacques Garrigue, report by Leo White)
- PR#6857: __MODULE__ doesn't give the current module with -o
(Jacques Garrigue, report by Valentin Gatien-Baron)
- PR#6862: Exhaustiveness check wrong for class constructor arguments
(Jacques Garrigue)
- PR#6869: Improve comment on [Hashtbl.hash_param]
(Mark Shinwell, report by Jun Furuse)
- PR#6870: Unsoundness when -rectypes fails to detect non-contractive type
(Jacques Garrigue, report by Stephen Dolan)
- PR#6872: Type-directed propagation fails to disambiguate variants
that are also exception constructors
(Jacques Garrigue, report by Romain Beauxis)
- PR#6878: AArch64 backend generates invalid asm: conditional branch
out of range (Mark Shinwell, report by Richard Jones, testing by Richard
Jones and Xavier Leroy, code review by Xavier Leroy and Thomas Refis)
- PR#6879: Wrong optimization of 1 mod n
(Mark Shinwell, report by Jean-Christophe Filliâtre)
- PR#6884: The __CYGWIN32__ #define should be replaced with __CYGWIN__
(Adrien Nader)
- PR#6886: -no-alias-deps allows to build self-referential compilation units
(Jacques Garrigue, report by Valentin Gatien-Baron)
- PR#6889: ast_mapper fails to rewrite class attributes
(Sébastien Briais)
- PR#6893: ocamlbuild: "tag not used" warning when using (p)dep
(Gabriel Scherer, report by Christiano Haesbaert)
- GPR#143: fix getsockopt behaviour for boolean socket options
(Anil Madhavapeddy and Andrew Ray)
- GPR#190: typo in pervasives
(Guillaume Bury)
- Misplaced assertion in major_gc.c for no-naked-pointers mode
(Stephen Dolan, Mark Shinwell)
Feature wishes:
- PR#6452, GPR#140: add internal suport for custom printing formats
(Jérémie Dimino)
- PR#6641: add -g, -ocamlcflags, -ocamloptflags options to ocamlmklib
(whitequark)
- PR#6693: also build libasmrun_shared.so and lib{asm,caml}run_pic.a
(whitequark, review by Mark Shinwell)
- PR#6842: export Typemod.modtype_of_package
(Jacques Garrigue, request by Jun Furuse)
- GPR#139: more versatile specification of locations of .annot
(Christophe Troestler, review by Damien Doligez)
- GPR#171: allow custom warning printers / catchers
(Benjamin Canou, review by Damien Doligez)
- GPR#191: Making gc.h and some part of memory.h public
(Thomas Refis)
OCaml 4.02.1 (14 Oct 2014):
---------------------------
(Changes that can break existing programs are marked with a "*")
Standard library:
* Add optional argument ?limit to Arg.align.
Bug Fixes:
- 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
(whitequark)
- 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 substituted 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 whitequark)
- 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#6575: Array.init evaluates callback although it should not do so
(Alain Frisch, report by Gerd Stolpmann)
- 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 (29 Aug 2014):
---------------------------
(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. Compiled interfaces become smaller, but may depend on the
original modules. This also 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)