Releases: ocaml/ocaml
OCaml 5.2.1
Bug fixes.
See detailed list of changes.
OCaml 5.2.0
OCaml 5.2.0 is still a somewhat experimental release compared to the OCaml 4.14 branch. Some of the highlights in OCaml 5.2.0 are:
- Re-introduced GC compaction
- Restored native backend for POWER 64 bits
- Thread sanitizer support
- New Dynarray module
- New -H flag for hidden include directories
- Project-wide occurence metadata support for developer tools
- Raw identifiers
- Local open in type expressions
And a lot of incremental changes:
- Around 20 new functions in the standard library
- Many fixes and improvements in the runtime
- Many bug fixes
OCaml 4.14.2
Bug fixes. See detailed list of changes.
OCaml 5.1.1
- Breaking change:
Marshal.Compression
has been removed, compressed marshaling has been moved to an internal compiler library - Bug fixes. See detailed list of changes.
OCaml 5.1.0
OCaml 5.1.0 is still a relatively experimental release compared to the OCaml
4.14 branch. Some of the highlights in OCaml 5.1.0 are:
- Many runtime performance regression and memory-leaks fixes
(dynlinking, weak array, weak hash sets, GC with idle domains, GC prefetching). - Restored support for native code generation on RISC-V and s390x architectures.
- Restored Cygwin port.
- Reduced installation size (50% reduction)
- Compressed compilation artefacts (.cmi, .cmt, .cmti, .cmo, .cma files)
- 19 error message improvements
- 14 standard library functions made tail-recursive with Tail-Recursion-Modulo-Cons (TRMC), such as
List.append
andList.map
. - 57 new standard library functions
- More examples in the standard library documentation
- 42 bug fixes
OCaml 5.0.0
OCaml 5.0.0 introduces a completely new runtime environment with support for shared memory parallelism and effect handlers.
As a language, OCaml 5 is fully compatible with OCaml 4 down to the performance characteristics of your programs. In other words, any code that works with OCaml 4 should work the same with OCaml 5.
The currently known exceptions to this rule are:
- the removal of many long-deprecated functions and modules
- changes to the internal runtime API
- the performance of ephemerons is currently (and temporarily) strongly degraded.
OCaml 4.14.0
- Integrated support for "go to definitions" in Merlin.
- Standard library: new modules In_channel and Out_channel,
many new functions in Seq module, UTF decoding and validation support
for strings and bytes. - Runtime optimisation: GC prefetching. Benchmarks show a speedup of around 20%
in GC-heavy programs. - Improved error messages in particular for module-level error.
- Deprecated functions and modules in preparation for OCaml 5.
In particular, the Stream and Genlex modules are now deprecated. - Type variables can be explicitly introduced in value and variant constructor
declarations. For instance,
val fold: ('acc -> 'elt -> 'acc) -> 'acc -> 'elt list -> 'acc
type showable = Show: 'a * ('a -> string) -> showable
can now be written as
val fold: 'acc 'elt. ('acc -> 'elt -> 'acc) -> 'acc -> 'elt list -> 'acc
type showable = Show: 'a. 'a * ('a -> string) -> showable
- Tail-call with up to 64 arguments are now guaranteed to be optimized
for all architectures. - Experimental tail modulo cons (TMC) transformation
OCaml 4.13.1
Regression fix release.
See the detailed list of changes.
OCaml 4.13.0
- Safe points: a multicore prerequisite that ensures that ocamlopt-generated code can always be interrupted.
- The best-fit GC allocation policy is the now default policy (and many other GCs improvements).
- Named existential type variables in pattern matching
Showable (type a) (x, show : a * (a -> string))
. - Improved error messages for functor application and functor types.
- Let-punning for monadic let:
let* x = x in
can be shortened tolet* x in
. - Module type substitutions
SIG with module type T = F(X).S
. - Many other quality of life improvements
- Many bug fixes
See the detailed list of changes.
OCaml 4.12.1
Bug fixes.
See detailed list of changes.