Argomenti passati a funzione – 2

sicNon so se solo noi… (inteso come quelli con cui lavoravo illo tempore) ma in seguito al post Argomenti passati a funzione ho avuto una sessione di ricordi con il mio boss di allora. Riassumo.

Intanto la funzione corretta (cquad.f):

1
2
3
4
5
6
7
* quad restituisce il quadrato del parametro - corretta
       function quad(x)
       y = x
       y = y * y
       quad = y
       
       end

Verifico, con questo main (c1.f):

1
2
3
4
5
6
7
8
* versione corretta #1
      x = 5
      qx = quad(x)
      print *, ' il quadrato di', x, ' vale ', qx
      qx = quad(8.0)
      print *, ' il quadrato di 8.0 vale ', qx
      
      end 

arg-c1

Nella funzione si copia il parametro in una variabile locale e si modifica solo questa. È così usabile come previsto nel main; qui a raccontarla tutta inizialmente avevo scritto 8 invece di 8.0

Però, mi fa osservare il Signor Capo, la prassi era quella di usare le subroutines, ecco squad.f:

1
2
3
4
       subroutine quad(x)
       x = x * x
       
       end

che verifico con il main c2.f:

1
2
3
4
5
6
* versione corretta #2
      x = 5
      call quad(x)
      print *, ' il quadrato di 5.0 vale ', x
      
      end 

arg-c2

OK, quasi. Ma questo era il modo standard di operare (almeno da noi). Notare che call quad(8.0) non avrebbe senso, non ottengo il risultato (sì un errore, invece).

Una googlata è stata molto fruttuosa: ho trovato il manuale di Prime F77 che riporta in due punti un warning a proposito di questo problema. Ma si sa che nessuno legge i manuali 👿

pagina 5-1:

5-1

e pagina 5-4

5-4

Abbiamo pensato anche a intent ma ci risulta posteriore, Fortran 90. Può darsi che qualche implementazione l’avesse già allora ma dalla ricerca con Google non ho trovato niente. Trovato invece cose interessanti:

Il commento di Piero Patteri, esaminato con più cura di quanto ho risposto, si riferisce a un altro aspetto ancora, interessa a qualcuno? Devo parlarne? Secondo il Boss il Fortran si usa ancora, anche se molto meno, ci sono concorrenti, tanti. Anche Matlab.


L’immagine lassù è del manuale del Fortran. Trovata su Ebay (in realtà KiJiJi), con questa nota: Nave scuola per migliaia di programmatori, questo volume del 1981 (riedizione di quella del 1971) ha costituito un punto di riferimento per la nascente attività di programmazione per docenti e ricercatori.
E pare sia ancora nel catalogo di Zanichelli. No, solo nel catalogo storico.

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • Piero Patteri  Il 7 aprile 2015 alle 00:59

    Quel libro lo ricordo, ma quando cominciai a scrivere programmi per la tesi mi fotocopiai il manuale FORTRAN IV e Operating System Command Language dell’IBM e li ho consultati per decenni.
    Il consiglio degli esperti era comunque di non passare argomenti nelle chiamate a SUBROUTINE, perché prendevano tempo, soprattutto se erano array voluminosi, e lo erano spesso. Si usava metterli in un COMMON block, o meglio un LABELED COMMON block, che poteva essere inizializzato in qualche modo.
    Il COMMON , dichiarato nel programma principale e in tutte le subroutine che dovevano accedervi, occupava sempre fisicamente le stesse celle di memoria.
    Ho capito la sua utilità quando l’ho dovuto usare per trasferire dati da una routine in assembler che gestiva l’acquisizione dati di un CAMAC al programma ‘umano’ che li elaborava.
    Naturalmente accedendo alla stessa area si potevano compiere perversioni acrobatiche, tipo scrivere da una parte una parola di quattro caratteri di 4 byte, e altrove leggerla come quattro parole di un byte.
    Siccome i progressi in informatica sono sempre accompagnati da dispiaceri, ho letto molti anni dopo che il COMMON era da deprecare perché intralciava l’ottimizzazione dei compilatori

    • juhan  Il 7 aprile 2015 alle 07:00

      Verissimo 😀
      Magari ne parlo in futuro, mi sembra di tornare giovane 😉
      E, detto tra noi, il COMMON un po’ perverso lo era davvero.
      Ho recuperato le fotocopie del manuale del Fortran di Apollo; prossimamente racconto, lo leggerò alla sera 😀

Trackback

  • […] titolo del post è fuorviante, è quello solo perché si collega a questo: Argomenti passati a funzione – 2. Ed è un post atipico, solo per un paio di precisazioni. Intanto come dicevo in un commento nel […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: