caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Damien Doligez <damien.doligez@inria.fr>
To: caml users <caml-list@inria.fr>
Subject: OCaml 3.12.0+beta1
Date: Wed, 16 Jun 2010 15:07:38 +0200	[thread overview]
Message-ID: <E8A96ADD-B0B1-4EAB-8D00-F1DA4EE331EA@inria.fr> (raw)

Dear OCaml users,

We have the pleasure of celebrating Bloomsday by announcing the release of
OCaml version 3.12.0+beta1.

This is a beta release, available as source only and intended for power
users to test new features and report bugs (if any).  This release brings
a lot of new features, see the list included below.

It is available here: < http://caml.inria.fr/pub/distrib/ocaml-3.12/ >,
along with the updated reference manual.

Happy hacking,

-- Damien Doligez for the OCaml team.


--------------------------------------------------------------------------

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

Language features:
- Shorthand notation for records: in expressions and patterns,
    { lbl } stands for { lbl = lbl } and { M.lbl } for { M.lbl = lbl }
- Record patterns of the form { lbl = pat; _ } to mark that not all
  labels are listed, purposefully.  (See new warning below.)
- Explicit naming of a generic type; in an expression
  "fun ... (type t) ... -> e", the type t is considered abstract in its
  scope (the arguments that follow it and the body of the function),
  and then replaced by a fresh type variable. In particular, the type
  t can be used in contexts where a type variable is not allowed
  (e.g. for defining an exception in a local module).
- Explicit polymorphic types and polymorphic recursion. In let
  definitions, one can write an explicit polymorphic type just
  immediately the function name; the polymorphism will be enforced,
  and recursive calls may use the polymorphism.
  The syntax is the same as for polymorphic methods:
    "let [rec] <ident> : 'a1 ... 'an. <typexp> = ..."
- First-class packages modules.
  New kind of type expression, for packaged modules: (module PT).
  New kind of expression, to pack a module as a first-class value:
    (module MODEXPR : PT).
  New kind of module expression, to unpack a first-class value as a module:
    (val EXPR : PT).
  PT is a package type of the form "S" or
  "S with type t1 = ... and ... and type tn = ..." (S refers to a module type).
- Local opening of modules in a subexpression.
  Syntax: "let open M in e", or "M.(e)"
- In class definitions, method and instance variable override can now
  be made explicit, by writing "method!", "val!" or "inherit!" in place of
  "method", "val" and "inherit". It is an error to override an
  undefined member (or to use overriding inheritance when nothing get
  overridden). Additionally, these constructs disactivate respectively
  warnings 7 (method override, code 'M') and 13 (instance variable
  override, code 'V'). Note that, by default, warning 7 is inactive
  and warning 13 is active.
- "Destructive" substitution in signatures.
  By writing "<signature> with type t := <typeconstr>" and
  "<signature> with module M := <module-path>" one replaces "t" and "M"
  inside the signature, removing their respective fields. Among other
  uses, this allows to merge two signatures containing identically
  named fields.
* While fixing PR#4824, also corrected a gaping hole in the type checker,
  which allowed instantiating separately object parameters and instance
  variables in an interface. This hole was here since the beginning of
  ocaml, and as a result many programs using object inheritance in a non
  trivial way will need to be corrected. You can look at lablgtk2 for an
  example.

Compilers and toplevel:
- Warnings are now numbered and can be switched on and off individually.
  The old system with letters referring to sets of warnings is still
  supported.
- New warnings:
  + 9 (code 'R') to signal record patterns without "; _" where
    some labels of the record type are not listed in the pattern.
  + 28 when giving a wildcard argument to a constant constructor in
    a pattern-matching.
  + 29 when an end-of-line appears unescaped in a string constant.
  + 30 when the same constructor or record field is defined twice in
    mutually-recursive type definitions.
* The semantics of warning 7 (code 'M', method override) have changed
  (it now detects all overrides, not just repeated definitions inside
  the same class body), and it is now inactive by default.
- Better error report in case of unbound qualified identifier: if the module
  is unbound this error is reported in the first place.
- Added option '-strict-sequence' to force left hand part of sequence to have
  type unit.
- Added option '-no-app-funct' to turn applicative functors off.
  This option can help working around mysterious type incompatibilities
  caused by the incomplete comparison of applicative paths F(X).t.

Native-code compiler:
- AMD64: shorter and slightly more efficient code generated for 
  float comparisons.

Standard library:
- Format: new function ikfprintf analoguous to ifprintf with a continuation
  argument.
* PR#4210, #4245: stricter range checking in string->integer conversion
  functions (int_of_string, Int32.of_string, Int64.of_string,
  Nativeint.of_string).  The decimal string corresponding to
  max_int + 1 is no longer accepted.
- Scanf: to prevent confusion when mixing Scanf scanning functions and direct
  low level input, value Scanf.stdin has been added.
* Random: changed the algorithm to produce better randomness.  Now passes the
  DieHard tests.
- Map: implement functions from Set that make sense for Map.

Other libraries:
* Str: letters that constitute a word now include digits 0-9 and
  underscore _.  This changes the interpretation of '\b' (word boundary)
  in regexps, but is more consistent with other regexp libraries. (PR#4874).

Ocamlbuild:
- Add support for native dynlink.

New tool:
- ocamlobjinfo: displays various information, esp. dependencies, for
  compiled OCaml files (.cmi, .cmo, .cma, .cmx, .cmxa, .cmxs, and bytecode
  executables).  Extends and makes more official the old objinfo tool
  that was installed by some OCaml packages.

All tools:
- PR#4857: add a -vnum option to display the version number and nothing else

Bug Fixes:
- PR#4012: Map.map and Map.mapi do not conform to specification
- PR#4478: better error messages for type definition mismatches
- PR#4683: labltk script uses fixed path on windows
- PR#4742: finalisation function raising an exception blocks other finalisations
- PR#4775: compiler crash on crazy types (temporary fix)
- PR#4824: narrowing the type of class parameters with a module specification
- PR#4862: relaxed value restriction and records
- PR#4884: optional arguments do not work when Some is redefined
- PR#4964: parenthesized names for infix functions in annot files
- PR#4970: better error message for instance variables
- PR#4975: spelling mistakes
- PR#4988: contravariance lost with ocamlc -i
- PR#5004: problem in Buffer.add_channel with very large lengths.
- PR#5008: on AMD64/MSVC port, rare float corruption during GC.
- PR#5018: wrong exception raised by Dynlink.loadfile.
- PR#5057: fatal typing error with local module + functor + polymorphic variant
- Wrong type for Obj.add_offset.
- Small problem with the representation of Int32, Int64, and Nativeint constants.


             reply	other threads:[~2010-06-16 13:07 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-16 13:07 Damien Doligez [this message]
2010-06-16 16:28 ` [Caml-list] " Yoann Padioleau
2010-06-16 18:40   ` Martin Jambon
2010-06-16 20:52 ` Török Edwin
2010-06-17 13:35   ` xclerc
2010-06-18 14:56     ` xclerc
2010-06-19  5:51 ` Stéphane Glondu
2010-06-24  9:38 ` Florent Ouchet
2010-06-24 17:45   ` Martin Jambon
2010-06-24 18:59     ` Florent.Ouchet
2010-06-24 19:29       ` Dmitry Bely
2010-06-24 19:31       ` Mathias Kende
2010-06-24 19:39       ` Till Varoquaux
2010-06-24 20:49         ` Florent Ouchet
2010-06-24 20:57           ` Hezekiah M. Carty
2010-06-24 22:05             ` Florent Ouchet
2010-06-25  5:54               ` bluestorm
2010-06-25  6:24                 ` Florent Ouchet
2010-06-25  8:17                   ` bluestorm
2010-06-25  8:48                     ` David Allsopp
2010-06-25  9:35                       ` bluestorm
2010-06-25  7:29 ` bluestorm

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E8A96ADD-B0B1-4EAB-8D00-F1DA4EE331EA@inria.fr \
    --to=damien.doligez@inria.fr \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).