Skip to content

Releases: ocaml/ocaml

OCaml 4.02.2

12 Jun 10:39
Compare
Choose a tag to compare
  • 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.
  • Add a nonrec keyword for type declarations, allowing to write type nonrec t = t.

See also: detailed list of changes.

OCaml 4.02.1

12 Jun 10:37
Compare
Choose a tag to compare

OCaml 4.02.0

12 Jun 10:35
Compare
Choose a tag to compare

Some of the highlights in release 4.02 are:

  • In a first step towards making strings immutable, a type bytes of
    mutable byte arrays and a supporting library module Bytes were
    introduced. By default, bytes is a synonym for string, so
    existing code that mutates values of type string still compiles,
    with warnings. Option -safe-string separates the types string
    and bytes, making strings immutable.

  • The match construct was extended to discriminate not just on the
    value of its argument expression, but also on exceptions arising out
    of the evaluation of this expression. This solves an old problem: in
    a let x = a in b, catch exceptions raised by a but not those
    raised by b.

  • Module aliases (giving an alternative name to an existing module or
    compilation unit, as in module M = AnotherModule) are now tracked
    specially by the type system and the compiler. This enables not only
    more precise typing of applicative functors, but also more precise
    dependency analysis at link-time, potentially reducing the size of
    executables.

  • Annotations can now be attached to most syntactic elements of OCaml
    sources (expressions, definitions, type declarations, etc). These
    annotations are used by the compiler (e.g. to warn on uses of
    functions annotated as deprecated) but also by "ppx" preprocessors,
    to guide rewriting of abstract syntax trees.

  • Extensible data types can be declared (type t = ..) then later
    extended with new constructors (type t += A of int). This
    generalizes the handling of the exn type of exception values.

  • Functors and functor applications can now take a special () argument
    to force generativity of abstract types.

  • New toplevel directives #show_type, #show_modules, etc, to query
    the toplevel environment.

  • Performance of ocamlopt-generated code is improved on some
    programs through more aggressive constant propagation, two new
    optimization passes (dead code elimination and common subexpression
    elimination), better compilation of pattern-matching over strings,
    optimized representation of constant exceptions, and GC tuning for
    large memory heaps.

  • The format strings argument of printf functions are now
    represented as a GADT. This speeds up the printf functions
    considerably, and leads to more precise typechecking of format
    strings.

  • The native-code compiler now supports the AArch64 (ARM 64 bits)
    architecture.

  • The Camlp4 preprocessor and the Labltk library were split off the
    distribution. They are now separate projects.

See also: detailed list of changes.

OCaml 4.01.0

12 Jun 10:41
Compare
Choose a tag to compare
  • It is now possible to have several variant constructors or record
    fields of the same name in scope, and type information will be used
    to disambiguate which one is used -- instead of always using the
    last one. See this post for a more detailed description of the feature.

  • New warnings can be activated to warn about identifiers that are
    used after having been shadowed by an open construct. The open
    keyword can be written open! to silence this warning (as method!
    silences the method warning).

  • The compiler now suggests possible typos on "unbound identifier"
    errors.

  • Infix application operators (|>) and (@@) are added to
    Pervasives.

  • The -short-path option changes the way the type-checker prints
    types to pick a short representation (eg. string instead of
    StringSet.elt).

  • This release saw a lot of polishing with sets of changes in many
    places: the type system for GADTs, compilation speed with
    -bin-annot, ocamlbuild, the test suite, low-level optimizations,
    etc.

See also: detailed list of changes.

OCaml 4.00.1

12 Jun 10:42
Compare
Choose a tag to compare

OCaml 4.00.0

12 Jun 10:43
Compare
Choose a tag to compare
  • The name the language is now officially "OCaml", and this name is
    used consistently in all the documentation and tool outputs.
  • Generalized Algebraic Data Types (GADTs): this is a powerful
    extension of the type system that provides great flexibility and
    power to the programmer.
  • A new and improved ARM back-end.
  • Changes to first-class modules: type annotations can now be omitted
    when packing and unpacking modules (and are inferred from context
    whenever possible), and first-class modules can now be unpacked by
    pattern-matching.
  • Support for randomized hash tables to avoid denial-of-service
    vulnerabilities.
  • Installation of the compiler's internal libraries in
    +compiler-libs for easier access by third-party programming tools.

See also: detailed list of changes.