OCaml

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Ocaml
limbaj de programare
OCaml Logo.svg
Autor INRIA
Data de origine 1996
Ultima versiune 4.12.0 (24 februarie 2021)
Utilizare Generic (eficiență ridicată)
Paradigme Multi-paradigmă, imperativă , funcțională , orientată spre obiecte
Tastare Static, puternic, inferență de tip
Extensii comune .ml
Influențată de ML standard
Implementare referință
Sistem de operare Multiplatform
Licență Licența publică Q și GNU LGPL v2.1
Site-ul web ocaml.org/

OCaml [1] este un limbaj de programare avansat care aparține familiei ML de limbaje de programare. Este dezvoltat și distribuit software ca open source de la INRIA . O'Caml a fost creat în 1996 ca succesor al CAML . Printre autorii săi se numără Xavier Leroy, Jerome Vouillon și Damien Doligez.

Inițialele CAML au derivat inițial din Limbajul mașinii abstracte categorice , în timp ce inițialul O a fost adăugat pentru a sublinia extinderea la obiectele noului limbaj.

O'Caml împărtășește caracteristicile limbajelor funcționale și imperative , dar conține elemente de programare orientată obiect și câteva diferențe sintactice.

Caracteristici

OCaml diferă de celelalte limbi ale familiei ML pentru performanță. Sistemul de rulare a fost conceput pentru a fi rapid, eficient și pentru a avea puține cerințe de memorie. O'Caml oferă un compilator de bytecode , un interpret de linie de comandă și un compilator de cod nativ optimizat. Codul generat de compilatorul nativ este de obicei comparabil cu C / C ++ în ceea ce privește eficiența algoritmică . [2]

Caracteristicile foarte puternice ale limbajului sunt un sistem de tip static, deducerea tipului de variabile, polimorfismul parametric, recursivitatea cozii , potrivirea modelelor , închiderile lexicale de primă clasă , utilizarea functorilor (modulele parametrice) , gestionarea excepțiilor și incrementale colectarea gunoiului . Este, de asemenea, foarte concis în sintaxă. Sistemul orientat pe obiecte oferă moștenire multiplă , construcția directă a obiectelor (specificând metode care sunt unice pentru acel obiect) sau din clase și subtipare structurală (obiectele sunt de tip compatibil dacă metodele lor sunt compatibile, indiferent de ce sunt derivate. ).

Funcțiile OCaml sunt echilibrate între expresivitate și caracteristici noi pe de o parte și ușurința interfeței cu sistemele și bibliotecile existente pe de altă parte. OCaml conține suport pentru funcții comune altor limbi, cum ar fi printf și pentru interfețe externe care permit conectarea ușoară cu primitive C, inclusiv suport pentru gestionarea eficientă a matricilor de numere într-un format compatibil atât cu C / C ++, cât și cu Fortran .

Software-ul furnizat cu OCaml include un preprocesor puternic (care permite extensii sintactice), un depanator (care permite analiza înapoi a erorilor), un generator de documentație, un profilator și multe alte biblioteci utilizate în mod obișnuit. Compilatorul este disponibil pentru un număr mare de platforme, inclusiv Unix , Windows și Macintosh , cu capacitatea de a genera cod nativ pentru toate arhitecturile majore ( IA-32 , PowerPC , AMD64 , SPARC , IA-64 , Alpha , HP-PA , MIPS , StrongARM ), asigurând astfel o bună portabilitate .

Utilizare

OCaml este utilizat într-un număr mare de aplicații, inclusiv sisteme pentru demonstrarea teoremelor și analiza programelor. Este, de asemenea, utilizat în aplicații precum MLDonkey (un popular program P2P care acceptă numeroase protocoale) și Unison File Synchronizer. [3]

Programele scrise în OCaml au câștigat în mod repetat concursul de programare ICFP .

Exemple de cod

Salut Lume!

Următorul exemplu imprimă textul „ Hello world ”.

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

codul poate fi compilat într-un cod bytecode executabil:

 $ ocamlc hello.ml -o hello

sau compilate într-un cod optimizat pentru arhitectura utilizată:

 $ ocamlopt hello.ml -o hello

totul se poate face prin:

 $ ./bună

Suma unei liste de numere întregi

Listele sunt unul dintre tipurile de bază în OCaml, următorul cod explică cum să adăugați recursiv o listă de numere întregi. Funcția sumă derulează secvențial toate elementele listei date în intrare cu parametrul lst și returnează suma ca număr întreg.

  rec sum = funcție
  | [] -> 0
  | x :: xs -> x + suma xs ;;
# sum [1; 2; 3; 4; 5] ;;
-: int = 15

Factorială

 lasă rec fact = funcție
   | 0 -> 1
   | n -> n * fapt ( n - 1 ) ;;

99 sticle de bere

 deschideți Printf 
 
lasa sticlele = function
  | 0 -> "nu există sticlă de bere"
  | 1 -> "există o sticlă de bere"
  | n -> sprintf "există% d sticle de bere" n
 
lasa spre n =
  lasa sticle = curent n și sticle next = (n - 1) , în
  lasă firstline = sprintf "% s pe perete,% s. \ n " curent curent în
  let secondLine = "Ia unul, treci-l, \ n " în
  lasa thirdline = sprintf "și% s pe perete! \ n" în următorul
  Primalinea secondaLinea ^ ^ terzaLinea  
 
lasă să cânte Song () =
  pentru n = 99 până la 1 do
    print_endline ( versul n )
  gata ;; 
 
Sing Song ()

Notă

  1. ^ Denumit anterior Objective Caml și cunoscut și sub numele de O'Caml , dar redenumit în 2011 (a se vedea https://ocaml.org/learn/history.html/#ObjectiveCaml ).
  2. ^ Performanța comparativă a limbajelor de programare, inclusiv OCaml, pe mai multe exemple: Benchmark-urile de calcul al limbajului computerelor, depuse la 31 august 2012 în Internet Archive ..
  3. ^ Pagina Unison File Synchronizer , la cis.upenn.edu .

Elemente conexe

Alte proiecte

linkuri externe

Controlul autorității VIAF (EN) 8149106282068492326 · LCCN (EN) sh2007000473 · GND (DE) 7578649-7
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT