Newsgroup: it.comp.retrocomputing
Titolo: Fortran

Del come un linguaggio progettato negli anni '50 sia ancora rilevante in 
ambiente scientifico:
 
http://goo.gl/lxWcdK
 


La sua longevità deriva anche dal fatto che è uno dei pochi
linguaggi che sia stato efficacemente parallelizzato (cioè dotato di librerie
per il calcolo parallelo).
Nella ricerca scientifica a quei livelli importa poco l'eleganza...


 
e anche dal fatto che grazie alle sue qualità emerse
abbastanza presto e quindi ci sono milioni di linee di
codice che in ambito di calcolo scientifico sarebbe
pericoloso andare a toccare, tutta roba utilizzata anche
oggi. E' vero che esiste il convertitore verso il C,
ma i sorgenti prodotti risultano illeggibili.
 

 
http://goo.gl/lxWcdK
 
 
Dei programmi Fortran � dimostrabile la correttezza formale, in senso
proprio matematico. Questo � un vantaggio mica da ridere, per roba
mission-critical.
 
Considerato che con lo standard del 2008 implementa parecchie feature
"moderne" che rendono il linguaggio molto pi� completo (c'� pure il
supporto alla OOP), mi stupisco che sia usato cos� poco.
 


Be', si tratta pi� o meno di quel che � successo anche al Cobol in ambito
finanziario e commerciale: nonostante tutto � ancora l� e chiss� ancora per
quanto ci rester�. I motivi sono tantissimi, e forse neppure tutti subito
identificabili; l'efficienza, il numero di linee di codice funzionanti, la
resistenza a cambiare di certi ambienti (in cui non valgono le mode, ma dove
soprattutto si bada al rapporto costi/benefici); cio� la capacit� di essere
adatto per il compito richiesto. :)
 
Ovviamente, n� il Fortran n� il Cobol n� altri linguaggi di quell'epoca ancora
oggi in uso sono rimasti esattamente com'erano 50 anni fa: si sono evoluti anche
loro, ma sempre rimanendo fedeli a una certa linea. Per accertarsene basta dare
un'occhiata al primo manuale Fortran dell'IBM e a un manuale del compilatore
Fortran 77 per VAX/VMS (uno dei pi� forti dell'epoca, che di fatto stabil� uno
standard a cui gli altri si allinearono), oppure a un qualunque manuale Cobol
pre Cobol 68 e post Cobol 74 (se non addirittura Cobol 85), oppure ancora a un
vecchio manuale dell'RPG II per S/3 e di RPG/400. Per non parlare di quel che si
pu� osservare in un recente manuale di Cobol 2002, Fortran 2008 o RPG IV.
 
Ciao, :)
G.
 

 quanto ci rester�. I motivi sono tantissimi, e forse neppure tutti subito
 
 
*COBOL Programmer and Millenium Bug*
 
Jack was a COBOL programmer in the mid to late 1990s. After years of 
being taken for granted and treated as a technological dinosaur by all 
the Client/Server programmers and website developers, he was finally 
getting some respect. He'd become a private consultant specializing in 
Year 2000 conversions.
 
Several years of this relentless, mind-numbing work had taken its toll 
on Jack. He began having anxiety dreams about the Year 2000. All he 
could think about was how he could avoid the year 2000 and all that came 
with it.
 
Jack decided to contact a company that specialized in cryogenics. He 
made a deal to have himself frozen until March 15th, 2000. The next 
thing he would know is he'd wake up in the year 2000; after the New Year 
celebrations and computer debacles; after the leap day. Nothing else to 
worry about except getting on with his life.
 
He was put into his cryogenic receptacle, the technicians set the revive 
date, he was given injections to slow his heartbeat to a bare minimum, 
and that was that.
 
The next thing that Jack saw was an enormous and very modern room filled 
with excited people. They were all shouting "I can't believe it!" and 
"It's a miracle" and "He's alive!". There were cameras (unlike any he'd 
ever seen) and equipment that looked like it came out of a science 
fiction movie.
 
Someone who was obviously a spokesperson for the group stepped forward. 
Jack couldn't contain his enthusiasm. "Is it over?" he asked. "Is the 
year 2000 already here? Are all the millennial parties and promotions 
and crises all over and done with?"
 
The spokesman explained that there had been a problem with the 
programming of the timer on Jack's cryogenic receptacle, it hadn't been 
year 2000 compliant. It was actually eight thousand years later, not the 
year 2000. Technology had advanced to such a degree that everyone had 
virtual reality interfaces which allowed them to contact anyone else on 
the planet.
 
"That sounds terrific," said Jack. "But I'm curious. Why is everybody so 
interested in me?"
 
"Well," said the spokesman. "The year 10000 is just around the corner, 
and it says in your files that you know COBOL".
 
CYA

 and it says in your files that you know COBOL".
 
Ecco, questo mi ha fatto venire in mente una cosa che volevo scrivere ieri, ma
che poi mi � rimasta nella tastiera: se anche all'occhio di oggi sono linguaggi
brutti e vecchi, limitati, noiosi, per nulla interessanti e cos� via, ma hanno
resistito nonostante tutto, � il frutto di una certa selezione naturale che li
ha conservati a discapito di altri loro coetanei, pure pi� belli sulla carta,
(penso ad Algol, PL/I, etc.), ma che evidentemente non si sono rivelati adatti.
 
Ciao, :)
G.
 


ricordo che il primo libro di "computer" preso in biblioteca una trentina 
abbondante di anni fa era proprio sul fortran; ricordo vagamente una 
copertina arancione :)
 
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\

 copertina arancione :)
 
qui ci stanno due libri corrispondenti alla descrizione:
 
"Introduzione al Fortran" di G. Ciccarella ed altri tre, edizione ESA.
 
"dal Fortran IV al fortran 77" di McCracken, edizione Bizzarri.
 
spero che ti sia d' aiuto. Uno dei due mi pare sia preservato su uAtena 
o h64K
 
Saluti,
dott. Piergiorgio.
 
 

 "dal Fortran IV al fortran 77" di McCracken, edizione Bizzarri.
 
Se volete un bellissimo libro sul Fortran 77 (comprese le estensioni MIL-STD),
c'� Professional Programmer's Guide to Fortran 77 di Clive G. Page.
 
 
http://www.star.le.ac.uk/~cgp/prof77.html
 
 
http://www.star.le.ac.uk/~cgp/prof77.ps
 
 
http://www.star.le.ac.uk/~cgp/prof77.pdf
 
 
Pi� in generale, all'indirizzo 
http://www.star.le.ac.uk/~cgp/fortran.html
 c'�
veramente di tutto :)
 
Ciao,
G.
 
 
P.S. Prima di iniziare a leggere procuratevi un compilatore, perch� poi vi verr�
la voglia di mettervi a scrivere :)

 c'� Professional Programmer's Guide to Fortran 77 di Clive G. Page.
 
Se invece volete leggere lo standard:
 
 
http://www.fortran.com/F77_std/rjcnf.html
 
 
http://www.fortran.com/mil_std_1753.html
 
 
G.
 

 ha scritto nel messaggio 
news:SoOdv.779$J94...@tornado.fastwebnet.it...

con la copertina arancione , io ho :
 
"Come programmare con il Fortran"
 
di P.Ridolfi e H.Coen, Franco Angeli Editore,
sesta edizione 1978.
 
3.500 lire, iva inclusa.
 
Comprato allora, quando facevo l'Uni a Firenze,
il corso di Fortran era tenuto da Pietro Sona...:-)
 
 
ciao
fm 
 
 


io ho l' ottava edizione, 1982, e la copertina, piï¿œ che arancione, ï¿œ 
ingiallita, specie al dorso.
 
E sarei interessato a capire di che anno fosse la prima edizione (il 
testo ï¿œ palesemente IBM-centrico, non ostante i tentativi di camuffarlo 
da testo generalista) ma non si riesce a capire a quali sistemi IBM 
specifici si riferisce: 360, 370 o midrange ?
 
l' edizione che ho ha solo l' indicazione del copyright senza indicare 
l' anno...
 
Saluti,
dott. Piergiorgio.
 


infatti l'anno della prima edizione non c'e'.
Bisognerebbe  ricorrere agli annali della Franco Angeli,
visto che il libro e' ancora a catalogo,
oppure contattare l'Ing. Ridolfi  (vedi CV al link sopra indicato).
 
Ciao
fm
 
 

 oppure contattare l'Ing. Ridolfi  (vedi CV al link sopra indicato).
 
scusami, ma il pdf di cui hai passato il link l' hai letto ???????
 
ci sta il dato che cercavo.... la 1a edizione ï¿œ del 1969.
 
e il CV punterebbe a una iniziale formazione sui grandi sistemi (ibm 
360) e di sicuro i midrange della fine anni '60 (14xx, 7010 e 1620, il 
s/3 essendo introdotto nel 1970) non hanno alcune delle caratteristiche 
descritte nel testo.
 
quindi parlava del Fortran per 360, presumo. cmq, con comparerï¿œ con 
calma la manualistica kosovara col testo ;)
 
Saluti,
dott. Piergiorgio.

 10416 mag 22 06:28 lrgval
 
quindi IN TEORIA un backend GNU per 704 potrebbe addirittura 
cross-compilare un binario funzionante (a prescindere dall' 
implementazione di FREQUENCY, comunque superflua nel contesto di un 
compilatore dotato di ottimizzazione quale ï¿œ il GCC) nei limiti dei 4KW 
di 36 bit del 704 "liscio", in quanto 10.416 bytes sono 2314 2/3 words a 
36 bit.
 
Saluti,
dott. Piergiorgio.
 

> 10416 mag 22 06:28 lrgval
 
10Kb per 13 righe di codice compilato?! O hai postato solo uno snippet?
 
Per curiositï¿œ come funziona la compilazione di un sorgente Fortran?

 nessuna protesta usando -std=legacy) il pi� antico sorgente completo
 
Tu m'inviti a nozze... :)
 
| .copy ex704.for=tty:
|         DIMENSION A(999)
|         READ 1,N,(A(I),I=1,N)
| 1       FORMAT (I3/(12F6.2))
|         BIGA=A(1)
| 5       DO 20 I=2,N
| 30      IF (BIGA-A(I)) 10,20,20
| 10      BIGA=A(I)
| 20      CONTINUE
|         PRINT 2,N,BIGA
| 2       FORMAT (22H THE LARGEST OF THESE I3, 12H NUMBERS IS  F7.2)
|         STOP 77777
|         END^Z
| 
| .copy forcdr.dat=tty:
| 048
| 00004764646432184619846487613398746513689846138974613548843168415471555
| 65465465498741361674841635798471313987854161687984131687984631354784158
| 44313486436135486463131465486451687894679468789487984687646879866474687
| 98794651354761674698731678867665468761389763981687467651687465467656744^Z
| 
| .load ex704/compile/f66/optimize/dlist/map/save
| FORTRAN: EX704
| MAIN.
| LINK:   Loading
| 
| EXIT
| 
| .assign dsk cdr
| DSK assigned
| 
| .assign tty lpt
| TTY4 assigned
| 
| .run ex704
| 
| THE LARGEST OF THESE  48 NUMBERS IS 9879.46
| 77777
| CPU time 0.00   Elapsed time 0.03
| 
| EXIT
| 
| .dir ex*,for*
| 
| 
| EX704   FOR     1  <057>   22-May-14                    DSKB:   [1,2]
| EX704   LST     1  <057>   22-May-14                    DSKB:   [1,2]
| EX704   REL     2  <057>   22-May-14                    DSKB:   [1,2]
| EX704   MAP    13  <057>   22-May-14                    DSKB:   [1,2]
| EX704   EXE    20  <057>   22-May-14                    DSKB:   [1,2]
|   Total of 37 blocks in 5 files on DSKB: [1,2]
| 
| FORCDR  DAT     1  <057>   22-May-14                    DSKB:   [1,2]
| FORLPT  DAT     1  <057>   22-May-14                    DSKB:   [1,2]
|   Total of 2 blocks in 2 files on DSKB: [1,2]
|   Grand total of 39 blocks in 7 files
| 
| .dir/detail ex704.exe
| 
| DSKB0:EX704.EXE[1,2]
| Access date: 22-May-14
| Creation time, date: 23:55 22-May-14
| Access protection: 057
| Mode: 16
| Words written: 2560.
| Estimated length: 23.
| Blocks allocated: 30.
| Written on unit(s) 0 on controller 0 on CPU 2034
| Data block in directory: 90.
| Internal creation date, time: 22-May-14 23:55:41
| RIB block number: 46440.
| 
| .
 
Quindi 2560 word da 36 bit, cio� 11520 byte da 8 bit (2560 * 36 / 8)
 
Sistema operativo Digital TOPS-10 V7.05(33770)
Compilatore Digital Fortran V11(4561)
 
Ciao, :)
G.
 

Scusa la mia ignoranza su TOPS...
 
.run ex704
 
Come fa a sapere che deve prelevare i dati da forcdr.dat?


� una "stranezza" pi� del Fortran in generale che di TOPS-10 in particolare. In
Fortran l'I/O si fa su unit� logiche implicite o esplicite, rappresentate con
dei numeri o assunte per difetto. Se c'� un'istruzione OPEN, questa pu� indicare
il nome del file da aprire, altrimenti (se non c'� il nome o se addirittura non
c'� l'istruzione) si usano dei nomi di default che nella maggior parte dei casi
sono nella forma FORxxx eventualmente con estensione DAT.
 
Nel nostro esempio, c'erano queste istruzioni:
 
        READ 1,N,(A(I),I=1,N)
1       FORMAT (I3/(12F6.2))
 
READ � ovvio; 1 � un riferimento alla seconda riga (che infatti ha un 1 in prima
colonna); da N compreso in poi sono indicate le variabili che dovranno contenere
i valori letti dal file, ma quale file?
 
In mancanza di un'unit� si usa l'input standard di default, che nel caso di
TOPS-10 � il card reader (CDR). Poich� io un card reader (emulato) non l'avevo
disponibile, ho riassegnato l'input al disco (ASSIGN DSK CDR) e quindi il
runtime Fortran ha cercato un file su disco nella forma detta sopra, ed ecco da
dove spunta FORCDR.DAT :)
 
Ogni sistema operativo assegna ai vari numeri di unit� dei device e/o file di
default diversi, a meno che non sia specificato il nome preciso che si desidera:
 
        OPEN (UNIT=25,FILE='NUMBRS.DAT',STATUS='OLD')
        READ (UNIT=25,FMT=1) N,(A(I),I=1,N)
1       FORMAT (I3/(12F6.2))
 
Ovvero:
 
        OPEN (UNIT=25,FILE='NUMBRS.DAT',STATUS='OLD')
        READ (25,1) N,(A(I),I=1,N)
1       FORMAT (I3/(12F6.2))
 
Ciao,
G.
 

 Compilatore Digital Fortran V11(4561)
 
eh... se riuscissi a far cooperare TOPS con SIMH... finora non ho 
ottenuto grandi risultati.
 
Cmq, grazie per l' interessante esperimento, anche se bisogna mettere 
nel piatto le profonde differenze tra l' architettura DEC e quella IBM 
70x/70xx.... ma reputo che non si discosterebbe di molto.
 
Saluti,
dott. Piergiorgio.
 
 

 nel piatto le profonde differenze tra l' architettura DEC e quella IBM 
 
S�, infatti. Forse sarebbe meglio guardare al numero di istruzioni generate
piuttosto che ai byte. Per esempio le istruzioni del PDP-10 sono tutte lunghe
uguali e occupano ciascuna una word, quindi il programma in questione viene
tradotto in 2560 word, le quali in massima parte saranno istruzioni, salvo
qualcuna che costituir� invece un header "di servizio" per la rilocazione.
 
Certo che pensandoci, 2560 istruzioni per quel programmino mi sembrano un po'
tante, no? Alla fine non mi sembra cos� complesso.
 
Ciao, :)
G.
 

 Per curiosit� come funziona la compilazione di un sorgente Fortran?
 
Su Linux semplicemente 'gfortran sorgente.for -o oggetto', come compileresti un
programma C con gcc; su altri sistemi, dipende.
 
Ciao,
G.
 

 Compilatore Digital Fortran V11(4561)
 
Su VAX con VMS viene ancora pi� piccolo:
 
| $ create ex704.for
|         DIMENSION A(999)
|         READ 1,N,(A(I),I=1,N)
| 1       FORMAT (I3/(12F6.2))
|         BIGA=A(1)
| 5       DO 20 I=2,N
| 30      IF (BIGA-A(I)) 10,20,20
| 10      BIGA=A(I)
| 20      CONTINUE
|         PRINT 2,N,BIGA
| 2       FORMAT (22H THE LARGEST OF THESE I3, 12H NUMBERS IS  F7.2)
|         STOP 77777
|         END*EXIT*
| $ create ex704.dat
| 048
| 00004764646432184619846487613398746513689846138974613548843168415471555
| 65465465498741361674841635798471313987854161687984131687984631354784158
| 44313486436135486463131465486451687894679468789487984687646879866474687
| 98794651354761674698731678867665468761389763981687467651687465467656744*EXIT*
| $ fortran/nodebug/optimize ex704
| $ link/notrace ex704
| $ define/user for$read ex704.dat
| $ run ex704
| THE LARGEST OF THESE  48 NUMBERS IS 9879.46
| 77777
| $ dir/full ex704.exe
| 
| Directory SYS_USERS:[RPT]
| 
| EX704.EXE;15                  File ID:  (5603,16,0)
| Size:            5/9          Owner:    [USERS,RPT]
| Created:   23-MAY-2014 19:37:55.76
| Revised:   23-MAY-2014 19:37:55.86 (1)
| Expires:   <None specified>
| Backup:    <No backup recorded>
| Effective: <None specified>
| Recording: <None specified>
| File organization:  Sequential
| Shelved state:      Online
| Caching attribute:  Writethrough
| File attributes:    Allocation: 9, Extend: 0, Global buffer count: 0
|                     No version limit, Contiguous best try
| Record format:      Fixed length 512 byte records
| Record attributes:  None
| RMS attributes:     None
| Journaling enabled: None
| File protection:    System:RWED, Owner:RWED, Group:RE, World:
| Access Cntrl List:  None
| Client attributes:  None
| 
| Total of 1 file, 5/9 blocks.
 
Cinque blocchi utilizzati (su nove allocati), dunque 2560 byte (5 * 512).
 
Qualcuno offre di pi�? :)
 
Ciao,
G.

 
L'I/O del fortran lo conosco, non mi era chiaro come venisse generato il nome
di default FORCDR.DAT