GET STARTED

Introduction To OCaml

Install OCaml and gain a high-level understanding of language features
Get Started
LANGUAGE

The OCaml Language

An in-depth explanation of language features and data structures from the Standard Library
See More Language Tutorials
GUIDES

Practical-Minded Tutorials and Guides

How to solve real-world problems in OCaml
See More Guides
PLATFORM

The OCaml Platform

Learn to leverage the tooling around OCaml and create your own projects and libraries
See More Tooling Tutorials
BOOKS

Recommended For Beginners

Beginner

OCaml From the Very Beginning

Suitable for formal use within an academic curriculum, and for the interested amateur.

Beginner

OCaml Programming: Correct + Efficient + Beautiful

Basic experience in some imperative programming language is helpful. Includes over 200 videos.

See More Books
BOOKS

For Intermediate Users

Intermediate

Real World OCaml

Suitable for people with some imperative programming experience. Hands-on code examples using real world scenerios.

Intermediate

More OCaml: Algorithms, Methods, & Diversions

This book covers topics like laziness, compression, generating PDFs, and more. A basic understanding of OCaml is required.

See More Books

Papers

Aspiring towards greater understanding of the language? Want to push the limits and discover brand new things? Check out papers written by leading OCaml researchers:
Retrofitting effect handlers onto OCaml
Effect handlers have been gathering momentum as a mechanism for modular programming with user-defined effects. Effect handlers allow for non-local control flow mechanisms such as generators, async/await, lightweight threads and coroutines to be composably expressed. We present a design and evaluate a full-fledged efficient implementation of effect handlers for OCaml, an industrial-strength multi-paradigm programming language. Our implementation strives to maintain the backwards compatibility and performance profile of existing OCaml code. Retrofitting effect handlers onto OCaml is challenging since OCaml does not currently have any non-local control flow mechanisms other than exceptions. Our implementation of effect handlers for OCaml: (i) imposes a mean 1% overhead on a comprehensive macro benchmark suite that does not use effect handlers; (ii) remains compatible with program analysis tools that inspect the stack; and (iii) is efficient for new code that makes use of effect handlers.
K. C. Sivaramakrishnan, Stephen Dolan, Leo White, Tom Kelly, Sadiq Jaffer, Anil Madhavapeddy
PLDI
effects
Extending OCaml's `open`
We propose a harmonious extension of OCaml's `open` construct. OCaml's existing construct `open M` imports the names exported by the module `M` into the current scope. At present `M` is required to be the path to a module. We propose extending `open` to instead accept an arbitrary module expression, making it possible to succinctly address a number of existing scope-related difficulties that arise when writing OCaml programs.
Runhang Li, Jeremy Yallop
ocaml-workshop
core
language
Bounding data races in space and time
We propose a new semantics for shared-memory parallel programs that gives strong guarantees even in the presence of data races. Our local data race freedom property guar- antees that all data-race-free portions of programs exhibit sequential semantics. We provide a straightforward oper- ational semantics and an equivalent axiomatic model, and evaluate an implementation for the OCaml programming language. Our evaluation demonstrates that it is possible to balance a comprehensible memory model with a reasonable (no overhead on x86, ~0.6% on ARM) sequential performance trade-off in a mainstream programming language
Stephen Dolan, KC Sivaramakrishnan, Anil Madhavapeddy
PLDI
multicore
View all papers