Newsgroup: it.comp.lang.c++
Titolo: C++ e programmazione scientifica

Salve!
Nel mio lavoro di ricerca utilizzo il fortran per fare calcoli e
simulazioni. Vorrei sapere se qualcuno ha esperienza di questo tipo di
programmazione in c++ e se vale o meno la pena (motivando magari con
esempi pratici) pensare di cambiare linguaggio di programmazione.
Grazie, mario.

 wrote in message
379D77E1...@pimac2.iet.unipi.it...

Per quanto riguarda le prestazioni, fra un compilatore fortran e un
compilatore c++, entrambi efficenti e in grado di ottimizzare bene il
programma non dovrebbero esserci rilevanti differenze. (forse e' piu' facile
trovare compilatori c++ ottimizzati bene)
Per quanto riguarda la chiarezza e la concisione del sorgente, penso che il
c++ sia molto meglio.
Ad esempio poter scrivere a = b+c o espressioni molto piu' complicate, dove
a,b,c sono complessi, matrici, vettori, o qualsiasi altra cosa, definita
dall'utente, rende il programma piu' leggibile. (overload degli operatori)
Inoltre, implementato, un algoritmo su un tipo di dati, se questo non cambia
formalmente su altri tipi, non e' necessario riscriverlo ogni volta
(template di funzioni e classi).
E' possibile associare dati e funzioni che operano su di essi (classi).
Si possono scrivere forme estremamente concise, es:
Max(a,b) *= 2 // trova quale delle due variabili a e b e maggiore e la
moltiplica per 2
x = ((a > b) ? (a-b) : (a*b)) // se a e maggiore di b mette in x a-b,
altrimenti mette in x a*b
Inoltre il c++ si interfaccia piu' direttamente con il sistema operativo e
l'hardware utilizzato, quindi se non si hanno particolari esigenze
di portabilita', si puo' preottimizzare manualmente meglio il programma.
Viene solitamente data insieme al compilatore anche la libreria STL che
contiene gia' molti algoritmi e strutture di dati utili.
Le parole riservate (keyword) sono poche e molto semplici (specialmente nei
compilatori a 32 bit).
L'utente puo' molto facilmente creare nuove librerie.
In particolare ho scritto librerie per geomentria lineare-2D
(Vettori,Punti,Matrici); calcoli con propagazione dell'errore; funzioni
definite per punti, con interpolazione lineare e trasformata di Fourier.

 esempi pratici) pensare di cambiare linguaggio di programmazione.
Tempo fa (8 mesi?) avevo seguito un po' discussioni del genere e su qualche
sito c'erano tanto di test comparativi delle prestazioni di vari compilatori
(Fortran vs C++) su svariate piattaforme in campi matematici molto vari.
[ prova , se ben ricordo:
The Blitz++ Numerical Library Project
(techniques which will enable C++ to rival the speed of Fortran for
numerical computing, while preserving an object-oriented interface)
http://monet.uwaterloo.ca/blitz/
]
I punti furono:
- difficile trovare un compilatore che aderisca completamente allo standard,
in particolare che supporti le funzionalità specifiche usate dalla suddetta
libreria matematica (covariant return types, partial specializzazioni di
templates, ed altre amenità...)
- non si può affermare che il C++ sia in generale più veloce del Fortran nei
test illustrati. Nella maggior parte dei casi le prestazioin sono molto
simili o superiori nel caso del Fortran. In pochi test il C++ si rivela più
veloce.
Oggi forse le cose sono un po' cambiate.
Il VC++ SP3 credo che ancora non sia in grado di compilare agevolmente la
libraria suddetta (non ha il supporto per i covariant return types o come
diavolo si chiama questa funzionalità).
Si trova però egcs (o forse Kai) che sono più vicini allo standard e gratis
! anche per win32.
Per le prestazioni so che Intel mette a disposizione qualcosa detto VTune
(libreria o add-in per VC++ o compilatore stand-alone, non so) che promette
miglioramenti di prestazioni nel campo scientifico, numerico. Temo però che
funzioni solo con prodotti M$ perciò anche se ci sarebbe un potenziale
incremento di prestazioni resterebbero i problemi di compilazione (forse
oggi sono stati risolti dagli autori della libreria).
Naturalmente tutto questo è da verificare perchè in questi mesi le cose sono
sicuramente un po' cambiate.
Inoltre il fatto che C++ non sia sempre più veloce del fortran non lo
preclude affatto da utilizzi in campo matematico, se si considerano i
benefici che possono derivare dalla OOP.
---
Livio Cavallo
(God is real unless declared as integer)

 covariant return types
Cosa sono esattamente?
EMG