<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <meta name="generator" content="hevea 2.32"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1"> <link rel="stylesheet" type="text/css" href="manual.css"> <title>Contents</title> </head> <body> <a href="index.html"><img src="contents_motif.svg" alt="Up"></a> <a href="foreword.html"><img src="next_motif.svg" alt="Next"></a> <hr> <h1 class="chapter" id="sec1">Contents</h1> <ul class="toc"><li class="li-toc"> <a href="index.html#sec6">Part I  An introduction to OCaml</a> <ul class="toc"><li class="li-toc"> <a href="coreexamples.html#sec7">Chapter 1  The core language</a> <ul class="toc"><li class="li-toc"> <a href="coreexamples.html#sec8">1.1  Basics</a> </li><li class="li-toc"><a href="coreexamples.html#sec9">1.2  Data types</a> </li><li class="li-toc"><a href="coreexamples.html#sec10">1.3  Functions as values</a> </li><li class="li-toc"><a href="coreexamples.html#sec11">1.4  Records and variants</a> <ul class="toc"><li class="li-toc"> <a href="coreexamples.html#sec12">1.4.1  Record and variant disambiguation</a> </li></ul> </li><li class="li-toc"><a href="coreexamples.html#sec13">1.5  Imperative features</a> </li><li class="li-toc"><a href="coreexamples.html#sec14">1.6  Exceptions</a> </li><li class="li-toc"><a href="coreexamples.html#sec15">1.7  Symbolic processing of expressions</a> </li><li class="li-toc"><a href="coreexamples.html#sec16">1.8  Pretty-printing</a> </li><li class="li-toc"><a href="coreexamples.html#sec17">1.9  Standalone OCaml programs</a> </li></ul> </li><li class="li-toc"><a href="moduleexamples.html#sec18">Chapter 2  The module system</a> <ul class="toc"><li class="li-toc"> <a href="moduleexamples.html#sec19">2.1  Structures</a> </li><li class="li-toc"><a href="moduleexamples.html#sec20">2.2  Signatures</a> </li><li class="li-toc"><a href="moduleexamples.html#sec21">2.3  Functors</a> </li><li class="li-toc"><a href="moduleexamples.html#sec22">2.4  Functors and type abstraction</a> </li><li class="li-toc"><a href="moduleexamples.html#sec23">2.5  Modules and separate compilation</a> </li></ul> </li><li class="li-toc"><a href="objectexamples.html#sec24">Chapter 3  Objects in OCaml</a> <ul class="toc"><li class="li-toc"> <a href="objectexamples.html#sec25">3.1  Classes and objects</a> </li><li class="li-toc"><a href="objectexamples.html#sec26">3.2  Immediate objects</a> </li><li class="li-toc"><a href="objectexamples.html#sec27">3.3  Reference to self</a> </li><li class="li-toc"><a href="objectexamples.html#sec28">3.4  Initializers</a> </li><li class="li-toc"><a href="objectexamples.html#sec29">3.5  Virtual methods</a> </li><li class="li-toc"><a href="objectexamples.html#sec30">3.6  Private methods</a> </li><li class="li-toc"><a href="objectexamples.html#sec31">3.7  Class interfaces</a> </li><li class="li-toc"><a href="objectexamples.html#sec32">3.8  Inheritance</a> </li><li class="li-toc"><a href="objectexamples.html#sec33">3.9  Multiple inheritance</a> </li><li class="li-toc"><a href="objectexamples.html#sec34">3.10  Parameterized classes</a> </li><li class="li-toc"><a href="objectexamples.html#sec35">3.11  Polymorphic methods</a> </li><li class="li-toc"><a href="objectexamples.html#sec36">3.12  Using coercions</a> </li><li class="li-toc"><a href="objectexamples.html#sec37">3.13  Functional objects</a> </li><li class="li-toc"><a href="objectexamples.html#sec38">3.14  Cloning objects</a> </li><li class="li-toc"><a href="objectexamples.html#sec39">3.15  Recursive classes</a> </li><li class="li-toc"><a href="objectexamples.html#sec40">3.16  Binary methods</a> </li><li class="li-toc"><a href="objectexamples.html#sec41">3.17  Friends</a> </li></ul> </li><li class="li-toc"><a href="lablexamples.html#sec42">Chapter 4  Labels and variants</a> <ul class="toc"><li class="li-toc"> <a href="lablexamples.html#sec43">4.1  Labels</a> <ul class="toc"><li class="li-toc"> <a href="lablexamples.html#sec44">4.1.1  Optional arguments</a> </li><li class="li-toc"><a href="lablexamples.html#sec45">4.1.2  Labels and type inference</a> </li><li class="li-toc"><a href="lablexamples.html#sec46">4.1.3  Suggestions for labeling</a> </li></ul> </li><li class="li-toc"><a href="lablexamples.html#sec47">4.2  Polymorphic variants</a> <ul class="toc"><li class="li-toc"> <a href="lablexamples.html#sec50">4.2.1  Weaknesses of polymorphic variants</a> </li></ul> </li></ul> </li><li class="li-toc"><a href="polymorphism.html#sec51">Chapter 5  Polymorphism and its limitations</a> <ul class="toc"><li class="li-toc"> <a href="polymorphism.html#sec52">5.1  Weak polymorphism and mutation</a> <ul class="toc"><li class="li-toc"> <a href="polymorphism.html#sec53">5.1.1  Weakly polymorphic types</a> </li><li class="li-toc"><a href="polymorphism.html#sec54">5.1.2  The value restriction</a> </li><li class="li-toc"><a href="polymorphism.html#sec55">5.1.3  The relaxed value restriction</a> </li><li class="li-toc"><a href="polymorphism.html#sec56">5.1.4  Variance and value restriction</a> </li><li class="li-toc"><a href="polymorphism.html#sec57">5.1.5  Abstract data types</a> </li></ul> </li><li class="li-toc"><a href="polymorphism.html#sec58">5.2  Polymorphic recursion</a> <ul class="toc"><li class="li-toc"> <a href="polymorphism.html#sec59">5.2.1  Explicitly polymorphic annotations</a> </li><li class="li-toc"><a href="polymorphism.html#sec60">5.2.2  More examples</a> </li></ul> </li><li class="li-toc"><a href="polymorphism.html#sec61">5.3  Higher-rank polymorphic functions</a> </li></ul> </li><li class="li-toc"><a href="advexamples.html#sec62">Chapter 6  Advanced examples with classes and modules</a> <ul class="toc"><li class="li-toc"> <a href="advexamples.html#sec63">6.1  Extended example: bank accounts</a> </li><li class="li-toc"><a href="advexamples.html#sec64">6.2  Simple modules as classes</a> <ul class="toc"><li class="li-toc"> <a href="advexamples.html#sec65">6.2.1  Strings</a> </li><li class="li-toc"><a href="advexamples.html#sec67">6.2.2  Hashtbl</a> </li><li class="li-toc"><a href="advexamples.html#sec68">6.2.3  Sets</a> </li></ul> </li><li class="li-toc"><a href="advexamples.html#sec69">6.3  The subject/observer pattern</a> </li></ul> </li></ul> </li><li class="li-toc"><a href="index.html#sec70">Part II  The OCaml language</a> <ul class="toc"><li class="li-toc"> <a href="language.html#sec71">Chapter 7  The OCaml language</a> <ul class="toc"><li class="li-toc"> <a href="lex.html#sec74">7.1  Lexical conventions</a> </li><li class="li-toc"><a href="values.html#sec87">7.2  Values</a> <ul class="toc"><li class="li-toc"> <a href="values.html#sec88">7.2.1  Base values</a> </li><li class="li-toc"><a href="values.html#sec93">7.2.2  Tuples</a> </li><li class="li-toc"><a href="values.html#sec94">7.2.3  Records</a> </li><li class="li-toc"><a href="values.html#sec95">7.2.4  Arrays</a> </li><li class="li-toc"><a href="values.html#sec96">7.2.5  Variant values</a> </li><li class="li-toc"><a href="values.html#sec97">7.2.6  Polymorphic variants</a> </li><li class="li-toc"><a href="values.html#sec98">7.2.7  Functions</a> </li><li class="li-toc"><a href="values.html#sec99">7.2.8  Objects</a> </li></ul> </li><li class="li-toc"><a href="names.html#sec100">7.3  Names</a> </li><li class="li-toc"><a href="types.html#sec103">7.4  Type expressions</a> </li><li class="li-toc"><a href="const.html#sec114">7.5  Constants</a> </li><li class="li-toc"><a href="patterns.html#sec115">7.6  Patterns</a> </li><li class="li-toc"><a href="expr.html#s%3Avalue-expr">7.7  Expressions</a> <ul class="toc"><li class="li-toc"> <a href="expr.html#sec129">7.7.1  Basic expressions</a> </li><li class="li-toc"><a href="expr.html#sec138">7.7.2  Control structures</a> </li><li class="li-toc"><a href="expr.html#sec145">7.7.3  Operations on data structures</a> </li><li class="li-toc"><a href="expr.html#sec152">7.7.4  Operators</a> </li><li class="li-toc"><a href="expr.html#sec153">7.7.5  Objects</a> </li><li class="li-toc"><a href="expr.html#sec159">7.7.6  Coercions</a> </li><li class="li-toc"><a href="expr.html#sec163">7.7.7  Other</a> </li></ul> </li><li class="li-toc"><a href="typedecl.html#sec168">7.8  Type and exception definitions</a> <ul class="toc"><li class="li-toc"> <a href="typedecl.html#sec169">7.8.1  Type definitions</a> </li><li class="li-toc"><a href="typedecl.html#sec170">7.8.2  Exception definitions</a> </li></ul> </li><li class="li-toc"><a href="classes.html#sec171">7.9  Classes</a> <ul class="toc"><li class="li-toc"> <a href="classes.html#sec172">7.9.1  Class types</a> </li><li class="li-toc"><a href="classes.html#sec182">7.9.2  Class expressions</a> </li><li class="li-toc"><a href="classes.html#sec197">7.9.3  Class definitions</a> </li><li class="li-toc"><a href="classes.html#sec200">7.9.4  Class specifications</a> </li><li class="li-toc"><a href="classes.html#sec201">7.9.5  Class type definitions</a> </li></ul> </li><li class="li-toc"><a href="modtypes.html#sec202">7.10  Module types (module specifications)</a> <ul class="toc"><li class="li-toc"> <a href="modtypes.html#sec203">7.10.1  Simple module types</a> </li><li class="li-toc"><a href="modtypes.html#sec204">7.10.2  Signatures</a> </li><li class="li-toc"><a href="modtypes.html#sec214">7.10.3  Functor types</a> </li><li class="li-toc"><a href="modtypes.html#sec215">7.10.4  The <span class="c003">with</span> operator</a> </li></ul> </li><li class="li-toc"><a href="modules.html#s%3Amodule-expr">7.11  Module expressions (module implementations)</a> <ul class="toc"><li class="li-toc"> <a href="modules.html#sec217">7.11.1  Simple module expressions</a> </li><li class="li-toc"><a href="modules.html#sec218">7.11.2  Structures</a> </li><li class="li-toc"><a href="modules.html#sec228">7.11.3  Functors</a> </li></ul> </li><li class="li-toc"><a href="compunit.html#sec231">7.12  Compilation units</a> </li></ul> </li><li class="li-toc"><a href="extn.html#sec232">Chapter 8  Language extensions</a> <ul class="toc"><li class="li-toc"> <a href="extn.html#sec233">8.1  Integer literals for types <span class="c003">int32</span>, <span class="c003">int64</span> and <span class="c003">nativeint</span></a> </li><li class="li-toc"><a href="extn.html#sec234">8.2  Recursive definitions of values</a> </li><li class="li-toc"><a href="extn.html#sec235">8.3  Lazy patterns</a> </li><li class="li-toc"><a href="extn.html#sec236">8.4  Recursive modules</a> </li><li class="li-toc"><a href="extn.html#sec237">8.5  Private types</a> <ul class="toc"><li class="li-toc"> <a href="extn.html#sec238">8.5.1  Private variant and record types</a> </li><li class="li-toc"><a href="extn.html#sec239">8.5.2  Private type abbreviations</a> </li><li class="li-toc"><a href="extn.html#sec240">8.5.3  Private row types</a> </li></ul> </li><li class="li-toc"><a href="extn.html#sec241">8.6  Local opens for patterns</a> </li><li class="li-toc"><a href="extn.html#sec242">8.7  Object copy short notations</a> </li><li class="li-toc"><a href="extn.html#sec243">8.8  Locally abstract types</a> </li><li class="li-toc"><a href="extn.html#sec245">8.9  First-class modules</a> </li><li class="li-toc"><a href="extn.html#sec248">8.10  Recovering the type of a module</a> </li><li class="li-toc"><a href="extn.html#sec249">8.11  Substituting inside a signature</a> </li><li class="li-toc"><a href="extn.html#sec250">8.12  Type-level module aliases</a> </li><li class="li-toc"><a href="extn.html#sec251">8.13  Overriding in open statements</a> </li><li class="li-toc"><a href="extn.html#sec252">8.14  Generalized algebraic datatypes</a> </li><li class="li-toc"><a href="extn.html#sec259">8.15  Syntax for Bigarray access</a> </li><li class="li-toc"><a href="extn.html#sec260">8.16  Attributes</a> <ul class="toc"><li class="li-toc"> <a href="extn.html#sec261">8.16.1  Built-in attributes</a> </li></ul> </li><li class="li-toc"><a href="extn.html#sec262">8.17  Extension nodes</a> <ul class="toc"><li class="li-toc"> <a href="extn.html#sec263">8.17.1  Built-in extension nodes</a> </li></ul> </li><li class="li-toc"><a href="extn.html#sec264">8.18  Quoted strings</a> </li><li class="li-toc"><a href="extn.html#sec265">8.19  Exception cases in pattern matching</a> </li><li class="li-toc"><a href="extn.html#sec266">8.20  Extensible variant types</a> <ul class="toc"><li class="li-toc"> <a href="extn.html#sec267">8.20.1  Private extensible variant types</a> </li></ul> </li><li class="li-toc"><a href="extn.html#sec268">8.21  Generative functors</a> </li><li class="li-toc"><a href="extn.html#sec269">8.22  Extension-only syntax</a> <ul class="toc"><li class="li-toc"> <a href="extn.html#sec270">8.22.1  Extension operators</a> </li><li class="li-toc"><a href="extn.html#sec271">8.22.2  Extension literals</a> </li></ul> </li><li class="li-toc"><a href="extn.html#sec272">8.23  Inline records</a> </li><li class="li-toc"><a href="extn.html#sec273">8.24  Local exceptions</a> </li><li class="li-toc"><a href="extn.html#sec274">8.25  Documentation comments</a> <ul class="toc"><li class="li-toc"> <a href="extn.html#sec275">8.25.1  Floating comments</a> </li><li class="li-toc"><a href="extn.html#sec276">8.25.2  Item comments</a> </li><li class="li-toc"><a href="extn.html#sec277">8.25.3  Label comments</a> </li></ul> </li><li class="li-toc"><a href="extn.html#s%3Aindex-operators">8.26  Extended indexing operators </a> </li><li class="li-toc"><a href="extn.html#s%3Aempty-variants">8.27  Empty variant types </a> </li></ul> </li></ul> </li><li class="li-toc"><a href="index.html#sec280">Part III  The OCaml tools</a> <ul class="toc"><li class="li-toc"> <a href="comp.html#sec281">Chapter 9  Batch compilation (ocamlc)</a> <ul class="toc"><li class="li-toc"> <a href="comp.html#sec282">9.1  Overview of the compiler</a> </li><li class="li-toc"><a href="comp.html#sec283">9.2  Options</a> </li><li class="li-toc"><a href="comp.html#sec285">9.3  Modules and the file system</a> </li><li class="li-toc"><a href="comp.html#sec286">9.4  Common errors</a> </li><li class="li-toc"><a href="comp.html#sec287">9.5  Warning reference</a> <ul class="toc"><li class="li-toc"> <a href="comp.html#sec288">9.5.1  Warning 9: missing fields in a record pattern</a> </li><li class="li-toc"><a href="comp.html#sec289">9.5.2  Warning 52: fragile constant pattern</a> </li><li class="li-toc"><a href="comp.html#sec290">9.5.3  Warning 57: Ambiguous or-pattern variables under guard</a> </li></ul> </li></ul> </li><li class="li-toc"><a href="toplevel.html#sec291">Chapter 10  The toplevel system or REPL (ocaml)</a> <ul class="toc"><li class="li-toc"> <a href="toplevel.html#sec292">10.1  Options</a> </li><li class="li-toc"><a href="toplevel.html#sec293">10.2  Toplevel directives</a> </li><li class="li-toc"><a href="toplevel.html#sec294">10.3  The toplevel and the module system</a> </li><li class="li-toc"><a href="toplevel.html#sec295">10.4  Common errors</a> </li><li class="li-toc"><a href="toplevel.html#sec296">10.5  Building custom toplevel systems: <span class="c003">ocamlmktop</span></a> <ul class="toc"><li class="li-toc"> <a href="toplevel.html#sec297">10.5.1  Options</a> </li></ul> </li><li class="li-toc"><a href="toplevel.html#sec298">10.6  The native toplevel: <span class="c003">ocamlnat</span> (experimental)</a> </li></ul> </li><li class="li-toc"><a href="runtime.html#sec299">Chapter 11  The runtime system (ocamlrun)</a> <ul class="toc"><li class="li-toc"> <a href="runtime.html#sec300">11.1  Overview</a> </li><li class="li-toc"><a href="runtime.html#sec301">11.2  Options</a> </li><li class="li-toc"><a href="runtime.html#sec302">11.3  Dynamic loading of shared libraries</a> </li><li class="li-toc"><a href="runtime.html#sec303">11.4  Common errors</a> </li></ul> </li><li class="li-toc"><a href="native.html#sec304">Chapter 12  Native-code compilation (ocamlopt)</a> <ul class="toc"><li class="li-toc"> <a href="native.html#sec305">12.1  Overview of the compiler</a> </li><li class="li-toc"><a href="native.html#sec306">12.2  Options</a> </li><li class="li-toc"><a href="native.html#sec310">12.3  Common errors</a> </li><li class="li-toc"><a href="native.html#sec311">12.4  Running executables produced by ocamlopt</a> </li><li class="li-toc"><a href="native.html#sec312">12.5  Compatibility with the bytecode compiler</a> </li></ul> </li><li class="li-toc"><a href="lexyacc.html#sec313">Chapter 13  Lexer and parser generators (ocamllex, ocamlyacc)</a> <ul class="toc"><li class="li-toc"> <a href="lexyacc.html#sec314">13.1  Overview of <span class="c003">ocamllex</span></a> <ul class="toc"><li class="li-toc"> <a href="lexyacc.html#sec315">13.1.1  Options</a> </li></ul> </li><li class="li-toc"><a href="lexyacc.html#sec316">13.2  Syntax of lexer definitions</a> <ul class="toc"><li class="li-toc"> <a href="lexyacc.html#sec317">13.2.1  Header and trailer</a> </li><li class="li-toc"><a href="lexyacc.html#sec318">13.2.2  Naming regular expressions</a> </li><li class="li-toc"><a href="lexyacc.html#sec319">13.2.3  Entry points</a> </li><li class="li-toc"><a href="lexyacc.html#sec320">13.2.4  Regular expressions</a> </li><li class="li-toc"><a href="lexyacc.html#sec321">13.2.5  Actions</a> </li><li class="li-toc"><a href="lexyacc.html#sec322">13.2.6  Variables in regular expressions</a> </li><li class="li-toc"><a href="lexyacc.html#sec323">13.2.7  Refill handlers</a> </li><li class="li-toc"><a href="lexyacc.html#sec324">13.2.8  Reserved identifiers</a> </li></ul> </li><li class="li-toc"><a href="lexyacc.html#sec325">13.3  Overview of <span class="c003">ocamlyacc</span></a> </li><li class="li-toc"><a href="lexyacc.html#sec326">13.4  Syntax of grammar definitions</a> <ul class="toc"><li class="li-toc"> <a href="lexyacc.html#sec327">13.4.1  Header and trailer</a> </li><li class="li-toc"><a href="lexyacc.html#sec328">13.4.2  Declarations</a> </li><li class="li-toc"><a href="lexyacc.html#sec329">13.4.3  Rules</a> </li><li class="li-toc"><a href="lexyacc.html#sec330">13.4.4  Error handling</a> </li></ul> </li><li class="li-toc"><a href="lexyacc.html#sec331">13.5  Options</a> </li><li class="li-toc"><a href="lexyacc.html#sec332">13.6  A complete example</a> </li><li class="li-toc"><a href="lexyacc.html#sec333">13.7  Common errors</a> </li></ul> </li><li class="li-toc"><a href="depend.html#sec334">Chapter 14  Dependency generator (ocamldep)</a> <ul class="toc"><li class="li-toc"> <a href="depend.html#sec335">14.1  Options</a> </li><li class="li-toc"><a href="depend.html#sec336">14.2  A typical Makefile</a> </li></ul> </li><li class="li-toc"><a href="browser.html#sec337">Chapter 15  The browser/editor (ocamlbrowser)</a> </li><li class="li-toc"><a href="ocamldoc.html#sec338">Chapter 16  The documentation generator (ocamldoc)</a> <ul class="toc"><li class="li-toc"> <a href="ocamldoc.html#sec339">16.1  Usage</a> <ul class="toc"><li class="li-toc"> <a href="ocamldoc.html#sec340">16.1.1  Invocation</a> </li><li class="li-toc"><a href="ocamldoc.html#sec349">16.1.2  Merging of module information</a> </li><li class="li-toc"><a href="ocamldoc.html#sec350">16.1.3  Coding rules</a> </li></ul> </li><li class="li-toc"><a href="ocamldoc.html#sec351">16.2  Syntax of documentation comments</a> <ul class="toc"><li class="li-toc"> <a href="ocamldoc.html#sec352">16.2.1  Placement of documentation comments</a> </li><li class="li-toc"><a href="ocamldoc.html#sec355">16.2.2  The Stop special comment</a> </li><li class="li-toc"><a href="ocamldoc.html#sec356">16.2.3  Syntax of documentation comments</a> </li><li class="li-toc"><a href="ocamldoc.html#sec357">16.2.4  Text formatting</a> </li><li class="li-toc"><a href="ocamldoc.html#sec363">16.2.5  Documentation tags (@-tags)</a> </li></ul> </li><li class="li-toc"><a href="ocamldoc.html#sec366">16.3  Custom generators</a> <ul class="toc"><li class="li-toc"> <a href="ocamldoc.html#sec367">16.3.1  The generator modules</a> </li><li class="li-toc"><a href="ocamldoc.html#sec368">16.3.2  Handling custom tags</a> </li></ul> </li><li class="li-toc"><a href="ocamldoc.html#sec371">16.4  Adding command line options</a> <ul class="toc"><li class="li-toc"> <a href="ocamldoc.html#sec372">16.4.1  Compilation and usage</a> </li></ul> </li></ul> </li><li class="li-toc"><a href="debugger.html#sec375">Chapter 17  The debugger (ocamldebug)</a> <ul class="toc"><li class="li-toc"> <a href="debugger.html#sec376">17.1  Compiling for debugging</a> </li><li class="li-toc"><a href="debugger.html#sec377">17.2  Invocation</a> <ul class="toc"><li class="li-toc"> <a href="debugger.html#sec378">17.2.1  Starting the debugger</a> </li><li class="li-toc"><a href="debugger.html#sec379">17.2.2  Initialization file</a> </li><li class="li-toc"><a href="debugger.html#sec380">17.2.3  Exiting the debugger</a> </li></ul> </li><li class="li-toc"><a href="debugger.html#sec381">17.3  Commands</a> <ul class="toc"><li class="li-toc"> <a href="debugger.html#sec382">17.3.1  Getting help</a> </li><li class="li-toc"><a href="debugger.html#sec383">17.3.2  Accessing the debugger state</a> </li></ul> </li><li class="li-toc"><a href="debugger.html#sec384">17.4  Executing a program</a> <ul class="toc"><li class="li-toc"> <a href="debugger.html#sec385">17.4.1  Events</a> </li><li class="li-toc"><a href="debugger.html#sec386">17.4.2  Starting the debugged program</a> </li><li class="li-toc"><a href="debugger.html#sec387">17.4.3  Running the program</a> </li><li class="li-toc"><a href="debugger.html#sec388">17.4.4  Time travel</a> </li><li class="li-toc"><a href="debugger.html#sec389">17.4.5  Killing the program</a> </li></ul> </li><li class="li-toc"><a href="debugger.html#sec390">17.5  Breakpoints</a> </li><li class="li-toc"><a href="debugger.html#sec391">17.6  The call stack</a> </li><li class="li-toc"><a href="debugger.html#sec392">17.7  Examining variable values</a> </li><li class="li-toc"><a href="debugger.html#sec393">17.8  Controlling the debugger</a> <ul class="toc"><li class="li-toc"> <a href="debugger.html#sec394">17.8.1  Setting the program name and arguments</a> </li><li class="li-toc"><a href="debugger.html#sec395">17.8.2  How programs are loaded</a> </li><li class="li-toc"><a href="debugger.html#sec396">17.8.3  Search path for files</a> </li><li class="li-toc"><a href="debugger.html#sec397">17.8.4  Working directory</a> </li><li class="li-toc"><a href="debugger.html#sec398">17.8.5  Turning reverse execution on and off</a> </li><li class="li-toc"><a href="debugger.html#sec399">17.8.6  Communication between the debugger and the program</a> </li><li class="li-toc"><a href="debugger.html#sec400">17.8.7  Fine-tuning the debugger</a> </li><li class="li-toc"><a href="debugger.html#sec401">17.8.8  User-defined printers</a> </li></ul> </li><li class="li-toc"><a href="debugger.html#sec402">17.9  Miscellaneous commands</a> </li><li class="li-toc"><a href="debugger.html#sec403">17.10  Running the debugger under Emacs</a> </li></ul> </li><li class="li-toc"><a href="profil.html#sec404">Chapter 18  Profiling (ocamlprof)</a> <ul class="toc"><li class="li-toc"> <a href="profil.html#sec405">18.1  Compiling for profiling</a> </li><li class="li-toc"><a href="profil.html#sec409">18.2  Profiling an execution</a> </li><li class="li-toc"><a href="profil.html#sec410">18.3  Printing profiling information</a> </li><li class="li-toc"><a href="profil.html#sec411">18.4  Time profiling</a> </li></ul> </li><li class="li-toc"><a href="manual033.html#sec413">Chapter 19  The ocamlbuild compilation manager</a> </li><li class="li-toc"><a href="intfc.html#c%3Aintf-c">Chapter 20  Interfacing C with OCaml</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec415">20.1  Overview and compilation information</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec416">20.1.1  Declaring primitives</a> </li><li class="li-toc"><a href="intfc.html#sec417">20.1.2  Implementing primitives</a> </li><li class="li-toc"><a href="intfc.html#sec418">20.1.3  Statically linking C code with OCaml code</a> </li><li class="li-toc"><a href="intfc.html#sec419">20.1.4  Dynamically linking C code with OCaml code</a> </li><li class="li-toc"><a href="intfc.html#sec420">20.1.5  Choosing between static linking and dynamic linking</a> </li><li class="li-toc"><a href="intfc.html#sec421">20.1.6  Building standalone custom runtime systems</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec422">20.2  The <span class="c003">value</span> type</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec423">20.2.1  Integer values</a> </li><li class="li-toc"><a href="intfc.html#sec424">20.2.2  Blocks</a> </li><li class="li-toc"><a href="intfc.html#sec425">20.2.3  Pointers outside the heap</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec426">20.3  Representation of OCaml data types</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec427">20.3.1  Atomic types</a> </li><li class="li-toc"><a href="intfc.html#sec428">20.3.2  Tuples and records</a> </li><li class="li-toc"><a href="intfc.html#sec429">20.3.3  Arrays</a> </li><li class="li-toc"><a href="intfc.html#sec430">20.3.4  Concrete data types</a> </li><li class="li-toc"><a href="intfc.html#sec431">20.3.5  Objects</a> </li><li class="li-toc"><a href="intfc.html#sec432">20.3.6  Polymorphic variants</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec433">20.4  Operations on values</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec434">20.4.1  Kind tests</a> </li><li class="li-toc"><a href="intfc.html#sec435">20.4.2  Operations on integers</a> </li><li class="li-toc"><a href="intfc.html#sec436">20.4.3  Accessing blocks</a> </li><li class="li-toc"><a href="intfc.html#sec437">20.4.4  Allocating blocks</a> </li><li class="li-toc"><a href="intfc.html#sec440">20.4.5  Raising exceptions</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec441">20.5  Living in harmony with the garbage collector</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec442">20.5.1  Simple interface</a> </li><li class="li-toc"><a href="intfc.html#sec448">20.5.2  Low-level interface</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec449">20.6  A complete example</a> </li><li class="li-toc"><a href="intfc.html#sec450">20.7  Advanced topic: callbacks from C to OCaml</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec451">20.7.1  Applying OCaml closures from C</a> </li><li class="li-toc"><a href="intfc.html#sec453">20.7.2  Obtaining or registering OCaml closures for use in C functions</a> </li><li class="li-toc"><a href="intfc.html#sec454">20.7.3  Registering OCaml exceptions for use in C functions</a> </li><li class="li-toc"><a href="intfc.html#sec455">20.7.4  Main program in C</a> </li><li class="li-toc"><a href="intfc.html#sec456">20.7.5  Embedding the OCaml code in the C code</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec460">20.8  Advanced example with callbacks</a> </li><li class="li-toc"><a href="intfc.html#sec461">20.9  Advanced topic: custom blocks</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec462">20.9.1  The <span class="c003">struct custom_operations</span></a> </li><li class="li-toc"><a href="intfc.html#sec463">20.9.2  Allocating custom blocks</a> </li><li class="li-toc"><a href="intfc.html#sec464">20.9.3  Accessing custom blocks</a> </li><li class="li-toc"><a href="intfc.html#sec465">20.9.4  Writing custom serialization and deserialization functions</a> </li><li class="li-toc"><a href="intfc.html#sec466">20.9.5  Choosing identifiers</a> </li><li class="li-toc"><a href="intfc.html#sec467">20.9.6  Finalized blocks</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec468">20.10  Advanced topic: Big arrays and the OCaml-C interface</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec469">20.10.1  Include file</a> </li><li class="li-toc"><a href="intfc.html#sec470">20.10.2  Accessing an OCaml bigarray from C or Fortran</a> </li><li class="li-toc"><a href="intfc.html#sec471">20.10.3  Wrapping a C or Fortran array as an OCaml big array</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec472">20.11  Advanced topic: cheaper C call</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec473">20.11.1  Passing unboxed values</a> </li><li class="li-toc"><a href="intfc.html#sec474">20.11.2  Direct C call</a> </li><li class="li-toc"><a href="intfc.html#sec475">20.11.3  Example: calling C library functions without indirection</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec476">20.12  Advanced topic: multithreading</a> <ul class="toc"><li class="li-toc"> <a href="intfc.html#sec477">20.12.1  Registering threads created from C</a> </li><li class="li-toc"><a href="intfc.html#sec478">20.12.2  Parallel execution of long-running C code</a> </li></ul> </li><li class="li-toc"><a href="intfc.html#sec479">20.13  Advanced topic: interfacing with Windows Unicode APIs</a> </li><li class="li-toc"><a href="intfc.html#sec481">20.14  Building mixed C/OCaml libraries: <span class="c003">ocamlmklib</span></a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec483">Chapter 21  Optimisation with Flambda</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec484">21.1  Overview</a> </li><li class="li-toc"><a href="flambda.html#sec485">21.2  Command-line flags</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec487">21.2.1  Specification of optimisation parameters by round</a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec488">21.3  Inlining</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec490">21.3.1  Classic inlining heuristic</a> </li><li class="li-toc"><a href="flambda.html#sec491">21.3.2  Overview of “Flambda” inlining heuristics</a> </li><li class="li-toc"><a href="flambda.html#sec492">21.3.3  Handling of specific language constructs</a> </li><li class="li-toc"><a href="flambda.html#sec496">21.3.4  Inlining reports</a> </li><li class="li-toc"><a href="flambda.html#sec497">21.3.5  Assessment of inlining benefit</a> </li><li class="li-toc"><a href="flambda.html#sec498">21.3.6  Control of speculation</a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec499">21.4  Specialisation</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec502">21.4.1  Assessment of specialisation benefit</a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec503">21.5  Default settings of parameters</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec504">21.5.1  Settings at -O2 optimisation level</a> </li><li class="li-toc"><a href="flambda.html#sec505">21.5.2  Settings at -O3 optimisation level</a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec506">21.6  Manual control of inlining and specialisation</a> </li><li class="li-toc"><a href="flambda.html#sec508">21.7  Simplification</a> </li><li class="li-toc"><a href="flambda.html#sec509">21.8  Other code motion transformations</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec510">21.8.1  Lifting of constants</a> </li><li class="li-toc"><a href="flambda.html#sec512">21.8.2  Lifting of toplevel let bindings</a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec513">21.9  Unboxing transformations</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec514">21.9.1  Unboxing of closure variables</a> </li><li class="li-toc"><a href="flambda.html#sec516">21.9.2  Unboxing of specialised arguments</a> </li><li class="li-toc"><a href="flambda.html#sec518">21.9.3  Unboxing of closures</a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec521">21.10  Removal of unused code and values</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec522">21.10.1  Removal of redundant let expressions</a> </li><li class="li-toc"><a href="flambda.html#sec523">21.10.2  Removal of redundant program constructs</a> </li><li class="li-toc"><a href="flambda.html#sec524">21.10.3  Removal of unused arguments</a> </li><li class="li-toc"><a href="flambda.html#sec525">21.10.4  Removal of unused closure variables</a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec526">21.11  Other code transformations</a> <ul class="toc"><li class="li-toc"> <a href="flambda.html#sec527">21.11.1  Transformation of non-escaping references into mutable variables</a> </li><li class="li-toc"><a href="flambda.html#sec528">21.11.2  Substitution of closure variables for specialised arguments</a> </li></ul> </li><li class="li-toc"><a href="flambda.html#sec529">21.12  Treatment of effects</a> </li><li class="li-toc"><a href="flambda.html#sec530">21.13  Compilation of statically-allocated modules</a> </li><li class="li-toc"><a href="flambda.html#sec531">21.14  Inhibition of optimisation</a> </li><li class="li-toc"><a href="flambda.html#sec532">21.15  Use of unsafe operations</a> </li><li class="li-toc"><a href="flambda.html#sec533">21.16  Glossary</a> </li></ul> </li><li class="li-toc"><a href="spacetime.html#sec534">Chapter 22  Memory profiling with Spacetime</a> <ul class="toc"><li class="li-toc"> <a href="spacetime.html#sec535">22.1  Overview</a> </li><li class="li-toc"><a href="spacetime.html#sec536">22.2  How to use it</a> <ul class="toc"><li class="li-toc"> <a href="spacetime.html#sec537">22.2.1  Building</a> </li><li class="li-toc"><a href="spacetime.html#sec538">22.2.2  Running</a> </li><li class="li-toc"><a href="spacetime.html#sec539">22.2.3  Analysis</a> </li></ul> </li><li class="li-toc"><a href="spacetime.html#sec540">22.3  Runtime overhead</a> </li><li class="li-toc"><a href="spacetime.html#sec541">22.4  For developers</a> </li></ul> </li><li class="li-toc"><a href="afl-fuzz.html#sec542">Chapter 23  Fuzzing with afl-fuzz</a> <ul class="toc"><li class="li-toc"> <a href="afl-fuzz.html#sec543">23.1  Overview</a> </li><li class="li-toc"><a href="afl-fuzz.html#sec544">23.2  Generating instrumentation</a> <ul class="toc"><li class="li-toc"> <a href="afl-fuzz.html#sec545">23.2.1  Advanced options</a> </li></ul> </li><li class="li-toc"><a href="afl-fuzz.html#sec546">23.3  Example</a> </li></ul> </li><li class="li-toc"><a href="plugins.html#c%3Aplugins">Chapter 24  Compiler plugins</a> <ul class="toc"><li class="li-toc"> <a href="plugins.html#sec548">24.1  Overview</a> </li><li class="li-toc"><a href="plugins.html#sec549">24.2  Basic example</a> </li></ul> </li></ul> </li><li class="li-toc"><a href="index.html#sec550">Part IV  The OCaml library</a> <ul class="toc"><li class="li-toc"> <a href="core.html#sec551">Chapter 25  The core library</a> <ul class="toc"><li class="li-toc"> <a href="core.html#sec553">25.1  Built-in types and predefined exceptions</a> </li><li class="li-toc"><a href="core.html#sec556">25.2  Module <span class="c003">Pervasives</span>: the initially opened module</a> </li></ul> </li><li class="li-toc"><a href="stdlib.html#sec557">Chapter 26  The standard library</a> </li><li class="li-toc"><a href="parsing.html#sec559">Chapter 27  The compiler front-end</a> </li><li class="li-toc"><a href="libunix.html#sec560">Chapter 28  The unix library: Unix system calls</a> </li><li class="li-toc"><a href="libnum.html#sec561">Chapter 29  The num library: arbitrary-precision rational arithmetic</a> </li><li class="li-toc"><a href="libstr.html#sec562">Chapter 30  The str library: regular expressions and string processing</a> </li><li class="li-toc"><a href="libthreads.html#sec563">Chapter 31  The threads library</a> </li><li class="li-toc"><a href="libgraph.html#sec564">Chapter 32  The graphics library</a> </li><li class="li-toc"><a href="libdynlink.html#sec565">Chapter 33  The dynlink library: dynamic loading and linking of object files</a> </li><li class="li-toc"><a href="libbigarray.html#sec566">Chapter 34  The bigarray library</a> </li></ul> </li><li class="li-toc"><a href="index.html#sec567">Part V  Appendix</a> </li></ul><hr> <a href="index.html"><img src="contents_motif.svg" alt="Up"></a> <a href="foreword.html"><img src="next_motif.svg" alt="Next"></a> </body> </html>