Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
What’s new in OCaml 4.02
Xavier Leroy
INRIA Paris-Rocquencourt
OCaml Workshop, 2014-09-05
X. Leroy (INRIA) OCaml 4.02 OCam...
Recent releases
Major release 4.01.0: (Sept. 2013)
More lenient typing of ambiguous record labels and data constructors.
U...
Unified matching on values and exceptions
A classic programming problem: in let x = a in b, catch exceptions
raised by a bu...
Unified matching on values and exceptions
(Jeremy Yallop, Alain Frisch)
In OCaml 4.02: the match a with construct is extend...
Module aliases
Common practice: bind an existing module to another name.
module A = struct
module M = AnotherModule
...
en...
Module aliases
module A = struct
module M = AnotherModule
...
end
In classic OCaml, this binding is treated like any other...
Module aliases in OCaml 4.02
(Jacques Garrigue, Leo White)
In 4.02, module M = AnotherModule is treated specially:
During ...
Application to libraries
Goal: expose (to users) a library as a single unit L with submodules
L.A, L.B, etc.
Approach 1: s...
Application to libraries
New approach: use module aliases
Put A, B in distinct source files L_A.ml, L_B.ml, separately comp...
Mutability of strings
For historical reasons, the string type of OCaml is mutable in place and
has two broad uses:
To repr...
Pitfalls of mutable strings
Mutating someone else’s string literals: (Lafosec study, ANSSI)
# (Char.escaped ’t’).[1] <- ’n...
Pitfalls of mutable strings
LCF-style theorem proving:
module ProofSystem : sig
type thm
val modusponens: thm -> thm -> th...
Towards immutable strings (Damien Doligez)
In 4.02, two base types string (for text) and bytes (≈ byte arrays):
By default...
What changes?
In default mode:
All existing code compiles.
Warnings when using String functions that mutate in place.
In -...
Other novelties in OCaml 4.02
Language features:
Explicitly generative functors. (Jacques Garrigue)
A language of annotati...
Other novelties in OCaml 4.02
Performance improvements:
More aggressive constant propagation; dead code elimination;
commo...
Other novelties in OCaml 4.02
Usability:
New toplevel directives to query the environment, e.g.
#show_type list or #show_m...
This release brought to you by. . .
Damien Doligez,
release manager and general wizard.
The core Caml development team: Ja...
What’s next?
Bug-fix release 4.02.1.
Language features:
Various experiments in progress; nothing decided yet.
Implementatio...
In closing. . .
Enjoy OCaml 4.02!
Try to port your code to “safe string” mode: one day it might become the
default.
OPAM-p...
Upcoming SlideShare
Loading in …5
×

O caml2014 leroy-slides

318,196 views

Published on

An invited talk by Xavier Leroy explaining the current state of OCaml at the OCaml Users and Developers Workshop 2014. http://ocaml.org/meetings/ocaml/2014/

Published in: Software
  • Dating direct: ♥♥♥ http://bit.ly/2F90ZZC ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❶❶❶ http://bit.ly/2F90ZZC ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

O caml2014 leroy-slides

  1. 1. What’s new in OCaml 4.02 Xavier Leroy INRIA Paris-Rocquencourt OCaml Workshop, 2014-09-05 X. Leroy (INRIA) OCaml 4.02 OCaml 2014 1 / 20
  2. 2. Recent releases Major release 4.01.0: (Sept. 2013) More lenient typing of ambiguous record labels and data constructors. Usability features: -short-path option to print inferred types more legibly. A lot of new warnings. Suggested corrections for misspelt identifiers. 135 bug fixes, 25 feature wishes. Major release 4.02.0: (Sept. 2014) A great many new features! 66 bug fixes, 18 feature wishes. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 2 / 20
  3. 3. Unified matching on values and exceptions A classic programming problem: in let x = a in b, catch exceptions raised by a but not those raised by b. Wrong solution: put a try. . . with around let. let rec readfile ic accu = try let l = input_line ic in readfile ic (l :: accu) with End_of_file -> List.rev accu The try covers the recursive call to readfile and prevents it from being a tail call. Option-based encoding: correct but heavy. let rec readfile ic accu = match try Some(input_line ic) with End_of_file -> None with | Some l -> readfile ic (l :: accu) | None -> List.rev accu X. Leroy (INRIA) OCaml 4.02 OCaml 2014 3 / 20
  4. 4. Unified matching on values and exceptions (Jeremy Yallop, Alain Frisch) In OCaml 4.02: the match a with construct is extended to analyse both the value of a and exceptions raised during a’s evaluation. let rec readfile ic accu = match input_line ic with | "" -> readfile ic accu | l -> readfile ic (l :: accu) | exception End_of_file -> List.rev accu Compilation preserves tail-call optimization for the recursive call. No allocation of intermediate Some results. The usual try. . . with construct is a special case: try ... with Not_found -> 0 ≡ match ... with x -> x | exception Not_found -> 0 X. Leroy (INRIA) OCaml 4.02 OCaml 2014 4 / 20
  5. 5. Module aliases Common practice: bind an existing module to another name. module A = struct module M = AnotherModule ... end To have short qualified names M.x inside the body of A. To re-export a module or compilation unit as a submodule of another. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 5 / 20
  6. 6. Module aliases module A = struct module M = AnotherModule ... end In classic OCaml, this binding is treated like any other definition module M = module-expr Typing: the equality A.M = AnotherModule is not recorded, can cause type errors with applicative functors. Compilation: accesses A.M.x sometimes go through more indirections than AnotherModule.x. Linking: a reference to A.M.x links in the whole of module A, not just AnotherModule. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 6 / 20
  7. 7. Module aliases in OCaml 4.02 (Jacques Garrigue, Leo White) In 4.02, module M = AnotherModule is treated specially: During type-checking: the equality is recorded in the signature of the enclosing module A : sig module M = AnotherModule ... end During compilation: direct accesses to AnotherModule are generated. During linking: an access A.M.x no longer forces A to be linked in full, but only AnotherModule. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 7 / 20
  8. 8. Application to libraries Goal: expose (to users) a library as a single unit L with submodules L.A, L.B, etc. Approach 1: single source Write and compile L as a single source file L.ml. Problem: does not scale. Approach 2: packing Put A, B in distinct source files A.ml, B.ml, separately compiled. Use ocamlopt -pack -o L.cmx to produce the single unit L. Problem: L is always linked in full. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 8 / 20
  9. 9. Application to libraries New approach: use module aliases Put A, B in distinct source files L_A.ml, L_B.ml, separately compiled. (Note: the names L_A, L_B must be globally unique.) Write and compile a wrapper L.ml that re-exports them with short names: L.ml: module A = L_A module B = L_B Build and install an archive L.cmxa containing L_A, L_B, and L. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 9 / 20
  10. 10. Mutability of strings For historical reasons, the string type of OCaml is mutable in place and has two broad uses: To represent text: let string_of_pair (x,y) = "(" ^ x ^ ", " ^ y ^")" As I/O buffers: let read_data ic n = let buf = String.create n in let len = Unix.read ic buf 0 n in String.sub buf 0 len OCaml programmers are very good at keeping the two uses distinct. But mistakes happen, and user code can be malicious. . . X. Leroy (INRIA) OCaml 4.02 OCaml 2014 10 / 20
  11. 11. Pitfalls of mutable strings Mutating someone else’s string literals: (Lafosec study, ANSSI) # (Char.escaped ’t’).[1] <- ’n’;; - : unit = () # Char.escaped ’t’;; - : string = "n" # String.blit "true " 0 (string_of_bool false) 0 5;; - : unit = () # string_of_bool false;; - : string = "true " The disappearing key: let s = "foo" in Hashtbl.add tbl s 10; s.[1] <- ’x’; Hashtbl.find tbl "foo" X. Leroy (INRIA) OCaml 4.02 OCaml 2014 11 / 20
  12. 12. Pitfalls of mutable strings LCF-style theorem proving: module ProofSystem : sig type thm val modusponens: thm -> thm -> thm val axiom_eqrefl: term -> thm val axiom_and: formula -> formula -> formula ... end By subverting the OCaml type system or using mutability of strings, it is possible to derive false results even in our LCF prover, but we restrict ourselves to ‘normal’ functional programming. J. Harrison, Handbook of Practical Logic and Automated Reasoning X. Leroy (INRIA) OCaml 4.02 OCaml 2014 12 / 20
  13. 13. Towards immutable strings (Damien Doligez) In 4.02, two base types string (for text) and bytes (≈ byte arrays): By default, string and bytes are synonymous. They are incompatible if option -safe-string is given. In standard library String, functions that mutate strings are given types involving bytes and marked as deprecated: string.mli: val set : bytes -> int -> char -> unit [@@ocaml.deprecated] A new standard library module Bytes is provided with a full set of imperative functions operating over bytes, including conversion functions (with copy): bytes.mli: val set : bytes -> int -> char -> unit val of_string: string -> bytes val to_string: bytes -> string X. Leroy (INRIA) OCaml 4.02 OCaml 2014 13 / 20
  14. 14. What changes? In default mode: All existing code compiles. Warnings when using String functions that mutate in place. In -safe-string mode: Values of type string are immutable. (Unless unsafe coercions are used.) I/O code and imperative constructions of strings need to be rewritten to use type bytes and library functions Bytes. A plea for developers of libraries: try to port your code to -safe-string mode and let us know how it worked. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 14 / 20
  15. 15. Other novelties in OCaml 4.02 Language features: Explicitly generative functors. (Jacques Garrigue) A language of annotations over OCaml terms. Annotations are used by the compiler (e.g. to mark deprecated functions) and by preprocessors. (Alain Frisch) External preprocessors that rewrite the typed abstract syntax tree (-ppx option). (Alain Frisch) Open datatypes, extensible a posteriori with additional constructors. (Leo White) X. Leroy (INRIA) OCaml 4.02 OCaml 2014 15 / 20
  16. 16. Other novelties in OCaml 4.02 Performance improvements: More aggressive constant propagation; dead code elimination; common subexpression elimination. (Xavier Leroy) More efficient pattern-matching over strings. (Benoˆıt Vaugon, Luc Maranget) More efficient and safer implementation of printf based on GADTs. (Benoˆıt Vaugon, Gabriel Scherer) More efficient representation of exceptions without arguments. (Alain Frisch) X. Leroy (INRIA) OCaml 4.02 OCaml 2014 16 / 20
  17. 17. Other novelties in OCaml 4.02 Usability: New toplevel directives to query the environment, e.g. #show_type list or #show_module String. (Jacques Garrigue, Alain Frisch) New port: AArch64 (ARM in 64-bit mode). (Xavier Leroy, debugging by Richard Jones) Source reorganization: Camlp4 and Labltk were split off the core distribution and now live as independent projects — one opam install away. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 17 / 20
  18. 18. This release brought to you by. . . Damien Doligez, release manager and general wizard. The core Caml development team: Jacques Garrigue, Alain Frisch, Fabrice Le Fessant, Xavier Leroy, Gabriel Scherer, Mark Shinwell, Leo White, Jeremy Yallop With much appreciated contributions from: Anil Madhavapeddy, Benoˆıt Vaugon, Daniel B¨unzli, David Allsopp, Hongbo Zhang, Jacques-Henri Jourdan, Jacques-Pascal Deplaix, John Whitington, Jonathan Protzenko, Jun Furuse, J´er´emie Dimino, Luc Maranget, Markus Mottl, Maxence Guesdon, Phil Denys, Pierre Chambart, Richard Jones, Romain Bardou, Stephen Dolan, St´ephane Glondu, Thomas Refis, Vladimir Brankov, ygrek. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 18 / 20
  19. 19. What’s next? Bug-fix release 4.02.1. Language features: Various experiments in progress; nothing decided yet. Implementation: More optimizations, esp. improved inlining (Pierre Chambart). Ephemerons (Fran¸cois Bobot, Damien Doligez) GDB support (Mark Shinwell) Tweaks to support OPAM better. X. Leroy (INRIA) OCaml 4.02 OCaml 2014 19 / 20
  20. 20. In closing. . . Enjoy OCaml 4.02! Try to port your code to “safe string” mode: one day it might become the default. OPAM-package your code and support the OCaml Platform! Keep those contributions and this feedback flowing! X. Leroy (INRIA) OCaml 4.02 OCaml 2014 20 / 20

×