[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] [Lungo] Linguaggi di programmazione "moderni"



Mi rendete molto felice, qualcuno con cui parlare in una mail di
linguaggi di programmazione. Si, ci ho già provato su
it.scienze.informatica, deserto pure lì :PP 

Allora, si parlava di prestazioni... ehm... va beh ;)

Ocaml è anche compilato, e il compilatore è particolarmente efficiente.
C'è stato un famoso concorso in cui si chiedeva di scrivere un raytracer
in ogni linguaggio di programmazione per valutarne le prestazioni, e i
raytracer in ocaml è arrivato 2°, fra il C e il C++ (non penso il
fortran fosse in gara, sicuramente è un linguaggio molto efficiente).
Naturalmente non è un benchmark, perchè molto dipende dagli algoritmi
usati, ma dà una buona idea del fatto che caml sia competitivo.

Maggiori dettagli su caml e ocaml a

http://caml.inria.fr

Maggiori dettagli sul concorso di cui parlavo e i risultati, nonchè i
sorgenti dei vari raytracer a:

http://www.bagley.org/~doug/shootout/

Ocaml è quindi un linguaggio molto efficiente ed espressivo. In più
consente di chiamare funzioni esterne (ma attenzione: così si perde il
vantaggio del controllo stretto dei tipi!) ed ha già un binding per
lapack ed altre librerie di calcolo scientifico sia C che fortran.
Quindi può essere considerato "IL" linguaggio funzionale per il calcolo
scientifico. 

A riprova dell'interesse verso questo linguaggio per uso "calcoli" vi è
il progetto psi-lab

http://psilab.sourceforge.net/

che è una integrazione di un interprete Ocaml con una serie di librerie
precompilate, allo scopo di farne un ambiente simil-scilab ma con il
linguaggio Ocaml come base. Infatti uno dei grandi vantaggi del
compilatore ocaml è quello di poter scrivere un interprete che utilizza
librerie compilate (ma in questo caso sono compilate in un bytecode,
quindi molto meno efficienti della compilazione pura, ma molto più
efficienti dell'interpretazione), quindi unendo l'immediatezza di un
interprete per fare le prove all'efficienza di una compilazione.

Fin qui sembrerebbe che è un linguaggio da sogno, ma è un linguaggio
eager, quindi ha

- astrazione funzionale (funzioni come valori, per esempio per esprimere
la funzione "sommatoria" rispetto ad una generica funzione)

- inferenza di tipi (pochissime dichiarazioni di tipo, solo dove è
ambiguo)

ma non ha la possibilità di avere strutture dati infinite.

I linguaggi lazy (contrario di eager, si), come haskell, sono molto più
espressivi di quelli eager, e consoentono di esprimere strutture dati
infinite, ma sono molto meno efficienti, e anche le soluzioni
compilative non raggiungono l'efficienza di linguaggi "classici" come il
C.

Infine, consiglio a chi fosse interessato di capire prima a fondo Ocaml,
che è un linguaggio quasi didattico per la sua semplicità, e poi se mai
di avvicinarsi ai linguaggi lazy, perchè a causa della lazyness ci sono
complicazioni spaventose (come l'uso delle monadi per una semplice
stampa) che potrebbero sviare dalla comprensione della programmazione
funzionale, già di per se "diversa" da quella a cui si è abituati.

Se veramente c'è qualche interessato, sono da sempre disposto a
cominciare una piccola e-zine sull'argomento, magari un mini-corso
introduttivo, per cominciare un po' a diffondere questa idea di
programmazione che ormai ha passato i 20 anni canonici nelle università
e dovrebbe cominciare a "conoscere il vero mondo". Se volete ci
proviamo, e se non vi piace si interrompe.

Vincenzo



Reply to: