|
|
@@ -1,17 +1,27 @@ |
|
|
Next version:
|
|
|
-------------
|
|
|
|
|
|
+Ocaml 4.02.0:
|
|
|
+-------------
|
|
|
+
|
|
|
(Changes that can break existing programs are marked with a "*")
|
|
|
|
|
|
Language features:
|
|
|
- Attributes and extension nodes
|
|
|
-- Generative functors
|
|
|
+ (Alain Frisch)
|
|
|
+- PR#5095: Generative functors
|
|
|
+ (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.
|
|
|
-- Exception cases in pattern matching (patch by Jeremy Yallop).
|
|
|
-- Extensible open datatypes (patch by Leo White).
|
|
|
+ (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.
|
|
@@ -22,167 +32,247 @@ Shedding weight: |
|
|
* Removed Labltk from the distribution, now available as a third-party library.
|
|
|
|
|
|
Type system:
|
|
|
-* Keep typing of pattern cases independent in principal mode
|
|
|
+* 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)
|
|
|
- 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.)
|
|
|
-- PR#6269 Optimization of string matching (patch by Benoit Vaugon
|
|
|
- and Luc Maranget)
|
|
|
+ (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)
|
|
|
-- Optimization of integer division and modulus by constant divisors
|
|
|
- (feature wish PR#6042)
|
|
|
+ (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
|
|
|
* "-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 and Mark Shinwell)
|
|
|
* PR#5779: better sharing of structured constants
|
|
|
+ (Alain Frisch)
|
|
|
- PR#6182: better message for virtual objects and class types
|
|
|
(Leo P. White, Stephen Dolan)
|
|
|
- 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 [@@deprecated] attribute
|
|
|
-* PR#6203: Constant exception constructor no longer allocate
|
|
|
+ the [@@ocaml.deprecated] attribute
|
|
|
+ (Alain Frisch, suggestion by Pierre-Marie Pédrot)
|
|
|
+* PR#6203: Constant exception constructors no longer allocate
|
|
|
+ (Alain Frisch)
|
|
|
- PR#6311: Improve signature mismatch error messages
|
|
|
+ (Alain Frisch, suggestion by Daniel Bünzli)
|
|
|
- PR#6345: Better compilation of optional arguments with default values
|
|
|
-- PR#6260: Unnecessary boxing in let (patch by vbrankov)
|
|
|
+ (Alain Frisch, review by Jacques Garrigue)
|
|
|
+- PR#6260: Unnecessary boxing in let
|
|
|
+ (Vladimir Brankov)
|
|
|
- PR#6017: a new format implementation based on GADTs
|
|
|
- (initial patch by Benoît Vaugon, review by Gabriel Scherer)
|
|
|
+ (Benoît Vaugon and 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 should treat exception specifically
|
|
|
-- PR#5009: Extending exception tag blocks
|
|
|
+ (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.
|
|
|
+ (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
|
|
|
-- PR#6148: speed improvement for Buffer (patch by John Whitington)
|
|
|
+ (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)
|
|
|
|
|
|
OCamldoc:
|
|
|
- PR#6257: handle full doc comments for variant constructors and
|
|
|
- record fields
|
|
|
+ record fields
|
|
|
+ (Maxence Guesdon, request by ygrek)
|
|
|
- PR#6310: fix ocamldoc's subscript/superscript CSS font size
|
|
|
- (patch by Anil Madhavapeddy)
|
|
|
-- PR#6273: fix Sys.file_exists on large files (Win32)
|
|
|
- (patch by Christoph Bauer)
|
|
|
+ (Anil Madhavapeddy)
|
|
|
- PR#6425: fix generation of man pages
|
|
|
+ (Maxence Guesdon, report by Anil Madhavapeddy)
|
|
|
|
|
|
Bug fixes:
|
|
|
- PR#4719: Sys.executable_name wrong if executable name contains dots (Windows)
|
|
|
+ (Alain Frisch, report by Bart Jacobs)
|
|
|
- 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#5598: follow-up fix related to PR#6165
|
|
|
+ (Damien Doligez)
|
|
|
- PR#5820: Fix camlp4 lexer roll back problem
|
|
|
+ (Hongbo Zhang)
|
|
|
- PR#6062: Fix a regression bug caused by commit 13047
|
|
|
+ (Hongbo Zhang, report by Christophe Troestler)
|
|
|
- PR#6109: Typos in ocamlbuild error messages
|
|
|
-- PR#6116: more efficient implementation of Digest.to_hex (patch by ygrek)
|
|
|
+ (Gabriel Kerneis)
|
|
|
+- PR#6116: more efficient implementation of Digest.to_hex
|
|
|
+ (ygrek)
|
|
|
- PR#6165: Alterations to handling of \013 in source files breaking other tools
|
|
|
-- PR#6173: Typing error message is worse that before
|
|
|
+ (David Allsopp)
|
|
|
+- 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)
|
|
|
-- PR#6175: Fix open!
|
|
|
+ (Jacques Garrigue and Grégoire Henry, report by Chantal Keller)
|
|
|
+- PR#6175: add open! support to camlp4
|
|
|
+ (Hongbo Zhang)
|
|
|
- PR#6183: enhanced documentation for 'Unix.shutdown_connection'
|
|
|
+ (Anil Madhavapeddy, report by Jun Furuse)
|
|
|
- PR#6184: ocamlbuild: `ocamlfind ocamldep` does not support -predicate
|
|
|
- (report and patch by Jacques-Pascal Deplaix)
|
|
|
+ (Jacques-Pascal Deplaix)
|
|
|
- PR#6194: Incorrect unused warning with first-class modules in patterns
|
|
|
+ (Jacques Garrigue, report by Markus Mottl and Leo White)
|
|
|
- PR#6216: inlining of GADT matches generates invalid assembly
|
|
|
+ (Xavier Leroy and Alain Frisch, report by 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#6267: more information printed by "bt" command of ocamldebug
|
|
|
+ (Josh Watzman)
|
|
|
+- 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#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#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
|
|
|
-- PR#6302: bytecode debug information re-read from filesystem every time
|
|
|
- (Jacques-Henri Jourdan)
|
|
|
+ (Jacques Garrigue, report by Gabriel Scherer and Benoît Vaugon)
|
|
|
- fix -dsource printing of "external _pipe = ..."
|
|
|
(Gabriel Scherer)
|
|
|
- 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, review by Xavier Leroy, report by Pierre Chambart)
|
|
|
+ (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 (patch by Zoe Paraskevopoulou)
|
|
|
+ hex representations
|
|
|
+ (Zoe Paraskevopoulou, review by Gabriel Scherer)
|
|
|
- PR#5547: Enable the "-use-ocamlfind" option by default
|
|
|
+ (Wojciech Meyer)
|
|
|
- PR#5650: Camlp4FoldGenerator doesn't handle well "abstract" types
|
|
|
+ (Hongbo Zhang)
|
|
|
- PR#5808: allow simple patterns, not just identifiers, in "let p : t = ..."
|
|
|
-- PR#6000: add a warning for non-principal coercions to format
|
|
|
+ (Alain Frisch)
|
|
|
+- 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.
|
|
|
- (patch by Kaustuv Chaudhuri)
|
|
|
+ (Kaustuv Chaudhuri)
|
|
|
- PR#6064: GADT representation for Bigarray.kind + CAML_BA_CHAR runtime kind
|
|
|
-- PR#6071: Add a -noinit option to the toplevel (patch by David Sheets)
|
|
|
+ (Jeremy Yallop, review by Gabriel Scherer)
|
|
|
+- PR#6071: Add a -noinit option to the toplevel
|
|
|
+ (David Sheets)
|
|
|
- PR#6166: document -ocamldoc option of ocamlbuild
|
|
|
+ (Xavier Clerc)
|
|
|
- PR#6187: ocamlbuild: warn when using -plugin-tag(s) without myocamlbuild.ml
|
|
|
- (patch by Jacques-Pascal Deplaix)
|
|
|
+ (Jacques-Pascal Deplaix)
|
|
|
- PR#6246: allow wilcard _ as for-loop index
|
|
|
+ (Alain Frisch, request by ygrek)
|
|
|
- PR#6270: remove need for -I directives to ocamldebug in common case
|
|
|
- (patch by Josh Watzman, review by Xavier Clerc and Alain Frisch)
|
|
|
+ (Josh Watzman, review by Xavier Clerc and Alain Frisch)
|
|
|
- PR#6358: obey DESTDIR in install targets
|
|
|
- (Gabriel Scherer)
|
|
|
+ (Gabriel Scherer, request by François Berenger)
|
|
|
- PR#5899: a programmer-friendly access to backtrace information
|
|
|
(Jacques-Henri Jourdan and Gabriel Scherer)
|
|
|
- ocamllex: user-definable refill action
|
|
|
- (patch by Frédéric Bour, review by Gabriel Scherer and Luc Maranget)
|
|
|
+ (Frédéric Bour, review by Gabriel Scherer and Luc Maranget)
|
|
|
- shorten syntax for functor signatures: "functor (M1:S1) (M2:S2) .. -> .."
|
|
|
- (patches by Thomas Gazagnaire and Jeremy Yallop, review by Gabriel Scherer)
|
|
|
+ (Thomas Gazagnaire and Jeremy Yallop, review by Gabriel Scherer)
|
|
|
|
|
|
|
|
|
OCaml 4.01.0:
|
|
|
0 comments on commit
456ba0c