2011-04-04 10 views

risposta

2

Fortran ha alcune proprietà che consentono programmi più veloci. I puntatori Esp fermano il compilatore dall'ottimizzazione del codice (e gli array vengono passati come puntatori in C - e gli array sono THE datastructure in HPC). Il problema qui è che due indicatori possono essere falsi, in Fortran questo non può accadere. Nel nuovo C99 questo problema si riduce, quando è scritto bene, come suggerisco al compilatore con restrict, che tale alias non può accadere.

Ma poiché nelle aziende fortran c'è molto vecchio codice fortran non sarà mai obsoleto nel prossimo futuro.

+6

Trovo divertente ogni volta che uno standard di 12 anni viene chiamato nuovo. –

+0

quindi diresti che fortran è ancora più veloce? – James

+1

Non si tratta tanto di fortran vs C essere più veloce, si tratta del codice già scritto più veloce. Ci vorrà un notevole sforzo per le persone di riscrivere il loro codice fortran finemente sintonizzato in C. – nos

2

Fortran non sta andando via in qualunque momento presto. C'è troppo codice Fortran: routine veloci, affidabili, ben collaudate per fare ogni sorta di cose e programmi che possono essere meno ben progettati ma che funzionano e sarebbero difficili da riscrivere in C.

Inoltre, Fortran come linguaggio è progettato intorno al calcolo ad alte prestazioni, e non ha barriere all'ottimizzazione, e i compilatori Fortran sono generalmente progettati per l'elaborazione ad alte prestazioni.

+0

Non penso che la domanda riguardi la riscrittura del codice Fortran esistente in C. La domanda come la vedo io, quali sono i potenziali benefici in termini di prestazioni che l'ultimo standard Fortran offre rispetto all'ultimo standard C, per il nuovo codice? –

+0

Sì esattamente a Matteo – James

+1

Le librerie disponibili sono un motivo molto valido per scegliere una lingua piuttosto che un'altra, in realtà di solito prendono in considerazione la decisione più delle prestazioni non elaborate. Quando è probabile che anche le biblioteche siano le migliori, hai una vittoria vincente. –

1

Due parole. Codice legacy Ci sarà ancora un sacco di Fortran in giro in 20 anni, così come ci sarà abbondanza di COBOL. E il mio cuore va a chi deve mantenerlo.

2

Fortran 90/95/2003/2008 sono lingue di livello superiore rispetto a C. Vorrei scegliere C per la programmazione integrata o periferica e Fortran moderno per la programmazione scientifica.

11

Argh! No, no non lo è. E nelle notizie correlate, Fortran che cresce alcune cose OOP/polimorfiche non obsolete C++, Erlang non rende Haskell superfluo, Python non ha ucciso lo scripting bash, PHP non elimina la necessità di javascript e misteriosamente nulla ha ucciso fuori da Java, ecc. ecc. ecc. Esistono linguaggi di programmazione di miliardi di dollari là fuori per una ragione: c'è un gruppo di programmatori che li trova buoni strumenti per lavori specifici. Non devi piacergli perché sia ​​vero.

C è, fondamentalmente, un linguaggio di programmazione dei sistemi. È tremendamente penoso scrivere qualcosa di simile alla scienza computazionale. Il C++ è migliore perché è più ricco, ma soffre in modo critico dal fatto che non ha matrici multidimensionali come un tipo di prima classe (no, semplicemente non funziona, ok?), E tutto il calcolo tecnico si basa in modo critico su array multidimensionali . La mancanza di un singolo pacchetto di array multidimensionale standard per C/C++ rende molto difficile scrivere librerie ottimizzate per quel linguaggio e, una volta che si esegue il commit su un pacchetto, è necessario utilizzare le loro strutture di dati. Python soffre dello stesso problema e lo farà fino a quando Numpy non diventerà parte del core di Python.

Fortran, per tutti i suoi difetti, è l'unica lingua là fuori progettata specificamente per la programmazione scientifica. Permette agli operatori e alle affettatrici di matrice python o matlab e questa può semplificare la vita dei programmatori scientifici. Anche allora, molti programmatori scientifici non amano il fortran; preferiscono gli strumenti o le librerie disponibili in altre lingue. E va bene

E proprio per respingere la tua prossima domanda - no, non dobbiamo essere tutti d'accordo anche sugli editori.

+0

"[C++] soffre criticamente del fatto che non ha matrici multidimensionali come un tipo di prima classe". L'ultimo bit è vero, ma quali sono le conseguenze? Né è 'std :: complex <>' (anche un tipo di libreria), e nessuno si lamenta neanche di questo. – MSalters

+2

@MSalters: il problema è che in un progetto non banale in cui potresti voler utilizzare una manciata di librerie di terze parti, dovrai gestire una manciata di classi di array multidimensionali reciprocamente incompatibili e mescolare i dati tra loro in qualche modo . std :: complex, OTOH, è nella libreria standard, quindi world + dog non lo fa reinventare tutto il tempo. Poi di nuovo, se hai bisogno, ad esempio, di array sparsi, Fortran non ti aiuta e hai lo stesso problema; in tal caso C++ potrebbe anche essere una scelta migliore a causa di modelli e sovraccarico dell'operatore rendendo le classi di array definite dall'utente più semplici di Fortran – janneb

+0

.. e ora fortran ha overloading dell'operatore e tipi parametrizzati (non modelli, ma il loro uso principale sarebbe per diversi tipi di real), così può farlo anche tu. Ma sì, sono d'accordo sul fatto che le cose sparse sono più difficili e tu vedi la stessa cosa (ad esempio, Petsc). L'assenza di matrici anche dense in C/C++ si presenta anche in altre cose - in quasi tutte le domande MPI per C on SO che si occupa di array multidimensionali, parte della risposta viene sempre dal mostrare al programmatore C come creare contiguità array multidirezionali. Questo dovrebbe essere solo qualcosa che il tuo linguaggio di programmazione fa per te. –

Problemi correlati