\@addtocsec{htoc}{1}{-2}{\@print{Part I}\quad{}An introduction to Objective Caml} \newlabel{p:tutorials}{{I}{X}} \@addtocsec{htoc}{2}{-1}{\@print{Chapter 1}\quad{}The core language} \newlabel{c:core-xamples}{{1}{X}} \@addtocsec{htoc}{3}{0}{\@print{1.1}\quad{}Basics} \@addtocsec{htoc}{4}{0}{\@print{1.2}\quad{}Data types} \@addtocsec{htoc}{5}{0}{\@print{1.3}\quad{}Functions as values} \@addtocsec{htoc}{6}{0}{\@print{1.4}\quad{}Records and variants} \newlabel{s:tut-recvariants}{{1.4}{X}} \@addtocsec{htoc}{7}{0}{\@print{1.5}\quad{}Imperative features} \@addtocsec{htoc}{8}{0}{\@print{1.6}\quad{}Exceptions} \@addtocsec{htoc}{9}{0}{\@print{1.7}\quad{}Symbolic processing of expressions} \@addtocsec{htoc}{10}{0}{\@print{1.8}\quad{}Pretty-printing and parsing} \@addtocsec{htoc}{11}{0}{\@print{1.9}\quad{}Standalone Caml programs} \@addtocsec{htoc}{12}{-1}{\@print{Chapter 2}\quad{}The module system} \newlabel{c:moduleexamples}{{2}{X}} \@addtocsec{htoc}{13}{0}{\@print{2.1}\quad{}Structures} \@addtocsec{htoc}{14}{0}{\@print{2.2}\quad{}Signatures} \@addtocsec{htoc}{15}{0}{\@print{2.3}\quad{}Functors} \@addtocsec{htoc}{16}{0}{\@print{2.4}\quad{}Functors and type abstraction} \@addtocsec{htoc}{17}{0}{\@print{2.5}\quad{}Modules and separate compilation} \@addtocsec{htoc}{18}{-1}{\@print{Chapter 3}\quad{}Objects in Caml} \newlabel{c:objectexamples}{{3}{X}} \@addtocsec{htoc}{19}{0}{\@print{3.1}\quad{}Classes and objects} \newlabel{ss:classes-and-objects}{{3.1}{X}} \@addtocsec{htoc}{20}{0}{\@print{3.2}\quad{}Reference to self} \newlabel{ss:reference-to-self}{{3.2}{X}} \@addtocsec{htoc}{21}{0}{\@print{3.3}\quad{}Initializers} \newlabel{ss:initializers}{{3.3}{X}} \@addtocsec{htoc}{22}{0}{\@print{3.4}\quad{}Virtual methods} \newlabel{ss:virtual-methods}{{3.4}{X}} \@addtocsec{htoc}{23}{0}{\@print{3.5}\quad{}Private methods} \newlabel{ss:private-methods}{{3.5}{X}} \@addtocsec{htoc}{24}{0}{\@print{3.6}\quad{}Class interfaces} \newlabel{ss:class-interfaces}{{3.6}{X}} \@addtocsec{htoc}{25}{0}{\@print{3.7}\quad{}Inheritance} \newlabel{ss:inheritance}{{3.7}{X}} \@addtocsec{htoc}{26}{0}{\@print{3.8}\quad{}Multiple inheritance} \newlabel{ss:multiple-inheritance}{{3.8}{X}} \@addtocsec{htoc}{27}{0}{\@print{3.9}\quad{}Parameterized classes} \newlabel{ss:parameterized-classes}{{3.9}{X}} \@addtocsec{htoc}{28}{0}{\@print{3.10}\quad{}Polymorphic methods} \newlabel{ss:polymorphic-methods}{{3.10}{X}} \@addtocsec{htoc}{29}{0}{\@print{3.11}\quad{}Using coercions} \newlabel{ss:using-coercions}{{3.11}{X}} \@addtocsec{htoc}{30}{0}{\@print{3.12}\quad{}Functional objects} \newlabel{ss:functional-objects}{{3.12}{X}} \@addtocsec{htoc}{31}{0}{\@print{3.13}\quad{}Cloning objects} \newlabel{ss:cloning-objects}{{3.13}{X}} \@addtocsec{htoc}{32}{0}{\@print{3.14}\quad{}Recursive classes} \newlabel{ss:recursive-classes}{{3.14}{X}} \@addtocsec{htoc}{33}{0}{\@print{3.15}\quad{}Binary methods} \newlabel{ss:binary-methods}{{3.15}{X}} \@addtocsec{htoc}{34}{0}{\@print{3.16}\quad{}Friends} \newlabel{ss:friends}{{3.16}{X}} \@addtocsec{htoc}{35}{-1}{\@print{Chapter 4}\quad{}Labels and variants} \newlabel{c:labl-examples}{{4}{X}} \@addtocsec{htoc}{36}{0}{\@print{4.1}\quad{}Labels} \@addtocsec{htoc}{37}{1}{\@print{4.1.1}\quad{}Optional arguments} \@addtocsec{htoc}{38}{1}{\@print{4.1.2}\quad{}Labels and type inference} \newlabel{ss:label-inference}{{4.1.2}{X}} \@addtocsec{htoc}{39}{1}{\@print{4.1.3}\quad{}Suggestions for labeling} \@addtocsec{htoc}{40}{0}{\@print{4.2}\quad{}Polymorphic variants} \@addtocsec{htoc}{41}{1}{\@print{4.2.1}\quad{}Weaknesses of polymorphic variants} \@addtocsec{htoc}{42}{-1}{\@print{Chapter 5}\quad{}Advanced examples with classes and modules} \@addtocsec{htoc}{43}{0}{\@print{5.1}\quad{}Extended example: bank accounts} \newlabel{ss:bank-accounts}{{5.1}{X}} \@addtocsec{htoc}{44}{0}{\@print{5.2}\quad{}Simple modules as classes} \newlabel{ss:modules-as-classes}{{5.2}{X}} \@addtocsec{htoc}{45}{1}{\@print{5.2.1}\quad{}Strings} \newlabel{module:string}{{5.2.1}{X}} \newlabel{module:stack}{{5.2.1}{X}} \@addtocsec{htoc}{46}{1}{\@print{5.2.2}\quad{}Hashtbl} \newlabel{module:hashtbl}{{5.2.2}{X}} \@addtocsec{htoc}{47}{1}{\@print{5.2.3}\quad{}Sets} \newlabel{module:set}{{5.2.3}{X}} \@addtocsec{htoc}{48}{0}{\@print{5.3}\quad{}The subject/observer pattern} \newlabel{ss:subject-observer}{{5.3}{X}} \@addtocsec{htoc}{49}{-2}{\@print{Part II}\quad{}The Objective Caml language} \newlabel{p:refman}{{II}{X}} \@addtocsec{htoc}{50}{-1}{\@print{Chapter 6}\quad{}The Objective Caml language} \newlabel{c:refman}{{6}{X}} \@addtocsec{htoc}{51}{0}{\@print{6.1}\quad{}Lexical conventions} \newlabel{s:characterliteral}{{6.1}{X}} \newlabel{s:stringliteral}{{6.1}{X}} \@addtocsec{htoc}{52}{0}{\@print{6.2}\quad{}Values} \@addtocsec{htoc}{53}{1}{\@print{6.2.1}\quad{}Base values} \newlabel{s:string-val}{{6.2.1}{X}} \@addtocsec{htoc}{54}{1}{\@print{6.2.2}\quad{}Tuples} \@addtocsec{htoc}{55}{1}{\@print{6.2.3}\quad{}Records} \@addtocsec{htoc}{56}{1}{\@print{6.2.4}\quad{}Arrays} \@addtocsec{htoc}{57}{1}{\@print{6.2.5}\quad{}Variant values} \@addtocsec{htoc}{58}{1}{\@print{6.2.6}\quad{}Polymorphic variants} \@addtocsec{htoc}{59}{1}{\@print{6.2.7}\quad{}Functions} \@addtocsec{htoc}{60}{1}{\@print{6.2.8}\quad{}Objects} \@addtocsec{htoc}{61}{0}{\@print{6.3}\quad{}Names} \newlabel{s:names}{{6.3}{X}} \@addtocsec{htoc}{62}{0}{\@print{6.4}\quad{}Type expressions} \newlabel{s:sharp-types}{{6.4}{X}} \@addtocsec{htoc}{63}{0}{\@print{6.5}\quad{}Constants} \@addtocsec{htoc}{64}{0}{\@print{6.6}\quad{}Patterns} \@addtocsec{htoc}{65}{0}{\@print{6.7}\quad{}Expressions} \newlabel{s:value-expr}{{6.7}{X}} \@addtocsec{htoc}{66}{1}{\@print{6.7.1}\quad{}Basic expressions} \newlabel{expr:var}{{6.7.1}{X}} \newlabel{s:localdef}{{6.7.1}{X}} \@addtocsec{htoc}{67}{1}{\@print{6.7.2}\quad{}Control structures} \@addtocsec{htoc}{68}{1}{\@print{6.7.3}\quad{}Operations on data structures} \@addtocsec{htoc}{69}{1}{\@print{6.7.4}\quad{}Operators} \@addtocsec{htoc}{70}{1}{\@print{6.7.5}\quad{}Objects} \newlabel{s:objects}{{6.7.5}{X}} \@addtocsec{htoc}{71}{0}{\@print{6.8}\quad{}Type and exception definitions} \@addtocsec{htoc}{72}{1}{\@print{6.8.1}\quad{}Type definitions} \newlabel{s:type-defs}{{6.8.1}{X}} \@addtocsec{htoc}{73}{1}{\@print{6.8.2}\quad{}Exception definitions} \newlabel{s:excdef}{{6.8.2}{X}} \@addtocsec{htoc}{74}{0}{\@print{6.9}\quad{}Classes} \@addtocsec{htoc}{75}{1}{\@print{6.9.1}\quad{}Class types} \@addtocsec{htoc}{76}{1}{\@print{6.9.2}\quad{}Class expressions} \@addtocsec{htoc}{77}{1}{\@print{6.9.3}\quad{}Class definitions} \newlabel{s:classdef}{{6.9.3}{X}} \@addtocsec{htoc}{78}{1}{\@print{6.9.4}\quad{}Class specification} \newlabel{s:class-spec}{{6.9.4}{X}} \@addtocsec{htoc}{79}{1}{\@print{6.9.5}\quad{}Class type definitions} \newlabel{s:classtype}{{6.9.5}{X}} \@addtocsec{htoc}{80}{0}{\@print{6.10}\quad{}Module types (module specifications)} \@addtocsec{htoc}{81}{1}{\@print{6.10.1}\quad{}Simple module types} \@addtocsec{htoc}{82}{1}{\@print{6.10.2}\quad{}Signatures} \@addtocsec{htoc}{83}{1}{\@print{6.10.3}\quad{}Functor types} \@addtocsec{htoc}{84}{1}{\@print{6.10.4}\quad{}The {\machine with} operator} \@addtocsec{htoc}{85}{0}{\@print{6.11}\quad{}Module expressions (module implementations)} \newlabel{s:module-expr}{{6.11}{X}} \@addtocsec{htoc}{86}{1}{\@print{6.11.1}\quad{}Simple module expressions} \@addtocsec{htoc}{87}{1}{\@print{6.11.2}\quad{}Structures} \@addtocsec{htoc}{88}{1}{\@print{6.11.3}\quad{}Functors} \@addtocsec{htoc}{89}{0}{\@print{6.12}\quad{}Compilation units} \@addtocsec{htoc}{90}{-1}{\@print{Chapter 7}\quad{}Language extensions} \newlabel{c:extensions}{{7}{X}} \@addtocsec{htoc}{91}{0}{\@print{7.1}\quad{}Streams and stream parsers} \newlabel{s:streams}{{7.1}{X}} \@addtocsec{htoc}{92}{0}{\@print{7.2}\quad{}Range patterns} \@addtocsec{htoc}{93}{0}{\@print{7.3}\quad{}Assertion checking} \@addtocsec{htoc}{94}{0}{\@print{7.4}\quad{}Deferred computations} \@addtocsec{htoc}{95}{0}{\@print{7.5}\quad{}Local modules} \@addtocsec{htoc}{96}{0}{\@print{7.6}\quad{}Grouping in integer and floating-point literals} \@addtocsec{htoc}{97}{-2}{\@print{Part III}\quad{}The Objective Caml tools} \newlabel{p:commands}{{III}{X}} \@addtocsec{htoc}{98}{-1}{\@print{Chapter 8}\quad{}Batch compilation (ocamlc)} \newlabel{c:camlc}{{8}{X}} \@addtocsec{htoc}{99}{0}{\@print{8.1}\quad{}Overview of the compiler} \@addtocsec{htoc}{100}{0}{\@print{8.2}\quad{}Options} \@addtocsec{htoc}{101}{0}{\@print{8.3}\quad{}Modules and the file system} \@addtocsec{htoc}{102}{0}{\@print{8.4}\quad{}Common errors} \newlabel{s:comp-errors}{{8.4}{X}} \@addtocsec{htoc}{103}{-1}{\@print{Chapter 9}\quad{}The toplevel system (ocaml)} \newlabel{c:camllight}{{9}{X}} \@addtocsec{htoc}{104}{0}{\@print{9.1}\quad{}Options} \newlabel{s:toplevel-options}{{9.1}{X}} \@addtocsec{htoc}{105}{0}{\@print{9.2}\quad{}Toplevel directives} \newlabel{s:toplevel-directives}{{9.2}{X}} \@addtocsec{htoc}{106}{0}{\@print{9.3}\quad{}The toplevel and the module system} \newlabel{s:toplevel-modules}{{9.3}{X}} \@addtocsec{htoc}{107}{0}{\@print{9.4}\quad{}Common errors} \@addtocsec{htoc}{108}{0}{\@print{9.5}\quad{}Building custom toplevel systems: {\machine ocamlmktop}} \@addtocsec{htoc}{109}{0}{\@print{9.6}\quad{}Options} \@addtocsec{htoc}{110}{-1}{\@print{Chapter 10}\quad{}The runtime system (ocamlrun)} \newlabel{c:runtime}{{10}{X}} \@addtocsec{htoc}{111}{0}{\@print{10.1}\quad{}Overview} \@addtocsec{htoc}{112}{0}{\@print{10.2}\quad{}Options} \newlabel{ocamlrun-options}{{10.2}{X}} \@addtocsec{htoc}{113}{0}{\@print{10.3}\quad{}Dynamic loading of shared libraries} \newlabel{s-ocamlrun-dllpath}{{10.3}{X}} \@addtocsec{htoc}{114}{0}{\@print{10.4}\quad{}Common errors} \@addtocsec{htoc}{115}{-1}{\@print{Chapter 11}\quad{}Native-code compilation (ocamlopt)} \newlabel{c:nativecomp}{{11}{X}} \@addtocsec{htoc}{116}{0}{\@print{11.1}\quad{}Overview of the compiler} \@addtocsec{htoc}{117}{0}{\@print{11.2}\quad{}Options} \@addtocsec{htoc}{118}{0}{\@print{11.3}\quad{}Common errors} \@addtocsec{htoc}{119}{0}{\@print{11.4}\quad{}Compatibility with the bytecode compiler} \newlabel{s:compat-native-bytecode}{{11.4}{X}} \@addtocsec{htoc}{120}{-1}{\@print{Chapter 12}\quad{}Lexer and parser generators (ocamllex, ocamlyacc)} \newlabel{c:ocamlyacc}{{12}{X}} \@addtocsec{htoc}{121}{0}{\@print{12.1}\quad{}Overview of {\machine ocamllex}} \@addtocsec{htoc}{122}{0}{\@print{12.2}\quad{}Syntax of lexer definitions} \@addtocsec{htoc}{123}{1}{\@print{12.2.1}\quad{}Header and trailer} \@addtocsec{htoc}{124}{1}{\@print{12.2.2}\quad{}Naming regular expressions} \@addtocsec{htoc}{125}{1}{\@print{12.2.3}\quad{}Entry points} \@addtocsec{htoc}{126}{1}{\@print{12.2.4}\quad{}Regular expressions} \@addtocsec{htoc}{127}{1}{\@print{12.2.5}\quad{}Actions} \@addtocsec{htoc}{128}{1}{\@print{12.2.6}\quad{}Reserved identifiers} \@addtocsec{htoc}{129}{0}{\@print{12.3}\quad{}Overview of {\machine ocamlyacc}} \@addtocsec{htoc}{130}{0}{\@print{12.4}\quad{}Syntax of grammar definitions} \@addtocsec{htoc}{131}{1}{\@print{12.4.1}\quad{}Header and trailer} \@addtocsec{htoc}{132}{1}{\@print{12.4.2}\quad{}Declarations} \@addtocsec{htoc}{133}{1}{\@print{12.4.3}\quad{}Rules} \@addtocsec{htoc}{134}{1}{\@print{12.4.4}\quad{}Error handling} \@addtocsec{htoc}{135}{0}{\@print{12.5}\quad{}Options} \@addtocsec{htoc}{136}{0}{\@print{12.6}\quad{}A complete example} \@addtocsec{htoc}{137}{0}{\@print{12.7}\quad{}Common errors} \@addtocsec{htoc}{138}{-1}{\@print{Chapter 13}\quad{}Dependency generator (ocamldep)} \newlabel{c:camldep}{{13}{X}} \@addtocsec{htoc}{139}{0}{\@print{13.1}\quad{}Options} \@addtocsec{htoc}{140}{0}{\@print{13.2}\quad{}A typical Makefile} \@addtocsec{htoc}{141}{-1}{\@print{Chapter 14}\quad{}The browser/editor (ocamlbrowser)} \newlabel{c:browser}{{14}{X}} \@addtocsec{htoc}{142}{0}{\@print{14.1}\quad{}Invocation} \newlabel{s:browser-options}{{14.1}{X}} \@addtocsec{htoc}{143}{0}{\@print{14.2}\quad{}Viewer} \@addtocsec{htoc}{144}{0}{\@print{14.3}\quad{}Module browsing} \@addtocsec{htoc}{145}{0}{\@print{14.4}\quad{}File editor} \@addtocsec{htoc}{146}{0}{\@print{14.5}\quad{}Shell} \@addtocsec{htoc}{147}{-1}{\@print{Chapter 15}\quad{}The documentation generator (ocamldoc)} \newlabel{c:ocamldoc}{{15}{X}} \@addtocsec{htoc}{148}{0}{\@print{15.1}\quad{}Usage} \newlabel{s:ocamldoc-usage}{{15.1}{X}} \@addtocsec{htoc}{149}{1}{\@print{15.1.1}\quad{}Invocation} \@addtocsec{htoc}{150}{1}{\@print{15.1.2}\quad{}Merging of module information} \newlabel{s:ocamldoc-merge}{{15.1.2}{X}} \@addtocsec{htoc}{151}{1}{\@print{15.1.3}\quad{}Coding rules} \newlabel{s:ocamldoc-rules}{{15.1.3}{X}} \@addtocsec{htoc}{152}{0}{\@print{15.2}\quad{}Syntax of documentation comments} \newlabel{s:ocamldoc-comments}{{15.2}{X}} \@addtocsec{htoc}{153}{1}{\@print{15.2.1}\quad{}Placement of documentation comments} \@addtocsec{htoc}{154}{1}{\@print{15.2.2}\quad{}The Stop special comment} \@addtocsec{htoc}{155}{1}{\@print{15.2.3}\quad{}Syntax of documentation comments} \@addtocsec{htoc}{156}{1}{\@print{15.2.4}\quad{}Text formatting} \@addtocsec{htoc}{157}{1}{\@print{15.2.5}\quad{}Documentation tags (@-tags)} \newlabel{s:ocamldoc-tags}{{15.2.5}{X}} \newlabel{s:ocamldoc-custom-tags}{{15.2.5}{X}} \@addtocsec{htoc}{158}{0}{\@print{15.3}\quad{}Custom generators} \newlabel{s:ocamldoc-custom-generators}{{15.3}{X}} \@addtocsec{htoc}{159}{1}{\@print{15.3.1}\quad{}The generator class} \@addtocsec{htoc}{160}{1}{\@print{15.3.2}\quad{}Handling custom tags} \newlabel{s:ocamldoc-handling-custom-tags}{{15.3.2}{X}} \@addtocsec{htoc}{161}{0}{\@print{15.4}\quad{}Adding command line options} \@addtocsec{htoc}{162}{1}{\@print{15.4.1}\quad{}Compilation and usage} \newlabel{s:ocamldoc-compilation-and-usage}{{15.4.1}{X}} \@addtocsec{htoc}{163}{-1}{\@print{Chapter 16}\quad{}The debugger (ocamldebug)} \newlabel{c:debugger}{{16}{X}} \@addtocsec{htoc}{164}{0}{\@print{16.1}\quad{}Compiling for debugging} \@addtocsec{htoc}{165}{0}{\@print{16.2}\quad{}Invocation} \@addtocsec{htoc}{166}{1}{\@print{16.2.1}\quad{}Starting the debugger} \@addtocsec{htoc}{167}{1}{\@print{16.2.2}\quad{}Exiting the debugger} \@addtocsec{htoc}{168}{0}{\@print{16.3}\quad{}Commands} \newlabel{s:debugger-commands}{{16.3}{X}} \@addtocsec{htoc}{169}{1}{\@print{16.3.1}\quad{}Getting help} \@addtocsec{htoc}{170}{1}{\@print{16.3.2}\quad{}Accessing the debugger state} \@addtocsec{htoc}{171}{0}{\@print{16.4}\quad{}Executing a program} \@addtocsec{htoc}{172}{1}{\@print{16.4.1}\quad{}Events} \@addtocsec{htoc}{173}{1}{\@print{16.4.2}\quad{}Starting the debugged program} \@addtocsec{htoc}{174}{1}{\@print{16.4.3}\quad{}Running the program} \@addtocsec{htoc}{175}{1}{\@print{16.4.4}\quad{}Time travel} \@addtocsec{htoc}{176}{1}{\@print{16.4.5}\quad{}Killing the program} \@addtocsec{htoc}{177}{0}{\@print{16.5}\quad{}Breakpoints} \newlabel{s:breakpoints}{{16.5}{X}} \@addtocsec{htoc}{178}{0}{\@print{16.6}\quad{}The call stack} \@addtocsec{htoc}{179}{0}{\@print{16.7}\quad{}Examining variable values} \@addtocsec{htoc}{180}{0}{\@print{16.8}\quad{}Controlling the debugger} \@addtocsec{htoc}{181}{1}{\@print{16.8.1}\quad{}Setting the program name and arguments} \@addtocsec{htoc}{182}{1}{\@print{16.8.2}\quad{}How programs are loaded} \@addtocsec{htoc}{183}{1}{\@print{16.8.3}\quad{}Search path for files} \@addtocsec{htoc}{184}{1}{\@print{16.8.4}\quad{}Working directory} \@addtocsec{htoc}{185}{1}{\@print{16.8.5}\quad{}Turning reverse execution on and off} \@addtocsec{htoc}{186}{1}{\@print{16.8.6}\quad{}Communication between the debugger and the program} \newlabel{s:communication}{{16.8.6}{X}} \@addtocsec{htoc}{187}{1}{\@print{16.8.7}\quad{}Fine-tuning the debugger} \newlabel{s:fine-tuning}{{16.8.7}{X}} \@addtocsec{htoc}{188}{1}{\@print{16.8.8}\quad{}User-defined printers} \@addtocsec{htoc}{189}{0}{\@print{16.9}\quad{}Miscellaneous commands} \@addtocsec{htoc}{190}{0}{\@print{16.10}\quad{}Running the debugger under Emacs} \newlabel{s:inf-debugger}{{16.10}{X}} \@addtocsec{htoc}{191}{-1}{\@print{Chapter 17}\quad{}Profiling (ocamlprof)} \newlabel{c:profiler}{{17}{X}} \@addtocsec{htoc}{192}{0}{\@print{17.1}\quad{}Compiling for profiling} \@addtocsec{htoc}{193}{0}{\@print{17.2}\quad{}Profiling an execution} \@addtocsec{htoc}{194}{0}{\@print{17.3}\quad{}Printing profiling information} \@addtocsec{htoc}{195}{0}{\@print{17.4}\quad{}Time profiling} \@addtocsec{htoc}{196}{-1}{\@print{Chapter 18}\quad{}Interfacing C with Objective Caml} \newlabel{c:intf-c}{{18}{X}} \@addtocsec{htoc}{197}{0}{\@print{18.1}\quad{}Overview and compilation information} \@addtocsec{htoc}{198}{1}{\@print{18.1.1}\quad{}Declaring primitives} \@addtocsec{htoc}{199}{1}{\@print{18.1.2}\quad{}Implementing primitives} \@addtocsec{htoc}{200}{1}{\@print{18.1.3}\quad{}Statically linking C code with Caml code} \newlabel{staticlink-c-code}{{18.1.3}{X}} \@addtocsec{htoc}{201}{1}{\@print{18.1.4}\quad{}Dynamically linking C code with Caml code} \newlabel{dynlink-c-code}{{18.1.4}{X}} \@addtocsec{htoc}{202}{1}{\@print{18.1.5}\quad{}Choosing between static linking and dynamic linking} \@addtocsec{htoc}{203}{1}{\@print{18.1.6}\quad{}Building standalone custom runtime systems} \newlabel{s:custom-runtime}{{18.1.6}{X}} \@addtocsec{htoc}{204}{0}{\@print{18.2}\quad{}The {\machine value} type} \@addtocsec{htoc}{205}{1}{\@print{18.2.1}\quad{}Integer values} \@addtocsec{htoc}{206}{1}{\@print{18.2.2}\quad{}Blocks} \@addtocsec{htoc}{207}{1}{\@print{18.2.3}\quad{}Pointers outside the heap} \@addtocsec{htoc}{208}{0}{\@print{18.3}\quad{}Representation of Caml data types} \@addtocsec{htoc}{209}{1}{\@print{18.3.1}\quad{}Atomic types} \@addtocsec{htoc}{210}{1}{\@print{18.3.2}\quad{}Tuples and records} \@addtocsec{htoc}{211}{1}{\@print{18.3.3}\quad{}Arrays} \@addtocsec{htoc}{212}{1}{\@print{18.3.4}\quad{}Concrete types} \@addtocsec{htoc}{213}{1}{\@print{18.3.5}\quad{}Objects} \@addtocsec{htoc}{214}{1}{\@print{18.3.6}\quad{}Variants} \@addtocsec{htoc}{215}{0}{\@print{18.4}\quad{}Operations on values} \@addtocsec{htoc}{216}{1}{\@print{18.4.1}\quad{}Kind tests} \@addtocsec{htoc}{217}{1}{\@print{18.4.2}\quad{}Operations on integers} \@addtocsec{htoc}{218}{1}{\@print{18.4.3}\quad{}Accessing blocks} \@addtocsec{htoc}{219}{1}{\@print{18.4.4}\quad{}Allocating blocks} \@addtocsec{htoc}{220}{1}{\@print{18.4.5}\quad{}Raising exceptions} \newlabel{s:c-exceptions}{{18.4.5}{X}} \@addtocsec{htoc}{221}{0}{\@print{18.5}\quad{}Living in harmony with the garbage collector} \@addtocsec{htoc}{222}{1}{\@print{18.5.1}\quad{}Simple interface} \@addtocsec{htoc}{223}{1}{\@print{18.5.2}\quad{}Low-level interface} \@addtocsec{htoc}{224}{0}{\@print{18.6}\quad{}A complete example} \@addtocsec{htoc}{225}{0}{\@print{18.7}\quad{}Advanced topic: callbacks from C to Caml} \newlabel{s:callback}{{18.7}{X}} \@addtocsec{htoc}{226}{1}{\@print{18.7.1}\quad{}Applying Caml closures from C} \newlabel{s:callbacks}{{18.7.1}{X}} \@addtocsec{htoc}{227}{1}{\@print{18.7.2}\quad{}Registering Caml closures for use in C functions} \@addtocsec{htoc}{228}{1}{\@print{18.7.3}\quad{}Registering Caml exceptions for use in C functions} \newlabel{s:register-exn}{{18.7.3}{X}} \@addtocsec{htoc}{229}{1}{\@print{18.7.4}\quad{}Main program in C} \newlabel{s:main-c}{{18.7.4}{X}} \@addtocsec{htoc}{230}{1}{\@print{18.7.5}\quad{}Embedding the Caml code in the C code} \newlabel{s:embedded-code}{{18.7.5}{X}} \@addtocsec{htoc}{231}{0}{\@print{18.8}\quad{}Advanced example with callbacks} \@addtocsec{htoc}{232}{0}{\@print{18.9}\quad{}Advanced topic: custom blocks} \newlabel{s:custom}{{18.9}{X}} \@addtocsec{htoc}{233}{1}{\@print{18.9.1}\quad{}The {\machine struct\ custom{\char95}operations}} \@addtocsec{htoc}{234}{1}{\@print{18.9.2}\quad{}Allocating custom blocks} \@addtocsec{htoc}{235}{1}{\@print{18.9.3}\quad{}Accessing custom blocks} \@addtocsec{htoc}{236}{1}{\@print{18.9.4}\quad{}Writing custom serialization and deserialization functions} \@addtocsec{htoc}{237}{1}{\@print{18.9.5}\quad{}Choosing identifiers} \@addtocsec{htoc}{238}{1}{\@print{18.9.6}\quad{}Finalized blocks} \@addtocsec{htoc}{239}{0}{\@print{18.10}\quad{}Building mixed C/Caml libraries: {\machine ocamlmklib}} \newlabel{s-ocamlmklib}{{18.10}{X}} \@addtocsec{htoc}{240}{-2}{\@print{Part IV}\quad{}The Objective Caml library} \newlabel{p:library}{{IV}{X}} \@addtocsec{htoc}{241}{-1}{\@print{Chapter 19}\quad{}The core library} \newlabel{c:corelib}{{19}{X}} \@addtocsec{htoc}{242}{0}{\@print{19.1}\quad{}Built-in types and predefined exceptions} \@addtocsec{htoc}{243}{-1}{\@print{Chapter 20}\quad{}The standard library} \newlabel{c:stdlib}{{20}{X}} \newlabel{stdlib:top}{{20}{X}} \@addtocsec{htoc}{244}{-1}{\@print{Chapter 21}\quad{}The unix library: Unix system calls} \@addtocsec{htoc}{245}{-1}{\@print{Chapter 22}\quad{}The num library: arbitrary-precision rational arithmetic} \@addtocsec{htoc}{246}{-1}{\@print{Chapter 23}\quad{}The str library: regular expressions and string processing} \@addtocsec{htoc}{247}{-1}{\@print{Chapter 24}\quad{}The threads library} \newlabel{c:threads}{{24}{X}} \@addtocsec{htoc}{248}{-1}{\@print{Chapter 25}\quad{}The graphics library} \@addtocsec{htoc}{249}{-1}{\@print{Chapter 26}\quad{}The dbm library: access to NDBM databases} \@addtocsec{htoc}{250}{-1}{\@print{Chapter 27}\quad{}The dynlink library: dynamic loading and linking of object files} \@addtocsec{htoc}{251}{-1}{\@print{Chapter 28}\quad{}The LablTk library: Tcl/Tk GUI interface} \@addtocsec{htoc}{252}{-1}{\@print{Chapter 29}\quad{}The bigarray library} \@addtocsec{htoc}{253}{0}{\@print{29.1}\quad{}Module {\tt Bigarray}: large, multi-dimensional, numerical arrays} \@addtocsec{htoc}{254}{0}{\@print{29.2}\quad{}Big arrays in the Caml-C interface} \@addtocsec{htoc}{255}{1}{\@print{29.2.1}\quad{}Include file} \@addtocsec{htoc}{256}{1}{\@print{29.2.2}\quad{}Accessing a Caml bigarray from C or Fortran} \@addtocsec{htoc}{257}{1}{\@print{29.2.3}\quad{}Wrapping a C or Fortran array as a Caml big array} \@addtocsec{htoc}{258}{-2}{\@print{Part V}\quad{}Appendix} \newlabel{p:appendix}{{V}{X}}