OCaml
Ocaml limbaj de programare | |
---|---|
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.
să 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ă
- ^ 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 ).
- ^ 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 ..
- ^ Pagina Unison File Synchronizer , la cis.upenn.edu .
Elemente conexe
Alte proiecte
- Wikimedia Commons conține imagini sau alte fișiere pe Objective Caml
linkuri externe
- ( RO ) Pagina oficială a familiei de limbi Caml , la caml.inria.fr .
- ( FR ) Pagina oficială a familiei de limbi Caml , pe caml.inria.fr .
- ( EN , FR ) Încercați-l în browser , la try.ocamlpro.com .
- ( RO ) Comparația performanței între diferite limbi , pe shootout.alioth.debian.org . Adus la 5 februarie 2005 (arhivat din original la 27 iunie 2009) .
- (EN) Unison File Synchronizer pe cis.upenn.edu.
- ( RO ) Dezvoltarea aplicațiilor cu Objective CAML , pe caml.inria.fr .
- ( EN ) Interfață GTK + , la wwwfun.kurims.kyoto-u.ac.jp .
Controlul autorității | VIAF (EN) 8149106282068492326 · LCCN (EN) sh2007000473 · GND (DE) 7578649-7 |
---|