forked from ocaml/ocaml
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Changes
5331 lines (4527 loc) · 226 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.04.0:
-------------
(Changes that can break existing programs are marked with a "*")
### Language features:
- GPR#187, GPR#578: Local opening of modules in a pattern.
Syntax: "M.(p)", "M.[p]","M.[| p |]", "M.{p}"
(Florian Angeletti, Jacques Garrigue, review by Alain Frisch)
- GPR#301: local exception declarations "let exception ... in"
(Alain Frisch)
### Compilers:
- PR#7023, GPR#336: Better unboxing strategy
(Alain Frisch, Pierre Chambart)
- PR#7200, GPR#539: Improve, fix, and add test for parsing/pprintast.ml
(Runhang Li, David Sheets, Alain Frisch)
- GPR#580: Optimize immutable float records
(Pierre Chambart, review by Marc Shinwell)
### Language tooling and user interface
- PR#7139: clarify the wording of Warning 38
(Unused exception or extension constructor)
(Gabriel Scherer)
### Tools:
- GPR#452: Make the output of ocamldep more stable
(Alain Frisch)
- MPR#7248: have ocamldep interpret -open arguments in left-to-right order
(Gabriel Scherer, report by Anton Bachin)
- Add the -no-version option to the toplevel
(Sébastien Hinderer)
### Standard library:
- GPR#427: Obj.is_block is now an inlined OCaml function instead of a
C external. This should be faster.
(Demi Obenour)
- PR#4747, GPR#328: Optimize Hashtbl by using in-place updates of its
internal bucket lists. All operations run in constant stack size
and are usually faster, except Hashtbl.copy which can be much
slower
(Alain Frisch)
- PR#6279, GPR#553: implement Set.map
(Gabriel Scherer)
- GPR#473: Provide `Sys.backend_type` so that user can write backend-specific
code in some cases (for example, code generator).
(Hongbo Zhang)
- PR#6820, GPR#560: Add Obj.reachable_words to compute the
"transitive" heap size of a value
(Alain Frisch, review by Marc Shinwell and Damien Doligez)
### Manual:
- PR#7245, GPR#565: clarification to the wording and documentation
of Warning 52 (fragile constant pattern)
(Gabriel Scherer, William, Adrien Nader, Jacques Garrigue)
### Build system:
- GPR#324: Compiler developpers only: Adding new primitives to the
standard runtime doesn't require anymore to run `make bootstrap`
(François Bobot)
- GPR#384: Fix compilation using old Microsoft C Compilers not
supporting secure CRT functions (SDK Visual Studio 2005 compiler and
earlier) and standard 64-bit integer literals (Visual Studio .NET
2002 and earlier)
(David Allsopp)
- GPR#507: More sharing between Unix and Windows makefiles
(whitequark, review by Alain Frisch)
### Bug fixes:
- PR#7112: Aliased arguments ignored for equality of module types
### Other libraries:
* GPR#533: Thread library: fixed [Thread.wait_signal] so that it
converts back the signal number returned by [sigwait] to an
OS-independent number
(Jérémie Dimino)
### Documentation:
- PR#7243: warn users against using WinZip to unpack the source archive
(Damien Doligez, report by Shayne Fletcher)
OCaml 4.03.0 (25 Apr 2016):
---------------------------
(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.
Additionally, 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)
- PR#6806: Syntax shortcut for putting a type annotation on a record field:
{ f1 : typ = e } is sugar for { f1 = (e : typ) }
{ f1 : typ } is sugar for { f1 = (f1 : typ) }
(Valentin Gatien-Baron, review by Jérémie Dimino)
- PR#6806: Allow type annotations before the "->" in "fun <args> -> <expr>"
fun x y : (int * int) -> (x, y)
(Valentin Gatien-Baron, review by Jérémie Dimino)
- 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#112: octal escape sequences for char and string literals
"Make it \o033[1mBOLD\o033[0m"
(Rafaël Bocquet, request by John Whitingthon)
- GPR#167: allow to annotate externals' arguments and result types so
they can be unboxed or untagged: [@unboxed], [@untagged]. Supports
untagging int and unboxing int32, int64, nativeint and float.
(Jérémie Dimino, Mark Shinwell)
- GPR#173: [@inline] and [@inlined] attributes (for function declarations
and call sites respectively) to control inlining
(Pierre Chambart, Mark Shinwell)
- GPR#188: accept [@@immediate] attribute on type declarations to mark types
that are represented at runtime by an integer
(Will Crichton, reviewed by Leo White)
* GPR#234: allow "[]" as a user-defined constructor. Demand parenthesis
around "::" when using "::" as user-defined constructor:
code using "| :: of ..." must change to "| (::) of ...".
(Runhang Li, review by Damien Doligez)
- GPR#240: 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
carry purely informational (with no stability guarantee) messages.
(Alain Frisch)
- GPR#268: hexadecimal notation for floating-point literals: -0x1.ffffp+987
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#273: allow to get the extension slot of an extension constructor
by writing [%extension_constructor <path>]
(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)
- PR#6681 GPR#326: signature items are now accepted as payloads for
extension and attributes, using the syntax [%foo: SIG ] or [@foo: SIG ].
Examples: "[%%client: val foo : int]" or "val%client foo : int".
(Alain Frisch and Gabriel Radanne)
* GPR#342: Allow shortcuts for extension and attributes on all keywords:
module%foo, class[@foo], etc.
The attribute in "let[@foo] .. in .." is now attached to the value binding,
not to the expression.
(Gabriel Radanne)
### Compilers:
* PR#4231, PR#5461: warning 31 is now fatal by default
(Warning 31: A module is linked twice in the same executable.)
This is an interim solution; double-linking of modules has dangerous
semantics, eg. exception constructors end up with two distinct declarations.
(Alain Frisch)
- PR#4800: better compilation of tuple assignment
(Gabriel Scherer and Alain Frisch)
- PR#5995: keep -for-pack into account to name exceptions;
-for-pack should now be used during bytecode compilation 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)
- PR#6679: fix pprintast printing of constraints in type declarations
(Alain Frisch, report by Jun Furuse)
- PR#6737: fix Typedtree attributes on (fun x -> body) expressions
(Alain Frisch, report by Oleg Kiselyov)
* PR#6865: remove special case for parsing "let _ = expr" in structures
(Jérémie Dimino, Alain Frisch)
* PR#6438, PR#7059, GPR#315: Pattern guard disables exhaustiveness check
(function Some x when x = 0 -> ()) will now raise warning 8 (non-exhaustive)
instead of warning 25 (all clauses are guarded). 25 isn't raised anymore.
Projects that set warning 8 as an error may fail to compile (presumably
this is the semantics they wanted).
(Alain Frisch, request by Martin Jambon and John Whitington)
- PR#6920: fix debug informations around uses of %apply or %revapply
(Jérémie Dimino, report by Daniel Bünzli)
- 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#7022, GPR#259: unbox float and boxed ints earlier, avoid second pass
(Alain Frisch)
- PR#7026, GPR#288: remove write barrier for polymorphic variants without
arguments
(Simon Cruanes)
- PR#7031: new warning 57, ambiguous guarded or-patterns
(Luc Maranget, Gabriel Scherer, report by Martin Clochard and Claude Marché)
- PR#7064, GPR#316: allowing to mark compilation units and sub-modules as
deprecated
(Alain Frisch)
- PR#7067: fix performance regression (wrt. 4.01) in the native compiler
for long nested structures
(Alain Frisch, report by Daniel Bünzli, review by Jacques Garrigue)
- PR#7097: fix strange syntax error message around illegal packaged module
signature constraints
(Alain Frisch, report by Jun Furuse)
- PR#7118, PR#7120, GPR#408, GPR#476: Bug fixed in stack unwinding
metadata generation. Was a cause of crashes in GUI programs on OS X.
(Bart Jacobs, review by Mark Shinwell)
- PR#7168: Exceeding stack limit in bytecode can lead to a crash.
(Jacques-Henri Jourdan)
- PR#7232: Strange Pprintast output with ppx_deriving
(Damien Doligez, report by Anton Bachin)
- GPR#17: some cmm optimizations of integer operations with constants
(Stephen Dolan, review by Pierre Chambart)
- GPR#89: improve type-specialization of unapplied primitives:
unapplied annotations (compare : int -> _),
type propagation (List.sort compare [1;2;3])
and propagation from module signatures now lead to specialization
(Frédéric Bour, review by Gabriel Scherer)
- GPR#107: Prevent more unnecessary float boxing, especially in `if` and `match`
(Vladimir Brankov, review by Alain Frisch)
- GPR#109: new (lazy) unboxing strategy for float and int references
(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#132: Flambda: new intermediate language and "middle-end" optimizers
(Pierre Chambart, Mark Shinwell, Leo White)
- GPR#212, PR#7226, GPR#542: emit column position in gas assembly `.loc`
(Frédéric Bour, Anton Bachin)
- GPR#207: Colors in compiler messages (warnings, errors)
configure with -color {auto|always|never} or TERM=dumb
(Simon Cruanes, review by Gabriel Scherer)
- GPR#258: more precise information on PowerPC instruction sizes
(Pierre Chambart, Xavier Leroy)
- GPR#263: improve code generation for if-equivalents of (&&) and (||)
(Pierre Chambart)
- GPR#270: Make [transl_exception_constructor] generate [Immutable] blocks
(Mark Shinwell)
- GPR#271: Fix incorrect mutability flag when records are built using "with"
(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 58 for missing cmx files, and
extend -opaque option to mli files: a missing .cmx does not warn
if the corresponding .cmi is compiled -opaque.
(Leo White)
- GPR#388: OCAML_FLEXLINK environment variable allows overriding flexlink
command (David Allsopp)
- GPR#392: put all parsetree invariants in a new module Ast_invariants
(Jérémie Dimino)
- GPR#407: don't display the name of compiled .c files when calling the
Microsoft C Compiler (same as the assembler).
(David Allsopp)
- GPR#431: permit constant float arrays to be eligible for pattern match
branch merging
(Pierre Chambart)
- GPR#455: provide more debugging information to Js_of_ocaml
(Jérôme Vouillon)
- GPR#514, GPR#554: Added several command-line flags to explicitly enable
settings that are currently the default:
`-alias-deps`, `-app-funct`, `-no-keep-docs`, `-no-keep-locs`,
`-no-principal`, `-no-rectypes`, `-no-strict-formats`
(Demi Obenour)
- GPR#545: use reraise to preserve backtrace on
`match .. with exception e -> raise e`
(Nicolas Ojeda Bar, review by Gabriel Scherer)
### Runtime system:
- PR#3612, PR#92: 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}.
C stubs may have to be updated as {,u}int{32,64}_t are not defined anymore.
(Xavier Leroy)
- PR#6760: closures evaluated in the toplevel can now be marshalled
(whitequark, review by Jacques-Henri Jourdan)
- PR#6902, GPR#210: emit a runtime warning on stderr
when finalizing an I/O channel which is still open:
"channel opened on file '...' dies without being closed"
this is controlled by OCAMLRUNPARAM=W=1 or with Sys.enable_runtime_warnings.
The behavior of affected program is not changed,
but they should still be fixed.
(Alain Frisch, review by Damien Doligez)
- 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 >= 3.4 and Clang
when compiling the run-time system and C stub code.
"-std=gnu99 -O2 -fno-strict-aliasing -fwrapv" is used by default.
This also affects default flags for user stubs compiled with "ocamlc -c foo.c"
and may uncover bugs in them.
(Xavier Leroy)
- GPR#262: Multiple GC roots per compilation unit
(Pierre Chambart, Mark Shinwell, review by Damien Doligez)
* GPR#297: Several changes to improve the worst-case GC pause time.
Changes Gc.control and Gc.major_slice and adds functions to the Gc module.
(Damien Doligez, with help from Francois Bobot, Thomas Braibant, Leo White)
- GPR#325: Add v=0x400 flag to OCAMLRUNPARAM to display GC stats on exit
(Louis Gesbert, review by Alain Frisch)
### Standard library:
- PR#1460, GPR#230: Array.map2, Array.iter2
(John Christopher McAlpine)
- 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 js_of_ocaml portability
(Hugo Heuzard)
- PR#6449: Add Map.union
(Alain Frisch)
* PR#6494: Add 'equal' functions in modules
Bytes, Char, Digest, Int32, Int64, Nativeint, and String
Users defining their own modules with signature 'module type of Int32'
have to extend their implementation.
(Romain Calascibetta)
* PR#6524, GPR#79: Filename: Optional ?perms argument to open_temp_file
May break partial applications of the function (fix by passing ?perms:None)
(Daniel Bünzli, review by Jacques-Pascal Deplaix)
* PR#6525, GPR#80: Add Uchar module to the standard library
May introduce module name conflicts with existing projects.
(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
(Alain Frisch, report by user 'aha')
- 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)
- PR#6649, GPR#222: accept (int_of_string "+3")
(John Christopher McAlpine)
- PR#6694, PR#6695, GPR#124: deprecate functions using ISO-8859-1 character set
in Char, Bytes, String and provide alternatives *_acii using US-ASCII.
Affected functions:
{Char,String,Bytes}.{uppercase,lowercase},
{String,Bytes}.{capitalize,uncaptialize}
(whitequark, review by Damien Doligez)
- GPR#22: Add the Ephemeron module that implements ephemerons and weak
hash table
(François Bobot, review by Damien Doligez, Daniel Bünzli,
Alain Frisch, Pierre Chambart)
- GPR#164: more efficient (branchless) implementation of Pervasives.compare
specialized at type 'float'.
(Vladimir Brankov)
- GPR#175: Guarantee that Map.add, Map.remove, Map.filter
return the original map if no change is required.
(Mohamed Iguernlala)
- 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
(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.
(François Bobot)
- PR#3622, GPR#195: add function Stack.fold
(Simon Cruanes)
- GPR#329: Add exists, for_all, mem and memq functions in Array
(Bernhard Schommer)
- GPR#337: Add [Hashtbl.filter_map_inplace]
(Alain Frisch)
- 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
(Jacques Garrigue)
* PR#6465: allow incremental weakening of module aliases.
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.
(Jacques Garrigue)
- PR#6593: Functor application in tests/basic-modules fails after commit 15405
(Jacques Garrigue)
### 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#6401: use proper error reporting for toplevel environment initialization:
no more Env.Error(_) at start time
(Gabriel Scherer, 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#6906: wrong error location for unmatched paren with #use in toplevel
(Damien Doligez, report by Kenichi Asai)
- PR#6935, GPR#298: crash in debugger when load_printer is given a directory
(Junsong Li, review by 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: the toplevel does not 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.
(Xavier Leroy)
- 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#6120, GPR#462: implement Unix.symlink and Unix.readlink on
Windows. Unix.symlink has a new optional argument to_dir (ignored on
non-native Windows platforms). stat functions reimplemented to avoid
buggy Microsoft CRT implementations (native Windows only)
(David Allsopp, review by Daniel Bünzli)
- PR#6263: add kind_size_in_bytes and size_in_bytes functions
to Bigarray module.
(Runhang Li, review by Mark Shinwell)
- 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.
(Xavier Leroy, question by Fredrik Lindgren)
- PR#7209: do not run at_exit handlers in [Unix.create_process] and
similar functions when the [exec] call fails in the child process
(Jérémie Dimino)
### OCamldep:
- GPR#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)
- PR#6601: replace strcpy with caml_strdup in sample code
(Christopher Zimmermann)
- PR#6676: ongoing simplification of the "Language Extensions" section
(Alain Frisch, John Whitington)
- PR#6898: Update win32 support documentation of the Unix library
(Damien Doligez, report by Daniel Bünzli)
- PR#7092, GPR#379: Add missing documentation for new 4.03 features
(Florian Angeletti)
- PR#7094, GPR#468, GPR#551: add new section 8.5 to document warnings
The general idea is to document warnings that may require explanations.
Currently documented warnings are:
- 52: Fragile constant pattern.
- 57: Ambiguous or-pattern variables under guard
(Florian Angeletti and Gabriel Scherer)
- PR#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
May break programs matching on the string argument of Invalid_argument.
Matching on the string argument of Invalid_argument or Failure is a
programming mistake: these strings may change in future versions.
(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: report more informative type names in GADTs error messages
(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 now adds 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: Confusing error message when a type escapes its scope.
(Jacques Garrigue and Leo White, report by John Whitington)
- 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 were locale-dependent
we now escape all non-ASCII-printable instead of a locale-dependent subset.
(Damien Doligez, report by Jun Furuse)
- PR#6526: ocamllex should not warn on unescaped newline inside comments
(Damien Doligez, report by user 'dhekir')
- PR#6341: ocamldoc -colorize-code adds spurious <br> tags to <pre> blocks
(Maxence Guesdon, report by Damien Doligez)
- PR#6560: Wrong failure message for {Int32,Int64,NativeInt}.of_string
It reported (Failure "int_of_string"), now "Int32.of_string" etc.
(Maxime Dénès and Gabriel Scherer)
- PR#6648: show_module should indicate its elision
(Jacques Garrigue, report by Leo White)
- PR#6650: Cty_constr not handled correctly by Subst
(Jacques Garrigue, report by Leo White)
- PR#6651: Failing component lookup
(Jacques Garrigue, report by Leo White)
* PR#6664: Crash when finalising lazy values of the wrong type.
(Damien Doligez)
- PR#6672: Unused variance specification allowed in with constraint
(Jacques Garrigue, report by Leo White)
- PR#6677: Allow to disable warning 39 (useless "rec") with [@ocaml.warning]
applied to the first value binding of the would-be "rec" declaration
(Alain Frisch, report by Jun Furuse)
- PR#6744: Univars can escape through polymorphic variants (partial fix)
(Jacques Garrigue, report by Leo White)
- PR#6752: Extensible variant types and scope escaping
A side-effect of the fix is that (ocamlc -i) sometimes reports
(type-sound) invalid signature, with a type used before its declaration.
(Jacques Garrigue, report by Maxence Guesdon)
- PR#6762: improve warning 45 in presence of re-exported type definitions
(Warning 45: open statement shadows the constructor)
(Alain Frisch, report by Olivier Andrieu)
- PR#6776: Failure to kill the "tick" thread, segfault when exiting the runtime
(Damien Doligez, report by Thomas Braibant)
- PR#6780: Poor error message for wrong -farch and -ffpu options (ocamlopt, ARM)
(Xavier Leroy, report by whitequark)
- 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
(Jacques Garrigue, report by Markus Mottl)
- PR#6888: The list command of ocamldebug uses the wrong file
(Damien Doligez, report by Pierre-Marie Pédrot)
- PR#6897: Bad error message for some pattern matching on extensible variants
(Alain Frisch, report by Gabriel Radanne)
- PR#6899: Optional parameters and non generalizable type variables
(Thomas Refis and Leo White)
- PR#6907: Stack overflow printing error in class declaration
(Jacques Garrigue, report by Ivan Gotovchits)
- PR#6931: Incorrect error message on type error inside record construction
(Damien Doligez, report by Leo White)
- 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 Frédéric Bour)
- PR#6945 and GPR#227: protect Sys and Unix functions against string
arguments containing the null character '\000'
(Simon Cruanes and Xavier Leroy, report by Daniel Bünzli)
- PR#6946: Uncaught exception with wrong type for "%ignore"
(Jacques Garrigue, report by Leo White)
- PR#6954: Infinite loop in type checker with module aliases
(Jacques Garrigue, report by Mark Mottl)
- PR#6972, GPR#276: 4.02.3 regression on documentation comments in .cmt files
(Leo White, report by Olivier Andrieu)
- PR#6977: String literals in comments interpret escape sequences
(Damien Doligez, report by Daniel Bünzli and David Sheets)
- PR#6980: Assert failure from polymorphic variants and existentials
(Jacques Garrigue, report by Leo White)
- PR#6981: Ctype.Unify(_) with associated functor arg refering to previous one
(Jacques Garrigue, report by Nicholas Labich)
- PR#6982: unexpected type error when packing a module alias
(Jacques Garrigue, report by Valentin Gatien-Baron)
- PR#6985: `module type of struct include Bar end exposes
%s#row when Bar contains private row types
(Jacques Garrigue, report by Nicholas Labich)
- PR#6992: Segfault from bug in GADT/module typing
(Jacques Garrigue, report by Stephen Dolan)
- PR#6993: Segfault from recursive modules violating exhaustiveness assumptions
(Jacques Garrigue, report by Stephen Dolan)
- 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 may cause segmentation fault on sizes above 2^31
(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: fix Stack overflow in GADT typing
Note: Equi-recursive types are considered when checking GADT pattern
exhaustiveness, even when -rectypes is not used.
(Jacques Garrigue, report by Mikhail Mandrykin)
- 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
(Jacques Garrigue and Alain Frisch, report by Nicholas Labich)
- PR#7096: ocamldoc uses an incorrect subscript/superscript style
(Gabriel Scherer, report by user 'pierpa')
- PR#7108: ocamldoc, have -html preserve custom/extended html generators
(Armaël Guéneau)
- PR#7111: reject empty let bindings instead of printing incorrect syntax
(Jérémie Dimino)
* PR#7113: -safe-string can break GADT compatibility check
bytes and string are now considered compatible even with -safe-string,
which may break exhaustivity for code assuming they were disjoint
(Jacques Garrigue, report by Jeremy Yallop)
- PR#7115: shadowing in a branch of a GADT match breaks unused variable warning
(Alain Frisch, report by Valentin Gatien-Baron)
- PR#7133, GPR#450: generate local jump labels on OS X
(Bart Jacobs)
- PR#7135: only warn about ground coercions in -principal mode
(Jacques Garrigue, report by Jeremy Yallop)
- PR#7152: Typing equality involving non-generalizable type variable
(Jacques Garrigue, report by François Bobot)
- PR#7160: Type synonym definitions can weaken gadt constructor types
(Jacques Garrigue, report by Mikhail Mandrykin)
- PR#7181: Misleading error message with GADTs and polymorphic variants
(Jacques Garrigue, report by Pierre Chambart)
- PR#7182: Assertion failure with recursive modules and externals
(Jacques Garrigue, report by Jeremy Yallop)
- PR#7196: "let open" is not correctly pretty-printed to the left of a ';'
(Gabriel Scherer, report by Christophe Raffalli)
- PR#7214: Assertion failure in Env.add_gadt_instances
(Jacques Garrigue, report by Stephen Dolan)
- PR#7220: fix a memory leak when using both threads and exception backtraces
(Gabriel Scherer, review by François Bobot, report by Rob Hoes)
- PR#7222: Escaped existential type
(Jacques Garrigue, report by Florian Angeletti)
- PR#7230: Scrutinee discarded in match with only refutation cases
(Jacques Garrigue, report by Jeremy Yallop)
- PR#7234: Compatibility check wrong for abstract type constructors
(Jacques Garrigue, report by Stephen Dolan)
- 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#22: Fix the cleaning of weak pointers. In very rare cases
accessing a value during the cleaning of the weak pointers could
result in the value being removed from one weak arrays and kept in
another one. That breaks the property that a value is removed from a
weak pointer only when it is dead and garbage collected.
(François Bobot, review by Damien Doligez)
- 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)
- GPR#441: better type error location in presence of type constraints
(Thomas Refis, report by Arseniy Alekseyev)
- GPR#477: reallow docstrings inside object types, and inside polymorphic
variant and arrow types
(Thomas Refis)
### Features wishes:
- PR#4518, GPR#29: change location format for reporting errors in ocamldoc
(Sergei Lebedev)
- PR#4714: List.cons