2020-2026

Het Vintage Fortran-project
Downloads
Portabiliteit van oude Fortran broncode
Opmerkingen, vragen of bugmeldingen
Broncode met kruisverwijzingen

VIntage Fortran (VIF) is mijn niche-compiler voor vintage Fortran, dat wil zeggen Fortran 66/77. VIF is experimenteel in de zin dat het archaïsche Fortran-machinemodel niet geëmuleerd wordt, en daarom enkele zelden gebruikte, verouderde of niet-porteerbare statements niet kan vertalen. Dit is een afweging tussen volledigheid en efficiëntie. Persoonlijk gebruik ik VIF om er vintage simulatiesoftware mee uit te voeren.

VIF implementeert multi-precisie typen REAL*16 en COMPLEX*32, wat indertijd niet ongewoon was. Een nuttige uitbreiding die VIF biedt is de implementatie van REAL*32 en COMPLEX*64. Dit zou moeten volstaan voor veel toepassingen die meervoudige precisie vragen, en die doorgaans twintig tot zestig decimalen vereisen. VIF is waarschijnlijk de enige vintage Fortran-implementatie die deze typen aanbiedt.

Daarnaast vereist VIF dat gereserveerde symbolen door witruimte van variabelenamen worden gescheiden, in tegenstelling tot Fortran. Spaties binnen namen hebben echter geen betekenis. Het negeren van witruimte buiten CHARACTER-strings was een weinig gebruikte functie in vintage Fortran, als deze al werd gebruikt.

VIF omvat een wiskundige bibliotheek met klassieke pakketten zoals BLAS, ARPACK, LAPACK en ODRPACK. Deze hoogwaardige pakketten worden tegenwoordig bijvoorbeeld gebruikt in SciPy, Mathematica, GNU Octave en MATLAB. Deze legacy-code voldoet aan de toenmalige Fortran-standaard en de destijds aanbevolen codeerpraktijken. Ik ga ervan uit dat mensen de eigenaardigheden van Fortran liever vermeden om porteerbare code te schrijven.


Downloads

Hieronder kunt u de huidige brondistributie downloaden. Nogmaals, VIF is een experimentele niche-compiler. Wellicht geeft u de voorkeur aan een productie-compiler, zoals GNU Fortran.

VIF source code • Broncode
• Voor Linux of FreeBSD
• 2.4MB
   
VIF manual page
   
VIF current source • Broncode met kruisverwijzingen

Als u een echte vintage-ervaring wilt, kunt u de klassieke FORTRAN H-compiler gebruiken op MVS of VM/CMS.


Portabiliteit van vintage Fortran broncode

Een aandachtspunt bij het vertalen van vintage code is dat verschillende machines vroeger verschillende woordlengtes hadden. Een REAL-waarde kon, afhankelijk van de hardware, een 32-bits, 36-bits of 64-bits woord innemen. Als u dus code voor een CRAY-1 wilt vertalen, moet u nagaan of u REAL moet converteren naar DOUBLE PRECISION. Porteerbare programma’s uit die tijd roepen routines zoals D1MACH aan voor details over een typeweergave. Het volgende eenvoudige fragment x1mach.f geeft machineparameters voor REAL*32 weer, analoog aan de functie D1MACH:

 
      REAL*32 x1mach 
      DO k = 1, 5 
         print *, k, x1mach(k) 
      END DO 
      END 
 

VIF kan een programma onmiddellijk uitvoeren zodra de compilatie is geslaagd, net als WATFOR of WATFIV, of zoals een JCL procedure van het type CLG onder MVS of z/OS. We kunnen het bovenstaande fragment met VIF als volgt uitvoeren, door optie -g op te geven:

 
 $ vif -g x1mach.f 
 ** main       ** end of compilation 1 
 ** linker     ** object size 372280 bytes 
 ** statistics ** 1 subprogram, no errors, no warnings 
 ** execution  ** 
 1  3.3621031431120935062626778173217526025980793448464712401088272298088533e-4932 
 2  1.1897314953572317650857593266280071307634446870965102374726748212332616e+4932 
 3  1.1319598848533390459386399113609739725853163997673922736978268612419382e-0072 
 4  2.2639197697066780918772798227219479451706327995347845473956537224838764e-0072 
 5  3.0102999566398119521373889472449302676818988146210854131042746112710819e-0001 

Opmerkingen, vragen of bugmeldingen

Stuur opmerkingen, vragen of bugmeldingen naar jmvdveer@algol68genie.nl; wij stellen uw feedback zeer op prijs.


Broncode met kruisverwijzingen

Bronbestanden met kruisverwijzingen van de huidige VIF-versie zijn hier beschikbaar.


Projecten
Computergeschiedenis
Vintage Fortran
 


Deze website is gearchiveerd door de KB, nationale bibliotheek.

© J.M. van der Veer   •   jmvdveer@algol68genie.nl