OCaml release 4.02.0+beta1

Damien Doligez <[email protected]> Wed, 21 May 2014 14:13:38 +0200
Newsgroups gmane.comp.lang.caml.announce,gmane.comp.lang.caml.inria
Message-ID <[email protected]>
Dear OCaml users,

The release of OCaml version 4.02.0 will take place around the beginning of=
 July. We have created a beta version to get your feedback. Please download=
 the sources, compile, install, and test your favourite software with it. T=
hen let us know what doesn't work by posting bugs to the BTS.

This is a major release with several big changes, so it is particurarly imp=
ortant for us to get feedback from you.

Happy hacking,

-- Damien Doligez for the OCaml team.



sources and documentation of 4.02.0+beta1:
  http://caml.inria.fr/pub/distrib/ocaml-4.02/

Bug-tracking system (BTS):
  http://caml.inria.fr/mantis/my_view_page.php



OCaml 4.02.0+beta1:
-------------------

(Changes that can break existing programs are marked with a "*")

Language features:
- Attributes and extension nodes
- Generative functors
- Module aliases
* Alternative syntax for string literals {id|...|id} (can break comments)
- 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).

Build system for the OCaml distribution:
- Use -bin-annot when building.
- Use GNU make instead of portable makefiles.

Shedding weight:
* Removed Camlp4 from the distribution, now available as third-party softwa=
re.
* Removed Labltk from the distribution, now available as a third-party libr=
ary.

Type system:
* 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)
- 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
* Module aliases are now typed in a specific way, which remembers their
  identity. In particular this changes the signature inferred by
  "module type of"
- 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.
* PR#6333: Compare first class module types structurally rather than
  nominally. Value subtyping allows module subtyping as long as the internal
  representation is unchanged.

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.
- New back-end optimization pass: common subexpression elimination (CSE).
  (Reuses results of previous computations instead of recomputing them.)
- 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)
- Experimental native code generator for AArch64 (ARM 64 bits)
- Optimization of integer division and modulus by constant divisors
  (feature wish PR#6042)
- 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 ".")
* PR#5779: better sharing of structured constants
- 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
- PR#5854: issue warning 3 when referring to a value marked with
  the [@@deprecated] attribute
* PR#6203: Constant exception constructor no longer allocate
- PR#6311: Improve signature mismatch error messages
- PR#6345: Better compilation of optional arguments with default values
- PR#6260: Unnecessary boxing in let (patch by vbrankov)
- PR#6017: a new format implementation based on GADTs
  (initial patch by Beno=EEt Vaugon, review by Gabriel Scherer)

Toplevel interactive system:
- PR#5377: New "#show_*" directives

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.
- Fixed bug in native code version of [caml_raise_with_string] that could
  potentially lead to heap corruption.
- Blocks initialized by [CAMLlocal*] and [caml_alloc] are now filled with
  [Val_unit] rather than zero.
- Fixed a major performance problem on large heaps (~1GB) by making heap
  increments proportional to heap size by default
- PR#4765: Structural equality should treat exception specifically
- PR#5009: Extending exception tag blocks
- PR#6075: avoid using unsafe C library functions (strcpy, strcat, sprintf)
- 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.

Standard library:
* Add new modules: Bytes and BytesLabels.
- PR#4986: add List.sort_uniq and Set.of_list
- PR#5935: a faster version of "raise" which does not maintain the backtrace
- PR#6146: support "Unix.kill pid Sys.sigkill" under Windows
- PR#6148: speed improvement for Buffer (patch by John Whitington)
- PR#6180: efficient creation of uninitialized float arrays

OCamldoc:
- PR#6257: handle full doc comments for variant constructors and
           record fields
- 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)

Bug fixes:
- PR#4719: Sys.executable_name wrong if executable name contains dots (Wind=
ows)
- PR#4855: 'camlp4 -I +dir' accepted, dir is relative to 'camlp4 -where'
- PR#5201: ocamlbuild: add --norc to the bash invocation to help performanc=
es
- PR#5598: follow-up fix related to PR#6165
- PR#5820: Fix camlp4 lexer roll back problem
- PR#6062: Fix a regression bug caused by commit 13047
- PR#6109: Typos in ocamlbuild error messages
- PR#6116: more efficient implementation of Digest.to_hex (patch by ygrek)
- PR#6165: Alterations to handling of \013 in source files breaking other t=
ools
- PR#6173: Typing error message is worse that before
- PR#6174: OCaml compiler loops on an example using GADTs (-rectypes case)
- PR#6175: Fix open!
- PR#6183: enhanced documentation for 'Unix.shutdown_connection'
- PR#6184: ocamlbuild: `ocamlfind ocamldep` does not support -predicate
           (report and patch by Jacques-Pascal Deplaix)
- PR#6194: Incorrect unused warning with first-class modules in patterns
- PR#6216: inlining of GADT matches generates invalid assembly
- PR#6233: out-of-bounds exceptions lose their locations on ARM, PowerPC
- PR#6235: Issue with type information flowing through a variant pattern
- PR#6239: sometimes wrong stack alignment when raising exceptions
           in -g mode with backtraces active
- PR#6240: Fail to expand module type abbreviation during substyping
- PR#6241: Assumed inequality between paths involving functor arguments
- PR#6243: Make "ocamlopt -g" more resistant to ill-formed locations
- PR#6262: equality of first-class modules take module aliases into account
- PR#6267: more information printed by "bt" command of ocamldebug
- PR#6275: Soundness bug related to type constraints
- PR#6293: Assert_failure with invalid package type
- 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
- PR#6332: Unix.open_process fails to pass empty arguments under Windows
- PR#6346: Build failure with latest version of xcode on OSX
- PR#6348: Unification failure for GADT when original definition is hidden
- PR#6352: Automatic removal of optional arguments and sequencing
- PR#6361: Hashtbl.hash not terminating on some lazy values w/ recursive ty=
pes
- PR#6383: Exception Not_found when using object type in absent module
- PR#6384: Uncaught Not_found exception with a hidden .cmi file
- PR#6385: wrong allocation of large closures by the bytecode interpreter
- PR#6394: Assertion failed in Typecore.expand_path
- PR#6405: unsound interaction of -rectypes and GADTs
- PR#6408: Optional arguments given as ~?arg instead of ?arg in message
- fix -dsource printing of "external _pipe =3D ..."
  (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)

Features wishes:
- PR#4243: make the Makefiles parallelizable
- PR#4323: have "of_string" in Num and Big_int work with binary and
           hex representations (patch by Zoe Paraskevopoulou)
- PR#5547: Enable the "-use-ocamlfind" option by default
- PR#5650: Camlp4FoldGenerator doesn't handle well "abstract" types
- PR#5808: allow simple patterns, not just identifiers, in "let p : t =3D .=
.."
- PR#6000: add a warning for non-principal coercions to format
- PR#6054: add support for M.[ foo ], M.[| foo |] etc.
           (patch by 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)
- PR#6166: document -ocamldoc option of ocamlbuild
- PR#6187: ocamlbuild: warn when using -plugin-tag(s) without myocamlbuild.=
ml
  (patch by Jacques-Pascal Deplaix)
- PR#6246: allow wilcard _ as for-loop index
- PR#6270: remove need for -I directives to ocamldebug in common case
  (patch by Josh Watzman, review by Xavier Clerc and Alain Frisch)
- PR#6358: obey DESTDIR in install targets
  (Gabriel Scherer)
- PR#5899: a programmer-friendly access to backtrace information
  (Jacques-Henri Jourdan and Gabriel Scherer)
- ocamllex: user-definable refill action
  (patch by Fr=E9d=E9ric 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 Schere=
r)

_______________________________________________
Caml-announce mailing list
[email protected]
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-announce