Newsgroup: it.scienza.fisica
Titolo: Linguaggi di programmazione per fisica

Volevo sapere quali linguaggi sono maggiormente adatti/piu' usati dai fisici
per lo sviluppo di software (simulazione, super-calcolo, ecc.)
Io sapevo che il FORTRAN andava alla grande...ho dato un'occhiatina a questo
linguaggio, e devo dire che non mi piace per niente...sembra mal
strutturato, ecc. :(
Si usa davvero tanto il FORTRAN?? E se si', perche'???
Invece, per quanto riguarda il C, il C++ e Java, che si dice? Non sono
adatti? Per quale motivo? O vanno invece benone e stanno prendendo piede,
attualmente?
Grazie :)
Saluti
CodeNinja

 attualmente?
C e C++ sono adattissimi (per tornare alla normale.. ora c'e' il
corso "Fondamenti di programmazione in C (Profeti) "), altro che. 
Java ha qualche problema di lentezza, ma
con esso vai alla grande nella parte, essenziale, dell'interfaccia
grafica
e della eventuale distribuzione del SW.
Posso darti un consiglio ?
Se devi scrivere un programma di simulazione, usa il C o il C++ per 
il codice che fa i calcolacci e Java per la GUI (come forse sai e'
possibile
da Java richiamare codice non portabile scritto in C, C++ etc..)
ciao
a.

 Invece, per quanto riguarda il C, il C++ e Java, che si dice? 
Per C e C++, la loro diffusione, le prestazioni dei compilatori e le
capacita' intrinseche del linguaggio sono confrontabili con quelle del
Fortran e i motivi per optare per uno o l' altro dipendono da
considerazioni che variano da settore a settore in funzione del tipo di
applicazioni (numeriche/non-numeriche, grafiche, interfacciamento con
librerie e con primitive del S.O. etc...).
Per Java il discorso e' un po' diverso. Si tratta di un linguaggio
ancora giovane (con ampliamenti notevoli da una versione all' altra).
Per alcuni utilizzi e' gia' abbondantemente presente nelle applicazioni
in Fisica. Per applicazioni  numeriche intensive lascia ancora a
desiderare sotto vari aspetti. Soprattutto, per applicazioni di
super-calcolo "time consuming", Java viene penalizzato dal fatto di
essere semi-interpretato e dall' estrema variabilita' delle performances
delle implementazioni sulle varie piattaforme della Java Virtual Machine
(JVM), ovvero l' interprete Java del bytecode.
Ciao
Giorgio Pastore

Il FORTRAN è il più usato in campo scientifico solo
per motivi storici.
Ormai è totalmente standardizzato ed esiste una vastissima libreria di
sorgenti per, quasi, ogni tipo di problema.
Quindi a molti secca  dover riscrivere tutto da capo o convertire tutto in
una altro
linguaggio con tutto il lavoro di debugging che ne segue.
L'altro linguaggio usato è il C, che è associato ad ogni sistema Unix.
Unix inizialmente fu concesso gratuitamente alle università dall' AT&T
(laboratori Bell)
e ciò ovviamente ne favorì la diffusione in campo accademico.
Con l'arrivo degli unix totalmente gratuiti (Linux e FreeBSD)
Unix è rimasto il sistema di principe del mondo accademico.
Il C  è diventato quindi  l'alternativa al  FORTRAN,
con ampia disponibilita di sorgenti e documentazione.
Sintassi e strutturazione sono peggiori, ma consente
un maggiore libertà nella scelta del metodo da usare
per codificare un algoritmo.
Con la "moda"(?) della programmazione ad oggetti,
dal  C è nato il C++ (è nato in AT&T per simulare il comportamento
di alcuni tipi di centralino telefonico).
La situazione si complica quando si arriva al super-calcolo
dove le caratteristiche della macchina vanno sfruttate affondo.
Al C ed al FORTAN si aggiungono linguaggi, quali l'OCCAM
che sono nati per i sistemi di calcolo paralleli.
Secondo me, se operi in ambiente accademico,
è meglio che tu impari as usare il C.
Se poi devi proprio imparare un linguaggio ad oggetti ti
consiglio il Java che è simile al C++ come sintassi
ma un poco meno ostico.
Inoltre il Java è nato per essere portabile da un sistema
ad un ' altro ed, in internet, esiste un ampia disponilità di sorgenti e
documentazione gratuita.
Fuori dall' ambiente accademico può convenire usare
il BASIC che è semplice da imparare e va bene
per ogni uso applicativo.
Occore però procurasi un compilatore che consenta
buone ottimizzazioni del tempo di calcolo.

intensive lascia ancora a desiderare sotto vari aspetti.
Giustissimo, ma io propugno sempre la tesi Java (per la gui) + C
(pei calcoli)
ciao
a.

 attualmente?
Il C e' abbondantemente usato anche per applicazioni di calcolo, ma con
le limitazioni rispetto al Fortran che ho citato sopra.
Il C++ e' noto per avere una lunga "curva di apprendimento". E' un
linguaggio adatto maggiormente per lo sviluppo di progetti complessi in
cui sia necessaria la cooperazione di un gruppo di programmatori, mentre
lo sviluppo di software ad uso scientifico e' spesso il lavoro di un
singolo o di pochi.
 
Java e' appena un bambino e forse crescera', ma non presenta alcun
vantaggio per le applicazioni di calcolo numerico, anzi presenta numerosi
svantaggi: prima di tutto e' interpretato (almeno parzialmente), quindi
poco efficiente; poi non ha niente di particolarmente adatto allo sviluppo
di software "numerico".
Semmai ci sono altri linguaggi (o meglio "ambienti di programmazione") che
stanno avendo successo: IDL, Mathematica, Matlab (ed i loro "cloni" non
commerciali) anche questi sono interpretati, ma offrono una gran quantita'
di funzioni complesse gia' implementate.
--------------------------------------------------------------------------
       -- )     Luca Fini                            Tel: +39 055 2752 307
 ___    |\      Osservatorio Astrofisico di Arcetri  Fax: +39 055 2752 292
/   |   | |-_   L.go E.Fermi, 5 +-----------------------------------------
(___|___//___)  50125 Firenze  /   WWW: 
http://www.arcetri.astro.it/~lfini
 (_)      (_)   Italia        / e-mail: 
lf...@arcetri.astro.it
-----------------------------+--------------------------------------------
                              In a world without fences - who needs GATES?

Sarà, ma io ho provato a scrivere lo stesso programma in FORTRAN e in C (una
simulazione di Lattice Gas molto semplice) e la velocità con cui il fortran
mi gestiva una matrice 100x100 era veramente straordinaria.
Magari poi sono io che non conosco abbastanza il C e potevo scrivere meglio
il programma.
Andrea