software.wikisort.org - Linguaggio

Search / Calendar

OCaml[1] è un avanzato linguaggio di programmazione appartenente alla famiglia di linguaggi di programmazione ML. È sviluppato e distribuito come software open source dalla INRIA. O'Caml è stato creato nel 1996 come successore del CAML. Tra i suoi autori si ricordano Xavier Leroy, Jerome Vouillon e Damien Doligez.

Ocaml
linguaggio di programmazione
AutoreINRIA
Data di origine1996
Ultima versione4.14.0 (28 marzo 2022)
UtilizzoGenerico (alta efficienza)
ParadigmiMulti-Paradigma, Imperativa, Funzionale, Object-Oriented
TipizzazioneStatica, Forte, Inferenza di tipo
Estensioni comuni.ml
Influenzato daStandard ML
Implementazione di riferimento
Sistema operativoMultipiattaforma
LicenzaQ Public License e GNU LGPL v2.1
Sito webocaml.org/

La sigla CAML originariamente derivava da Categorical Abstract Machine Language, mentre la O iniziale è stata aggiunta per sottolineare l'estensione ad oggetti del nuovo linguaggio.

O'Caml condivide le caratteristiche dei linguaggi funzionali e di quelli imperativi, ma contiene elementi di programmazione orientata agli oggetti e alcune differenze sintattiche.


Caratteristiche


OCaml si distingue dagli altri linguaggi della famiglia ML per le prestazioni. Il sistema di runtime è stato progettato per essere veloce, efficiente ed avere poche richieste di memoria. O'Caml fornisce un compilatore in bytecode, un interprete a riga di comando e un compilatore di codice nativo ottimizzato. Il codice generato dal compilatore nativo è tipicamente paragonabile al C/C++ nell'efficienza algoritmica.[2]

Caratteristiche molto potenti del linguaggio sono un sistema di tipi statico, la deduzione del tipo delle variabili, il polimorfismo parametrico, la tail recursion, il pattern matching, le first class lexical closures, l'uso dei functors (parametric modules), la gestione delle eccezioni, e un garbage collection incrementale. È anche molto conciso nella sintassi. Il sistema ad oggetti fornisce ereditarietà multipla, costruzione diretta di oggetti (specificando i metodi che sono unici per quell'oggetto) o da classi, e structural subtyping (oggetti sono di tipo compatibile se i loro metodi sono compatibili, a prescindere da cosa siano derivati).

Le caratteristiche di OCaml sono bilanciate tra l'espressività e le nuove caratteristiche da una parte e la facilità di interfacciamento con sistemi e librerie preesistenti dall'altra. OCaml contiene il supporto per funzioni comuni ad altri linguaggi, come printf e per interfacce esterne che permettono un facile linking con primitive C, incluso il supporto per la gestione efficiente di array di numeri in un formato compatibile sia con il C/C++ che con il Fortran.

Il software fornito a corredo di OCaml prevede un potente preprocessore (che permette estensioni sintattiche), un debugger (che permette l'analisi a ritroso degli errori), un generatore di documentazione, un profiler e altre numerose librerie di uso comune. Il compilatore è disponibile per un numero di piattaforme elevato, incluso Unix, Windows e Macintosh, con la possibilità di generare codice nativo per tutte le principali architetture (IA-32, PowerPC, AMD64, SPARC, IA-64, Alpha, HP-PA, MIPS, StrongARM), fornendo così una buona portabilità.


Uso


OCaml è usato in un gran numero di applicazioni, che includono sistemi per provare teoremi e per analizzare programmi. È usato anche in applicazioni come MLDonkey (un popolare programma P2P che supporta numerosi protocolli) e Unison File Synchronizer.[3]

Programmi scritti in OCaml hanno vinto ripetutamente il ICFP programming contest.


Esempi di codice



Hello, world!


Il seguente esempio stampa il testo "Hello world".

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

il codice può essere compilato in un codice di tipo bytecode eseguibile:

$ ocamlc hello.ml -o hello

o compilato in un codice ottimizzato per l'architettura in uso:

$ ocamlopt hello.ml -o hello

il tutto può essere eseguito tramite:

$ ./hello

Somma di una lista di interi


Le liste sono uno dei tipi fondamentali in OCaml, il seguente codice spiega come eseguire la somma in maniera ricorsiva di una lista di interi. La funzione sum scorre sequenzialmente tutti gli elementi della lista data in input col parametro lst, ne restituisce la somma sotto forma di intero.

let rec sum = function
  | [] -> 0
  | x::xs -> x + sum xs;;
# sum [1;2;3;4;5];;
- : int = 15

Fattoriale


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

99 bottiglie di birra


open Printf 
 
let bottiglie = function
  | 0 -> "non c'e' nessuna bottiglia di birra"
  | 1 -> "c'e' una bottiglia di birra"
  | n -> sprintf "ci sono %d bottiglie di birra" n
 
let verso n =
  let corrente = bottiglie n and prossimo = bottiglie (n - 1) in
  let primaLinea = sprintf "%s sulla parete, %s.\n" corrente corrente in
  let secondaLinea = "Prendine una, passala in giro,\n" in
  let terzaLinea = sprintf "e %s sulla parete!\n" prossimo in
  primaLinea ^ secondaLinea ^ terzaLinea  
 
let cantaCanzone () =
  for n = 99 downto 1 do
    print_endline (verso n)
  done;; 
 
cantaCanzone()

Note


  1. Un tempo chiamato Objective Caml e conosciuto anche come O'Caml, ma rinominato nel 2011 (cfr. https://ocaml.org/learn/history.html/#ObjectiveCaml Archiviato il 5 aprile 2019 in Internet Archive.).
  2. Prestazioni comparate di linguaggi di programmazione, tra cui OCaml, su diversi esempi: The Computer Language Shootout Benchmarks Archiviato il 31 agosto 2012 in Internet Archive..
  3. Pagina di Unison File Synchronizer, su cis.upenn.edu.

Voci correlate



Altri progetti



Collegamenti esterni


Controllo di autoritàVIAF (EN) 8149106282068492326 · LCCN (EN) sh2007000473 · GND (DE) 7578649-7
Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

На других языках


[fr] OCaml

OCaml, anciennement connu sous le nom d'Objective Caml, est l'implémentation la plus avancée du langage de programmation Caml, créé par Xavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy et leurs collaborateurs en 1996. Ce langage, de la famille des langages ML, est un projet open source dirigé et maintenu essentiellement par l'Inria.
- [it] OCaml

[ru] OCaml

OCaml (Objective Caml) — объектно-ориентированный язык функционального программирования общего назначения. Был разработан с учётом безопасности исполнения и надёжности программ. Поддерживает функциональную, императивную и объектно-ориентированную парадигмы программирования. Самый распространённый в практической работе диалект языка ML.



Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.org внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2025
WikiSort.org - проект по пересортировке и дополнению контента Википедии