FACTOID # 77: Moldova has one of the smallest artillery forces in Europe, and the highest rate in the world of death by powered lawnmower. Coincidence? Surely not.
 
 Home   Encyclopedia   Statistics   Countries A-Z   Flags   Maps   Education   Forum   FAQ   About 
 
WHAT'S NEW
RELATED ARTICLES
People who viewed "OCaml" also viewed:
RECENT ARTICLES
More Recent Articles »
 

SEARCH ALL

FACTS & STATISTICS    Advanced view

Search encyclopedia, statistics and forums:

 

 

(* = Graphable)

 

 


Encyclopedia > OCaml
Image:Caml.128x58.gif  Objective Caml
Maintainer: INRIA
Latest release: 3.09.2 / April 14, 2006
OS: Cross-platform
Use: Programming language
License: Q Public License (compiler)
LGPL (library)
Website: http://caml.inria.fr/

Objective Caml (OCaml) is a general-purpose programming language descended from the ML family, created by Xavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy and others in 1996. OCaml is an open source project managed and principally maintained by INRIA. Image File history File links Caml. ... Software maintenance is one of the activities in software engineering, and is the process of enhancing and optimizing deployed software (software release), as well as remedying defects. ... The Institut national de recherche en informatique et en automatique (INRIA) is a French national research institution focusing on computer science, control theory and applied mathematics. ... A software release is to create a new version of the system or program and release it to the user community. ... April 14 is the 104th day of the year in the Gregorian calendar (105th in leap years). ... 2006 (MMVI) is a common year starting on Sunday of the Gregorian calendar. ... An operating system (OS) is an essential software program that manages the hardware and software resources of a computer. ... A cross-platform (or platform independent) programming language, software application or hardware device works on more than one system platform (e. ... Computer code (HTML with JavaScript) in a tool that uses syntax highlighting (colors) to help the developer see the purpose of each piece of code. ... A software license is a legal agreement which may take the form of a proprietary or gratuitous license as well as a memorandum of contract between a producer and a user of computer software. ... The Q Public License (QPL) is a non-copyleft free software license created by Trolltech for its free edition of the Qt toolkit. ... GNU logo The GNU Lesser General Public License (formerly the GNU Library General Public License) is an FSF approved Free Software license designed as a compromise between the GNU General Public License and simple permissive licenses such as the BSD license and the MIT License. ... This page as shown in the aol 9. ... Computer code (HTML with JavaScript) in a tool that uses syntax highlighting (colors) to help the developer see the purpose of each piece of code. ... ML is a general-purpose functional programming language developed by Robin Milner and others in the late 1970s at the University of Edinburgh, whose syntax is inspired by ISWIM. Historically, ML stands for metalanguage as it was conceived to develop proof tactics in the LCF theorem prover (the language of... Xavier Leroy is a French academic and programmer. ... Damien Doligez is a French academic and programmer. ... Open source refers to projects that are open to the public and which draw on other projects that are freely available to the general public. ... The Institut national de recherche en informatique et en automatique (INRIA) is a French national research institution focusing on computer science, control theory and applied mathematics. ...


OCaml shares the functional and imperative programming features of ML, but adds object-oriented constructs and has minor syntax differences. Like all descendants of ML, OCaml is compiled, statically typed, strictly evaluated, and uses automatic memory management. Functional programming is a programming paradigm that conceives computation as the evaluation of mathematical functions and avoids state and mutable data. ... In computer science, imperative programming, as opposed to declarative programming, is a programming paradigm that describes computation in terms of a program state and statements that change the program state. ... In computer science, object-oriented programming, OOP for short, is a computer programming paradigm. ... Syntax, originating from the Greek words συν (syn, meaning co- or together) and τάξις (táxis, meaning sequence, order, arrangement), can in linguistics be described as the study of the rules, or patterned relations that govern the way the words in a sentence come together. ... A diagram of the operation of a typical multi-language compiler. ... In computer science, a type system defines how a programming language classifies values and variables into types, how it can manipulate those types and how they interact. ... An evaluation strategy (or reduction strategy) for a programming language is a set of (usually deterministic) rules for defining the evaluation of expressions under β-reduction. ... In computing, garbage collection is a system of automatic memory management which seeks to reclaim memory used by objects which will never be referenced in the future. ...


OCaml's toolset includes an interactive toplevel, a bytecode compiler, and an optimizing native code compiler. It has a large standard library that makes it useful for many of the same applications as Python or Perl, as well as robust modular and object-oriented programming constructs that make it applicable for large-scale software engineering. Byte-code is a sort of intermediate code that is more abstract than machine code. ... Python is an interpreted programming language created by Guido van Rossum in 1990. ... Perl, also Practical Extraction and Report Language (a backronym, see below) is a dynamic procedural programming language designed by Larry Wall and first released in 1987. ...


OCaml is a successor to Caml Light. The acronym CAML originally stood for Categorical Abstract Machine Language, although OCaml abandons this abstract machine. Caml Light is a lightweight and portable implementation of Caml. ... CAML (Categorical Abstract Machine Language) is a version of ML developed by G. Huet, G. Cousineau, Ascánder Suárez, Pierre Weis, Michel Mauny and others from both INRIA and ENS. Implemented in Lisp, it was nicknamed Heavy CAML because of its memory and CPU requirements relative to its successor...

Contents


Philosophy

ML-derived languages are best known for their static type systems and type-inferring compilers. OCaml unifies functional, imperative, and object-oriented programming under an ML-like type system. In computer science, a type system defines how a programming language classifies values and variables into types, how it can manipulate those types and how they interact. ... Type inference is a feature present in some strongly statically typed programming languages. ...


OCaml's static type system eliminates a large class of programmer errors that may cause problems at runtime. However, it also forces the programmer to conform to the constraints of the type system, which can require careful thought and close attention. The type-inferring compiler greatly reduces the need for manual type annotation (for example, the data type of variables and the signature of functions usually do not need to be expressly declared, as they do in Java). Nonetheless, effective use of OCaml's type system can require some sophistication on the part of the programmer. On computer science, a datatype (often simply type) is a name or label for a set of values and some operations which can be performed on that set of values. ... Java is an object-oriented programming language developed by James Gosling and colleagues at Sun Microsystems in the early 1990s. ...


OCaml is perhaps most distinguished from other languages with origins in academia by its emphasis on performance. Firstly, its static type system renders runtime type mismatches impossible, and thus obviates the need for runtime type and safety checks that burden the performance of dynamically typed languages, while still guaranteeing runtime safety.


Aside from type-checking overhead, functional programming languages are, in general, challenging to compile to efficient machine language code, due to issues such as the funarg problem. In addition to standard loop, register, and instruction optimizations, OCaml's optimizing compiler employs static program analysis techniques to optimize value boxing and closure allocation, helping to maximize the performance of the resulting code even if it makes extensive use of functional programming constructs. Functional programming is a programming paradigm that conceives computation as the evaluation of mathematical functions and avoids state and mutable data. ... Funarg is an abbreviation for functional argument; in computer science, the funarg problem relates to the difficulty of implementing functions as first-class citizen objects in stack-based programming language implementations. ... Compiler optimization techniques are optimization techniques that have been programmed into a compiler. ... Static code analysis is a set of methods for analysing software source code or object code in an effort to gain understanding of what the software does and establish certain correctness criteria. ... In computer science, an object type (a. ... In programming languages, a closure is a function that refers to free variables in its lexical context. ...


Xavier Leroy has cautiously stated that "OCaml delivers at least 50% of the performance of a decent C compiler" [1], and benchmarks have shown that this is generally the case [2]. In computing, a benchmark is the result of running a computer program, or a set of programs, in order to assess the relative performance of an object, by running a number of standard tests and trials against it. ...


Features

OCaml features: a static type system, type inference, parametric polymorphism, tail recursion, pattern matching, first class lexical closures, functors (parametric modules), exception handling, and incremental generational automatic garbage collection. In computer science, semantic analysis is a pass by a compiler that adds semantical information to the parse tree and performs certain checks based on this information. ... In computer science, a type system defines how a programming language classifies values and variables into types, how it can manipulate those types and how they interact. ... Type inference is a feature present in some strongly statically typed programming languages. ... In computer science, polymorphism means allowing a single definition to be used with different types of data (specifically, different classes of objects). ... In computer science, tail recursion is a special case of recursion that can be transformed into an iteration. ... Pattern matching is the act of checking for the presence of the constituents of a given pattern. ... In programming languages, a closure is a function that refers to free variables in its lexical context. ... A function object, often called a functor, is a computer programming construct allowing an object to be invoked or called as if it were an ordinary function, usually with the same syntax. ... Exception handling is a programming language construct or computer hardware mechanism designed to handle runtime errors or other problems (exceptions) which occur during the execution of a computer program. ... In computer science, garbage collection (also known as GC) is a form of automatic memory management. ...


OCaml is particularly notable for extending ML-style type inference to an object system in a general purpose language. This permits structural subtyping, where object types are compatible if their method signatures are compatible, regardless of their declared inheritance; an unusual feature in statically-typed languages. In computer science, a subtype is a datatype that is generally related to another datatype (the supertype) by some notion of substitutability, meaning that computer programs written to operate on elements of the supertype can also operate on elements of the subtype. ...


A foreign function interface for linking with C primitives is provided, including language support for efficient numerical arrays in formats compatible with both C and FORTRAN. Figure of the linking process, where object files and static libraries are assembled into a new library or executable. ... The C Programming Language, Brian Kernighan and Dennis Ritchie, the original edition that served for many years as an informal specification of the language The C programming language (often, just C) is a general-purpose, procedural, imperative computer programming language developed in the early 1970s by Dennis Ritchie for use... In computer programming, an array, also known as a vector or list, is one of the simplest data structures. ... Fortran (also FORTRAN) is a general-purpose[1], procedural[2], imperative programming language that is especially suited to numeric computation and scientific computing. ...


The OCaml distribution contains:

The native code compiler is available for many platforms, including Unix, Microsoft Windows, and Apple Mac OS X. Excellent portability is ensured through native code generation support for major architectures: IA32, AMD64, PowerPC, Sparc, IA64, Alpha, HP/PA, MIPS, and StrongARM. Macro (meaning large or wide) is also applied to macroeconomics, and macroscopic or macro lenses. ... Camlp4 is a software system for writing extensible parsers for programming languages. ... A debugger is a computer program that is used to debug (and sometimes test or optimize) other programs. ... Documentation generator is a programming tool that generates an API Documentation documentation from a set of specially commented source codes, and in some cases, binary files. ... In computer programming, a profiler is a computer program that can track the performance of another program by checking information collected while the code is executed . ... Illustration of an application which may use libvorbisfile. ... Unix or UNIX is a computer operating system originally developed in the 1960s and 1970s by a group of AT&T Bell Labs employees including Ken Thompson, Dennis Ritchie, and Douglas McIlroy. ... As of 2006, Microsoft Windows is the worlds most common operating system for use on personal computers. ... Apple Computer, Inc. ... This article or section does not cite its references or sources. ... ... AMD64 Logo AMD64 (also x86-64 or x64) is a 64-bit microprocessor architecture and corresponding instruction set designed by Advanced Micro Devices. ... To meet Wikipedias quality standards, this article or section may require cleanup. ... Sun UltraSPARC II Microprocessor Sun UltraSPARC T1 (Niagara 8 Core) SPARC (Scalable Processor ARChitecture) is a pure big-endian RISC microprocessor architecture originally designed in 1985 by Sun Microsystems. ... In computing, IA-64 (Instruction Architecture-64) is a 64-bit processor architecture developed in cooperation by Intel and Hewlett-Packard for processors such as Itanium and Itanium 2. ... DEC Alpha AXP 21064 Microprocessor The DEC Alpha, also known as the Alpha AXP, is a 64-bit RISC microprocessor originally developed and fabricated by Digital Equipment Corp. ... HP PA-RISC 7300LC Microprocessor PA-RISC is a microprocessor architecture developed by Hewlett-Packards Systems & VLSI Technology Operation. ... A MIPS R4400 microprocessor made by Toshiba MIPS, for Microprocessor without interlocked pipeline stages, is a RISC microprocessor architecture developed by MIPS Computer Systems Inc. ... DEC StrongARM SA-110 Microprocessor The StrongARM microprocessor is a faster version of the Advanced RISC Machines ARM design. ...


Code examples

Snippets of OCaml code are most easily studied by entering them into the "top-level". This is an interactive OCaml session that prints the inferred types of resulting or defined expressions. The OCaml top-level is started by simply executing the "ocaml" program:

 $ ocaml Objective Caml version 3.09.0 # 

Code can then be entered at the "#" prompt. For example, to calculate 1+2*3:

 # 1 + 2 * 3;; - : int = 7 

OCaml infers the type of the expression to be "int" (a machine-precision integer) and gives the result "7".


Hello World

The following program "hello.ml":

 print_endline "Hello world!";; 

can be compiled to bytecode:

 $ ocamlc hello.ml -o hello 

and executed:

 $ ./hello Hello world! $ 

Birthday paradox

OCaml may be used as a scripting language, as the following script calculates the number of people in a room before the probability of two sharing the same birthday becomes larger than 50% (the so-called birthday paradox). Scripting languages (commonly called scripting programming languages or script languages) are computer programming languages initially used only for simple, repeated actions. ... The birthday paradox states that if there are 23 or more people in a room then there is a chance of more than 50% that at least two of them will have the same birthday. ...


On a unix-like machine, save it to a file, chmod to executable (chmod 0755 birthday.ml) and run it from the command line (./birthday.ml). A Unix-like operating system is one that behaves in a manner similar to a Unix system, while not necessarily conforming to or being certified to any version of the Single UNIX Specification. ... chmod (abbreviated from change mode) is a shell command in Unix-like environments. ... A command line interface or CLI is a method of interacting with a computer by giving it lines of textual commands (that is, a sequence of characters) either from keyboard input or from a script. ...

 #!/usr/bin/ocamlrun ocaml let size = 365. ;; let rec loop p i = let p' = (size -. (float (i-1))) *. p /. size in if p' < 0.5 then Printf.printf "answer = %dn" i else loop p' (i+1) ;; loop 1.0 2 

Factorial function (recursion and purely functional programming)

Many mathematical functions, such as factorial, are most naturally represented in a purely functional form. The following recursive, purely-functional OCaml function implements factorial:

 # let rec fact n = if n=0 then 1 else n * fact(n-1);; val fact : int -> int = <fun> 

The function can be written equivalently using pattern matching: Pattern matching is the act of checking for the presence of the constituents of a given pattern. ...

 # let rec fact = function | 0 -> 1 | n -> n * fact(n-1);; 

This latter form is the mathematical definition of factorial as a recurrence relation.


Note that the compiler inferred the type of this function to be "int -> int", meaning that this function maps ints onto ints. For example, 12! is:

 # fact 12;; - : int = 479001600 

Arbitrary-precision factorial function (libraries)

A variety of libraries are directly accessible from OCaml. For example, OCaml has a built-in library for arbitrary precision arithmetic. As the factorial function grows very rapidly, it quickly overflows machine-precision numbers (typically 32- or 64-bits). Thus, factorial is a suitable candidate for arbitrary-precision arithmetic.


In OCaml, the Num module provides arbitrary-precision arithmetic and can be loaded into a running top-level using:

 # #load "nums.cma";; # open Num;; 

We begin by defining aliases for zero and one in this arithmetic:

 # let zero = num_of_int 0 and one = num_of_int 1;; val zero : Num.num = Int 0 val one : Num.num = Int 1 

The factorial function may then be written using the arbitrary-precision numbers operators =/, */ and -/ :

 # let rec fact n = if n =/ zero then one else n */ fact(n -/ one);; val fact : Num.num -> Num.num = <fun> 

This function can compute much larger factorials, such as 120!:

 # string_of_num (fact (num_of_int 120));; - : string = "6689502913449127057588118054090372586752746333138029810295671352301633 55724496298936687416527198498130815763789321409055253440858940812185989 8481114389650005964960521256960000000000000000000000000000" 

Numerical derivative (higher-order functions)

As a functional programming language, it is easy to create and pass around functions in OCaml programs. This capability has an enormous number of applications. Calculating the numerical derivative of a function is one such application. The following OCaml function "d" computes the numerical derivative of a given function "f" at a given point "x":

 # let d delta f x = (f (x +. delta) -. f (x -. delta)) /. (2. *. delta);; val d : float -> (float -> float) -> float -> float = <fun> 

This function requires a small value "delta". A good choice for delta is the square root of the machine epsilon.


The type of the function "d" indicates that it maps a "float" onto another function with the type "(float -> float) -> float -> float". This allows us to partially apply arguments. This functional style is known as currying. In this case, it is useful to partially apply the first argument "delta" to "d", to obtain a more specialised function:

 # let d = d (sqrt epsilon_float);; val d : (float -> float) -> float -> float = <fun> 

Note that the inferred type indicates that the replacement "d" is expecting a function with the type "float -> float" as its first argument. We can compute a numerical approximation to the derivative of x^3-x-1 at x=3 with:

 # d (fun x -> x *. x *. x -. x -. 1.) 3.;; - : float = 26. 

The correct answer is f'(x) = 3x^2-1 => f'(3) = 27-1 = 26.


The function "d" is called a "higher-order function" because it accepts another function ("f") as an argument.


The concepts of curried and higher-order functions are clearly useful in mathematical programs. In fact, these concepts are equally applicable to most other forms of programming and can be used to factor code much more aggressively, resulting in shorter programs and fewer bugs.


Discrete Wavelet Transform (pattern matching)

The 1D Haar wavelet transform of an integer-power-of-two-length list of numbers can be implemented very succinctly in OCaml and is an excellent example of the use of pattern matching over lists, taking pairs of elements ("h1" and "h2") off the front and storing their sums and differences on the lists "s" and "d", respectively: The Haar wavelet The Haar wavelet is the first known wavelet and was proposed in 1909 by Alfred Haar. ... In numerical analysis and functional analysis, the discrete wavelet transform (DWT) refers to wavelet transforms for which the wavelets are discretely sampled. ... The integers consist of the positive natural numbers (1, 2, 3, …), their negatives (−1, −2, −3, ...) and the number zero. ...

 # let haar l = let rec aux l s d = match l, s, d with [s], [], d -> s :: d | [], s, d -> aux s [] d | h1 :: h2 :: t, s, d -> aux t (h1 + h2 :: s) (h1 - h2 :: d) | _ -> invalid_arg "haar" in aux l [] [];; val haar : int list -> int list = <fun> 

For example:

 # haar [1; 2; 3; 4; -4; -3; -2; -1];; - : int list = [0; 20; 4; 4; -1; -1; -1; -1] 

Pattern matching is an incredibly useful construct that allows complicated transformations to be represented clearly and succinctly. Moreover, the OCaml compiler turns pattern matches into very efficient code, resulting in programs that are not only much shorter but also much faster.


Triangle (graphics)

The following program "simple.ml" renders a rotating triangle in 2D using OpenGL:

 let _ = ignore( Glut.init Sys.argv ); Glut.initDisplayMode ~double_buffer:true (); ignore (Glut.createWindow ~title:"OpenGL Demo"); let render () = GlClear.clear [ `color ]; GlMat.rotate ~angle:(Sys.time() *. 0.01) ~z:1. (); GlDraw.begins `triangles; List.iter GlDraw.vertex2 [-1., -1.; 0., 1.; 1., -1.]; GlDraw.ends (); Glut.swapBuffers () in Glut.displayFunc ~cb:render; Glut.idleFunc ~cb:(Some Glut.postRedisplay); Glut.mainLoop () 

The LablGL bindings to OpenGL are required. The program may then be compiled to bytecode with:

 $ ocamlc -I +lablgl unix.cma lablglut.cma lablgl.cma simple.ml -o simple 

or to nativecode with:

 $ ocamlopt -I +lablgl unix.cmxa lablglut.cmxa lablgl.cmxa simple.ml -o simple 

and run:

 $ ./simple 

Far more sophisticated, high-performance 2D and 3D graphical programs are easily developed in OCaml. Thanks to the use of OpenGL, the resulting programs are not only succinct and efficient but also cross-platform, compiling without any changes on all major platforms.


Applications

OCaml is a general-purpose programming language, but some of its more popular applications include:


Computer science

Automated theorem proving (currently the most important subfield of automated reasoning) is the proving of mathematical theorems by a computer program. ... Coq is a proof assistant which handles mathematical assertions, mechanically checks proofs of these assertions, helps to find formal proofs, and extracts a certified program from the constructive proof of its formal specification. ... HOL Light is a member of the HOL theorem prover family. ... Computer program analysis is the process of automatically analysing the behavior of computer programs. ... A diagram of the operation of a typical multi-language compiler. ... This article lacks information on the importance of the subject matter. ...

Natural science

OCaml is also widely used in physics, chemistry, biology and, more recently, bioinformatics:

Look up Analysis in Wiktionary, the free dictionary An analysis is a critical evaluation, usually made by breaking a subject (either material or intellectual) down into its constituent parts, then describing the parts and their relationship to the whole. ... Visualization can refer to: Visualization as in any technique for creating images, diagrams, or animations to communicate any message. ...

Education

OCaml is used as an introductory language in many universities, including:

OCaml is also used to teach Computer Science (mainly algorithms and complexity theories) in the French Classes Préparatoires (Preparation Courses), for students studying Computer Science (almost replacing Pascal). At the University of Illinois at Urbana-Champaign, OCaml is often used to teach design, parsing, and interpretation of programming languages in the Department of Computer Science's CS421 ("Programming Languages and Compilers") course. The quadrangle at the main ENS building on rue dUlm is known as the Cour aux Ernests – the Ernests being the goldfish in the pond. ... The Institut dInformatique dEntreprise (IIE) is one of the French public Grandes écoles of engineering. ... Category: ... The California Institute of Technology (commonly referred to as Caltech) is a private, coeducational university located in Pasadena, California, in the United States. ... Brown University is an Ivy League university located in Providence, Rhode Island in the United States of America. ... The University of Pisa (Italian Università degli Studi di Pisa) is one of the most renowned Italian universities. ... Munich University of Technology, or Technical University of Munich (TUM) (German: Technische Universität München, TUM), is a major German university, located in Munich (and the towns of Garching and Weihenstephan out of Munich). ... The Third University of Rome (Italian: Università degli Studi Roma Tre) is a university located in Rome, Italy, and founded in 1992. ... The INSA de Rennes is a Grande École dIngénieurs, a School of Engineering, under the authority of the French Ministry of Education and Research and part of the INSAs network. ... Flowcharts are often used to represent algorithms. ... For the Computer Science term, see Computational complexity theory. ... The Classes Préparatoires aux Grandes Écoles (nicknames : Classes prépas or simply prépa) are highly selective French undergraduate studies which prepare students to the Grandes Écoles. ... Pascal is an imperative computer programming language, developed in 1970 by Niklaus Wirth as a language particularly suitable for structured programming. ... The University of Illinois at Urbana-Champaign, also known as UIUC and the U of I (the officially preferred abbreviation), is the flagship campus in the University of Illinois system. ...


Derived languages

MetaOCaml

MetaOCaml [3] is a multi-stage programming extension of Ocaml enabling incremental compiling of new machine code during runtime. Under certain circumstances, significant speedups are possible using multi-stage programming, because more detailed information about the data to process is available at runtime than at the regular compile time, so the incremental compiler can optimize away many cases of condition checking etc.


As an example: if at compile time it is known that a certain power function x -> x^n is needed very frequently, but the value of n is known only at runtime, you can use a two-stage power function in MetaOCaml: In mathematics, exponentiation (frequently known colloquially as raising a number to a power) is a process generalized from repeated (or iterated) multiplication, in much the same way that multiplication is a process generalized from repeated addition. ...

 let rec power n x = if n = 0 then .<1>. else if even n then sqr (power (n/2) x) else .<.~x *. ~(power (n-1) x)>.;; 

As soon as you know n at runtime, you can create a specialized and very fast power function:

 .<fun x -> .~(power 5 .<x>.)>.;; 

The result is:

 fun x_1 -> (x_1 * let y_3 = let y_2 = (x_1 * 1) in (y_2 * y_2) in (y_3 * y_3)) 

The new function is automatically compiled.


Other derived languages

  • Fresh OCaml which facilitate the manipulation of names and binders,
  • JoCaml which integrates constructions for developing concurrent and distributed programs,
  • GCaml adding extensional polymorphism to OCaml, thus allowing overloading and type-safe marshalling,
  • HDCaml, a hardware design and verification language,
  • AtomCaml provides a synchronization primitive for atomic (transactional) execution of code.
  • OCamlDuce extends OCaml with XML types and pattern matching.

JoCaml is an experimental functional programming language derived from OCaml. ...

See also

Standard ML (SML) is a general-purpose, modular, functional programming language with compile-time type checking and type inference. ... F# (pronounced F sharp) is a mixed functional and object oriented programming language for the Microsoft . ... The Microsoft . ... The Extensible ML (EML) is an ML-like programming language that adds support for object-oriented idioms in a functional setting. ... OHaskell is an object-oriented, concurrent extension of the functional programming language Haskell. ... Haskell is a standardized functional programming language with non-strict semantics, named after the logician Haskell Curry. ...

External links

OpenGL official logo OpenGL (Open Graphics Library) is a standard specification defining a cross-language cross-platform API for writing applications that produce 3D computer graphics (and 2D computer graphics as well). ... Initially created for the raster graphics editor, the GNU Image Manipulation Program, the GIMP Toolkit—abbreviated, and almost exclusively known, as GTK+—is one of the two most popular widget toolkits for the X Window System for creating graphical user interfaces. ...

Books

Programs written in OCaml

Commonly used

MLdonkey is an open source multi-network peer-to-peer application. ... Unison is a file synchronization program for Unix (including Linux, Mac OS X, and Solaris) and Windows used for synchronizing files and directories on multiple computers. ...

Education

  • GeoProof - a dynamic geometry software
  • MinCaml - a small tutorial compiler written in OCaml.

Engineering

  • Confluence is a language for synchronous reactive system design. A Confluence program can generate digital logic for an FPGA or ASIC platform, or C code for hard real-time software.

Fun

The ICFP Contest is an annual international programming competition associated with the International Conference on Functional Programming. ...

Science

  • Coq is a proof assistant.
  • Orpie - a fullscreen RPN calculator for the console. Its operation is similar to that of modern HP calculators.
Other programming languages (more/edit)

Industrial: ABAP | Ada | Assembly | C | C# | C++ | COBOL | ColdFusion | Common Lisp | Delphi | Eiffel | Forth | Fortran | Java | JavaScript | Objective-C | Pascal | Perl | PHP | Python | RPG | Smalltalk | SQL | Tcl | Visual Basic | VB.NET | Visual FoxPro There are a lot of kinds of listing. ... ABAP (Advanced Business Application Programming) is a high level programming language created by the German software company SAP. It is currently positioned as the language for programming SAPs Web Application Server, part of its NetWeaver platform for building business applications. ... Ada is a structured, statically typed imperative computer programming language designed by a team led by Jean Ichbiah of CII Honeywell Bull during 1977–1983. ... It has been suggested that Assembler be merged into this article or section. ... The C Programming Language, Brian Kernighan and Dennis Ritchie, the original edition that served for many years as an informal specification of the language The C programming language (often, just C) is a general-purpose, procedural, imperative computer programming language developed in the early 1970s by Dennis Ritchie for use... The title given to this article is incorrect due to technical limitations. ... For a WikiBook on programming with C++, see Wikibooks: C++ Programming. ... COBOL is a third-generation programming language. ... ColdFusion is the original and most common implementation of a tag and ECMAScript-based programming language -- ColdFusion Markup Language (CFML) and CFSCRIPT, respectively -- which is typically used in web application development for the generation of dynamic web pages. ... Common Lisp, commonly abbreviated CL, is a dialect of the Lisp programming language, standardised by ANSI X3. ... Delphi is the primary programming language of Borland Delphi. ... Eiffel is an object-oriented programming language which emphasizes the production of robust software. ... Forth is a programming language and programming environment, initially developed by Charles H. Moore at the US National Radio Astronomy Observatory in the early 1970s. ... Fortran (also FORTRAN) is a general-purpose[1], procedural[2], imperative programming language that is especially suited to numeric computation and scientific computing. ... Java is an object-oriented programming language developed by James Gosling and colleagues at Sun Microsystems in the early 1990s. ... JavaScript is the name of Netscape Communications Corporations implementation of ECMAScript, a scripting programming language based on the concept of prototypes. ... Objective-C, often referred to as ObjC or more seldomly as Objective C or Obj-C, is an object oriented programming language implemented as an extension to C. It is used primarily on Mac OS X and GNUstep, two environments based on the OpenStep standard, and is the primary language... Pascal is an imperative computer programming language, developed in 1970 by Niklaus Wirth as a language particularly suitable for structured programming. ... Perl, also Practical Extraction and Report Language (a backronym, see below) is a dynamic procedural programming language designed by Larry Wall and first released in 1987. ... PHP is an open-source, reflective programming language used mainly for producing dynamic web content and server-side applications. ... Python is an interpreted programming language created by Guido van Rossum in 1990. ... RPG is a native programming language for IBMs iSeries servers - the latest generation of midrange servers which included System/38, System/36, AS/400, iSeries and System i5 systems. ... Smalltalk is an object-oriented, dynamically typed, reflective, programming language designed at Xerox PARC by Alan Kay, Dan Ingalls, Ted Kaehler, Adele Goldberg, and others during the 1970s, influenced by Sketchpad and Simula. ... SQL (commonly expanded to Structured Query Language — see History for the terms derivation) is the most popular computer language used to create, modify, retrieve and manipulate data from relational database management systems. ... // Tcl (originally from Tool Command Language, but nonetheless conventionally rendered as Tcl rather than TCL; and pronounced like tickle) is a scripting language created by John Ousterhout. ... This article is about the Visual Basic language shipping with Microsoft Visual Studio 6. ... // Headline text Visual Basic . ... Visual FoxPro is a data-centric object-oriented and procedural programming language produced by Microsoft. ...

Academic: APL / J | AspectJ | Haskell | Logo | Mathematica | MATLAB | ML | OCaml | Prolog | SAS | Scheme APL (for A Programming Language) is an array programming language based on a notation invented in 1957 by Kenneth E. Iverson while at Harvard University. ... The J programming language, developed in the early 1990s by Ken Iverson and Roger Hui, is a synthesis of APL (also by Iverson) and the FP and FL functional programming languages created by John Backus (of FORTRAN, ALGOL, and BNF fame). ... AspectJ is an aspect-oriented extension to the Java programming language created at Xerox PARC. An AspectJ compiler weaves aspects into Java bytecode to implement crosscutting concerns. ... Haskell is a standardized pure functional programming language with non-strict semantics, named after the logician Haskell Curry. ... The Logo programming language is an imperative programming language. ... This article is about computer software. ... MATLAB is a numerical computing environment and programming language. ... ML is a general-purpose functional programming language developed by Robin Milner and others in the late 1970s at the University of Edinburgh, whose syntax is inspired by ISWIM. Historically, ML stands for metalanguage as it was conceived to develop proof tactics in the LCF theorem prover (the language of... PROLOG is a logic programming language. ... The SAS System, originally Statistical Analysis System, is an integrated system of software products provided by the SAS Institute that enables the programmer to perform: data entry, retrieval, management, and mining report writing and graphics statistical and mathematical analysis business planning, forecasting, and decision support operations research and project management... Scheme is a functional programming language and a dialect of Lisp. ...

Other: ALGOL | BASIC | Limbo | Modula-2/Modula-3 | MUMPS | PL/I | Simula ALGOL (short for ALGOrithmic Language) is a family of imperative computer programming languages originally developed in the mid 1950s which became the de facto standard way to report algorithms in print for almost the next 30 years. ... Basic may be: Look up basic in Wiktionary, the free dictionary. ... Limbo is a programming language for writing distributed systems and is the language used to write applications for the Inferno operating system. ... Modula-2 is a computer programming language invented by Niklaus Wirth at ETH around 1978, as a successor to Modula, another language by him. ... Modula-3 is a programming language conceived as a successor to an upgraded version of Modula-2. ... PL/I (Programming Language One, pronounced pee el one) is an imperative computer programming language designed for scientific, engineering, and business applications. ... Simula is a programming language developed in the 1960s at the Norwegian Computing Centre in Oslo, by Ole-Johan Dahl and Kristen Nygaard. ...


  Results from FactBites:
 
SWIG and Ocaml (3522 words)
Ocaml is a relatively recent addition to the ML family, and is a recent addition to SWIG.
Ocaml has widely acknowledged benefits for engineers, mostly derived from a sophisticated type system, compile-time checking which eliminates several classes of common programming errors, and good native performance.
Because the Ocaml language module treats C++ method calls as calls to a certain function, all you need to do is to define the function that will handle the method calls in terms of the public methods of the object, and any other relevant information.
Objective CAML Tutorial (304 words)
This website is a set of practical, detailed tutorials for people who want to learn Objective CAML (often known as just "OCaml").
OCaml is a fast, concise and powerful language for application development - but I assume you already knew that, and I also assume you've managed to install it.
An introduction to OCaml, from the Linux Gazette.
  More results at FactBites »


 

COMMENTARY     


Share your thoughts, questions and commentary here
Your name
Your comments
Please enter the 5-letter protection code

Want to know more?
Search encyclopedia, statistics and forums:

 


Lesson Plans | Student Area | Student FAQ | Reviews | Press Releases |  Feeds | Contact
The Wikipedia article included on this page is licensed under the GFDL.
Images may be subject to relevant owners' copyright.
All other elements are (c) copyright NationMaster.com 2003-5. All Rights Reserved.
Usage implies agreement with terms.