comparison of OCaml and SML * SML has a formal Definition * SML has a number of compilers * OCaml has built-in support for oop comparison of OCaml and MLton * Performance o Both have excellent performance o MLton performs extensive WholeProgramOptimization, which provides improvements in modular programs o MLton uses native types, like 32-bit integers, without any penalty due to tagging or boxing. OCaml uses 31-bit integers with a penalty due to tagging, and 32-bit integers with a penalty due to boxing o MLton represents records compactly by reordering and packing the fields o In MLton, polymorphic and monomorphic code have the same performance o In MLton, module boundaries have no impact on performance * MLton's ForeignFunctionInterface is simpler * Tools o OCaml has a debugger, MLton does not. o OCaml supports separate compilation, MLton does not o OCaml compiles faster than MLton. o MLton supports profiling of both time and allocation
The most important ways to use findlib Findlib and the toploop For a number of platforms, O'Caml can load bytecode-compiled libraries dynamically. For these platforms, findlib is very simple to use as explained in the following. For other platforms, see the paragraph below about "custom toploops". After the toploop has been started, it is possible to load the special findlib support:[1] Findlib takes care to load packages that are required by loaded packages first. For example, "netstring" uses "unix" and "str" internally, but you do not need to load them because findlib does it for you. In this example you can also see that findlib loads netstring_top.cmo containing printers for the toploop.
# Please note that Dependent ML (DML) is no longer under active development. As a language, it has already been fully incorporated into ATS. # Dependent ML (DML) is a conservative extension of the functional programming language ML. The type system of DML enriches that of ML with a restricted form of dependent types. This allows many interesting program properties such as memory safety and termination to be captured in the type system of DML and therefore be verified at compiler-time. # DML The current (undocumented) implementation of a DML type-checker can be found here, which is written in Objective Caml. The syntax of DML can be readily learned from the various examples included in the distribution given that one is already familiar with Standard ML. Also, termination checking is supported in this implementation. # de Caml is the Caml-light compiler extended with a front-end supporting DML style dependent types.
mini languages which demonstrate various techniques in design and implementation of programming languages. The languages are implemented in Objective Caml. I teach Theory of Programming Languages at University of Ljubljana. For the course I implemented languages which demonstrate basic concepts such as parsing, type checking, type inference, dynamic types, evaluation strategies, and compilation. They are deliberately very simple, as each language introduces only one or two new basic ideas. You should find the source code useful if you want to learn how things are done. calc, miniml, boa, levy
G'Caml is a variant of O'Caml compiler which extends ML parametric polymorphism to non-parametric one, called extensional polymorphism. Freed from the clear but simple parametricity, G'Caml provides many useful features which were impossible or very hard to achieve in O'Caml, such as overloading, type safe value marshalling, ML value printer, etc., Overloading Values of different types can be overloaded to one identifier, i.e. (+) and (+.) will be unified! Built-in ML value printer Gprint.print prints your ML value as if you were in toplevel. You no longer need to define trivial but boring printers by yourself. Type safe value input/output Value marshaling (serialization) is now type-safe. Types of types are now checked at input, so that ill-typed value input is rejected at run-time, instead of crashing the program.