OCaml

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
Ocaml
llenguatge de programació
OCaml Logo.svg
Autor INRIA
Data d’origen 1996
Última versió 4.12.0 (24 de febrer de 2021)
Ús Genèric (alta eficiència)
Paradigmes Multi-paradigma, imperatiu , funcional , orientat a objectes
Escrivint Estàtica, forta, inferència de tipus
Extensions comunes .ml
Influenciat per ML estàndard
Implementació de referència
Sistema operatiu Multiplataforma
Llicència Q Llicència pública i GNU LGPL v2.1
Lloc web ocaml.org/

OCaml [1] és un llenguatge de programació avançat que pertany a la família ML de llenguatges de programació. Es desenvolupa i distribueix programari com a codi obert d’ INRIA . O'Caml es va crear el 1996 com a successor del CAML . Entre els seus autors hi ha Xavier Leroy, Jerome Vouillon i Damien Doligez.

Les inicials CAML van derivar originalment del llenguatge de màquina abstracta categòrica , mentre que la inicial O es va afegir per ressaltar l'extensió als objectes del nou llenguatge.

O'Caml comparteix les característiques dels llenguatges imperatius i funcionals , però conté elements de programació orientada a objectes i algunes diferències sintàctiques.

Característiques

OCaml es diferencia dels altres idiomes de la família ML pel que fa al rendiment. El sistema d' execució s'ha dissenyat per ser ràpid, eficient i amb pocs requisits de memòria. O'Caml proporciona un codi de bytes compilador , línia d'intèrpret d'ordres, i optimitzat codi natiu compilador. El codi generat pel compilador natiu sol ser comparable a C / C ++ en eficiència algorítmica . [2]

Les característiques molt potents del llenguatge són un sistema de tipus estàtic, la deducció del tipus de variables, el polimorfisme paramètric, la recursió de la cua , la concordança de patrons , els tancaments lèxics de primera classe , l’ús de funcors (mòduls paramètrics) , la gestió d’excepcions i la recollida d’escombraries . També és molt concisa en sintaxi. El sistema orientat a objectes proporciona herència múltiple , construcció directa d’objectes (especificant mètodes exclusius d’aquest objecte) o de classes i subtipus estructurals (els objectes són de tipus compatible si els seus mètodes són compatibles, independentment de què es derivin. ).

Les funcions OCaml s’equilibren entre l’expressivitat i les noves funcions per una banda i la facilitat d’interfície amb sistemes i biblioteques existents per l’altra. OCaml conté suport per a funcions comunes a altres idiomes, com ara printf i per a interfícies externes que permeten enllaçar fàcilment amb primitives C, inclòs el suport per al maneig eficient de matrius de números en un format compatible tant amb C / C ++ com amb Fortran .

El programari subministrat amb OCaml inclou un potent preprocessador (que permet extensions sintàctiques), un depurador (que permet l’anàlisi inversa d’errors), un generador de documentació, un perfilador i moltes altres biblioteques d’ ús habitual. El compilador està disponible per a un gran nombre de plataformes, incloses Unix , Windows i Macintosh , amb la possibilitat de generar codi nadiu per a totes les arquitectures principals ( IA-32 , PowerPC , AMD64 , SPARC , IA-64 , Alpha , HP-PA , MIPS , StrongARM ), proporcionant així una bona portabilitat .

Ús

OCaml s'utilitza en un gran nombre d'aplicacions, inclosos sistemes per demostrar teoremes i analitzar programes. També s’utilitza en aplicacions com MLDonkey (un popular programa P2P que admet nombrosos protocols) i Unison File Synchronizer. [3]

Els programes escrits en OCaml han guanyat repetidament el concurs de programació ICFP .

Exemples de codi

Hola món!

L'exemple següent imprimeix el text " Hola món ".

 let main () =
   print_endline "Hello World" ;;

el codi es pot compilar en un codi bytecode executable:

 $ ocamlc hello.ml -o hola

o compilat en un codi optimitzat per a l'arquitectura en ús:

 $ ocamlopt hello.ml -o hola

tot es pot fer mitjançant:

 $ ./hola

Suma d'una llista d'enters

Les llistes són un dels tipus bàsics a OCaml; el codi següent explica com afegir recursivament una llista d'enters. La funció suma desplaça seqüencialment tots els elements de la llista donats a l'entrada amb el paràmetre lst i retorna la suma com a enter.

 deixem rec sum = funció
  | [] -> 0
  | x :: xs -> x + suma xs ;;
# suma [1; 2; 3; 4; 5] ;;
-: int = 15

Factorial

 deixem rec fact = funció
   | 0 -> 1
   | n -> n * fet ( n - 1 ) ;;

99 ampolles de cervesa

 obre Printf 
 
deixar ampolles = funcionar
  | 0 -> "no hi ha ampolla de cervesa"
  | 1 -> "hi ha una ampolla de cervesa"
  | n -> sprintf "hi ha% d ampolles de cervesa" n
 
deixem cap a n =
  deixar = ampolles actual n i propers = ampolles (n - 1) en
  deixeu firstline = sprintf "% s a la paret,% s. \ n " corrent actual a
  deixi de segona línia = "Obtenir una, passar-ho al voltant, \ n" en
  anem thirdline = sprintf "i% s a la paret! \ n" a la banda de
  Primalinea secondaLinea ^ ^ terzaLinea  
 
deixa cantar Cançó () =
  per n = 99 downto 1 do
    línia_impressió ( vers n )
  fet ;; 
 
Cantar cançó ()

Nota

  1. ^ Anteriorment es deia Objective Caml i també es coneixia com O'Caml , però rebatejat el 2011 (vegeu https://ocaml.org/learn/history.html/#ObjectiveCaml ).
  2. ^ Rendiment comparatiu de llenguatges de programació, inclòs OCaml, en diversos exemples: The Computer Language Shootout Benchmarks Arxivat el 31 d'agost de 2012 a Internet Archive ..
  3. ^ Pàgina Unison File Synchronizer , a cis.upenn.edu .

Articles relacionats

Altres projectes

Enllaços externs

Control de l'autoritat VIAF (EN) 8149106282068492326 · LCCN (EN) sh2007000473 · GND (DE) 7578649-7
Informàtica Portal de TI : accediu a les entrades de Viquipèdia relacionades amb TI