Archivi Categorie: Nostalgia

GEB.G ovvero come ho scoperto la ricorsività nella programmazione

gebIo sono in ferie. Nel senso che sto tentando di tenermi lontano dal ‘puter per qualche giorno, disintossicarmi. E cosa si fa in questi casi? Altro, per esempio rileggere i classici. Io sono alle prese con Gödel, Escher, Bach di Douglas Hofstadter (1979, versione italiana 1984).

Ogni volta che lo rileggo salta fuori qualcosa di nuovo. O, come nei giorni scorsi un ricordo (attenzione: nostalgia qui) di cose successe all’inizio degli anni ’80, peccato non aver tenuto appunti e sorgente dei programmi! (ma sono passati più di trent’anni).
Allora il mio ‘puter, il Pr1me 550, un mini voleva che si usasse principalmente il Fortran. Vero che c’erano linguaggi di scipting come il CPL, Cobol e RPG per i gestionali, Basic per Giorgio ma erano complementari. E i capi insistevano per usare il IV (1964) meno esoso di risorse del 77 (1978).
DRH invece parla di ricorsività, vietata nel Fortran, prendi questo pezzo copiato da p.146-148 (sperando che l’autore e il sgnor Adelphi non si arrabbino):

Possiamo definire strutture geometriche infinite usando lo stesso metodo, cioè quello di espandere un nodo dopo l’altro. Per esempio, definiamo un diagramma infinito chiamato “Diagramma G”. Useremo a questo scopo una rappresentazione implicita. In due nodi scriveremo semplicemente la lettera ‘G’, che starà per una copia del Diagramma G. Nella Figura 31a abbiamo disegnato il Diagramma G implicitamente.

g1

Ora, se vogliamo vedere il Diagramma G più esplicitamente, possiamo espandere ognuna delle due G, cioè, sostituirle con lo stesso diagramma, ma in dimensioni ridotte (vedi Fig. 31b). Questa versione “di secondo ordine” del diagramma G ci dà una vaga idea dell’aspetto che avrebbe il Diagramma G se fosse completato, cosa che è impossibile.

g2

Nella Figura 32 si vede una parte ancora più grande del Diagramma G, in cui i nodi sono stati numerati, cominciando dal basso e da sinistra a destra. In basso sono stati inseriti due nodi supplementari che portano i numeri 1 e 2.
[…]
Ma il Diagramma G possiede proprietà ancora più sorprendenti. Tutta la sua struttura può essere racchiusa in un’unica definizione ricorsiva che è la seguente:

g3Come fa questa funzione G(n) a racchiudere la struttura ad albero di G? È molto semplice: se si costruisce un albero nel quale si colloca G(n) al di sotto di n per tutti i valori di n, si ritrova il Diagramma G. È proprio così che ho scoperto il Diagramma G la prima volta. Stavo indagando la funzione G e, mentre cercavo un metodo rapido per calcolarne i valori, mi venne l’idea di disporre i valori già noti in un albero. Con mia grande sorpresa, trovai che questo albero ammetteva quella descrizione geometrica ricorsiva estremamente ordinata.

Etc.
Uh! mi ero detto, chissà se… A quei tempi era normale avere un contratto di assistenza, tipo che l’hard disk andava in crash un paio di volte all’anno (fare spesso il back-up!) e conoscevi bene i tecnici. Io mi ero fatto dare un nastro con una versione non proprio ufficiale del Lisp e me ne sono innamorato, e perdura ancora. Tanto che l’altra sera arrivato a p.148 del GEB mi sono detto: ma la G cos’è già che fa, e se…
Ecco (g.nl):

#!/usr/bin/newlisp

(define (g n)
	(if (= 0 n) 
		0
		(- n (g (g (- n 1))))))

;; main
(set 'n (int (main-args 2)))
(print n " -> " (g n) "\n")
(exit)

gnl

Sì, lo so che il Lisp non è che piaccia proprio a tutti e allora ecco Python, il Basic di adesso, ormai la ricorsività non è più un taboo (g.py):

#!/usr/bin/env python3

from sys import argv

def g(n):
	if n == 0:
		return 0
	else:
		return n - g(g(n - 1))

#main
n = int(argv[1])
print(n, '->', g(n))

gpy
OK?
Ma però –ricordo perfettamente– mi disse teh Boss: la ricorsività costa!
Vero. Riscriviamo lo script Python à la Fortran –potrei installarlo ma sapete che sono in ferie :wink:– (g-nonric.py):

#!/usr/bin/env python3

from sys import argv

n = int(argv[1])
g = [0]
for c in range(1, n + 1):
	g.append(c - g[g[c - 1]])
print(n, '->', g[n])

Adesso g non è più una funzione ma una lista, in Fortran sarebbe un array. A proposito allora gli array si chiamavano vettori se monodimensionali e matrici se con due o più dimensioni, oggi i giovani mi hanno cambiato anche il vocabolario 😯

Non cambia niente ma i pythonisti per bene userebbero la list comprehension, lo script precedente sarebbe così:

#!/usr/bin/env python3

from sys import argv

n = int(argv[1])
g = [0]
[g.append(c - g[g[c - 1]]) 
	for c in range(1, n + 1)]
print(n, '->', g[n])

Quindi torniamo all’osservazione del capo di allora (se vi dicessi che il suo nome inizia per G ci credereste?), ecco:

cpy

Quasi 17 secondi contro meno di 3 centesimi! G, teh Boss ha ragione, ancora adesso. Lo so che non interessa ma newLISP ha la possibilità di creare l’eseguibile, vediamo:

cnl

Nessun vantaggio. Però basta nostalgia e basta ‘puter, sono in ferie 😉

rc ovvero ci sono più cose in cielo e in terra…

get_bigUn postino che non so se vale. Ma ho una manciata di giustificazioni (o scuse) per auto-assolvermi:

  • un post già quasi pronto lo blocco perché riguarda cose non più supportate;
  • la solita filosofia Unix, ne ho parlato recentemente e è materia controversa (Massimo non ha tutti i torti, anzi!);
  • l’amico Luigi Bit3Lux posta spesso su questi argomenti, p.es. qui, qui e qui.

Tutto nasce da quest’immagine:

meaning of strange unix-linux command names.001

La trovate su G+, qui.

Fa parte di nixCraft: NixCraft is an online community of new and seasoned Linux / Unix sysadmins who want to make the most of sysadmin-hood.
Volendo c’è anche su Facebook, credo con le stesse cose (forse, non lo seguo).

Allora, tornando all’immagine, quasi tutto OK. Ricordo che quando mi approcciai a Unix tee mi risultò inizialmente ostico perché il COMO (command output) sul Prime era molto meglio (no, solo diverso ma l’abitudine…) e poi non avevo capito il perché del nome, cosa per cui l’immagine su in alto.

Perl se ricordo bene era allora nuovissimo, non si capiva nemmeno dove volesse andare a parare; sarebbe diventato di moda anni dopo alla nascita del Web.

Invece rc. OOPS non lo conosco! Controllo sul manuale cartaceo di SisV di Apollo, manca. Panico? No, c’è la Wiki.
Toh! Plan 9. È la shell di 9P. E c’è anche per Linux anche se non so se serve; per adesso no.

Invece Plan 9, qualche mese fa un giovane nerd me ne parlava entusiasta, peccato che in quel momento non ho pensato di sfruttare l’occasione. Persa, chissà se riesco a rintracciarlo.

OK, nostalgia-mode off 😉

La filosofia di Unix

Un post filosofico o lubitoso o nostalgico. O semplicemente –beh giudicate voi.
Ieri su G+ qualcuno condivide quest’immagine

The UNIX Philosophy.001
Pare che venda da qui.

Bella, mi ci ritrovo pienamente. Tanto che appena possibile mi metto a cercare, la Wiki (come faremmo senza! (auto-cit.)), Dr.Dobb’s e altro ancora, nel Web c’è parecchio sull’argomento. Tanto che mi son detto prima o poi, forse, chissà…
E, la conbinassione! oggi Luigi Bit3Lux ti fa un post proprio in quella direzione: Underscore [Brevi Esercizi].
E allora non ho più scuse: la filosofia Unix, quella dell’immagine, vale ancora? Vale ancora scrivere script da eseguire sulla riga di comando, usando i tool forniti dal sistema operativo, proprio come si faceva una volta? E gli esempi forniti da Luigi sono eleganti. E usa anche AWK, quello che a me dicevano che era troppo ostico; e qui forse il mio capo di allora aveva ragione, scelgo la versione Bash, o quella con tr, o …
Però, oltre a finire tag ho in programma una serie di post con finestre, pulsanti e quant’altro, sono incoerente, forse 😯

Luigi è il papà di Lubit, distro velocissima che invoglia all’uso del terminale, come si usava una volta (non solo nèh, non manca niente per quelli che arrivano da Windoze). E riguardo Lubit mi ricordo sempre la sgridata di Squittymouse quando ho riportato che non si potevano mettere cartelle, documenti, icone e altro ancora sul desktop. Ovviamente ha ragione Squitty.

Appena posso devo indagare su Mike Gancarz, chissà…
Poi c’è anche un tot di nostalgia, tanto che mi viene da mttere questo video 😆

Una domanda difficile sul C

Adoro Twitter. Non ne potrei fare a meno, è la mia fonte di informazioni (di lì arriva il grosso di visto nel Web) e pettegolezzi.
Ovvio ci sono anche i pettegolezzi, quasi come quelli che (prima di mangiarlo) pubblicano la foto di tutto quello che mangiano su Instagram. Ma ci sono anche tweets intelligenti, anche se non relativi a quello di cui mi occupo abitualmente. Insomma tutto un mondo.

McCarthy, 1960

McCarthy, 1960

Magari frequento gente particolare ma recentemente è tutto un fiorire di cose nuove con radici antiche, come il Lisp. Lo trovi in nuove vesti, Clojure per esempio o Hy.
Poi c’è Robert Smith più conosciuto con il nick (e blog) Symbo1ics Ideas.

si-bannerRecentemente ha prodotto tre cinguettii (forse di più) mooolto particolari, questi:

siCIl primo è la domanda difficile per cui vorrei davvero una risposta 🙄

Gli altri due invece sono veri ma parliamo di quando il C ancora non c’era, o non si era ancora imposto via Unix. O sbaglio?

Uh! ‘na verifica sulle ali della nostalgia: i miei primi computer, Pr1me e Apollo. Copiando dalla benemerita Wiki, al solito.

Prime
Nasce nel ’72: The original products were clones of the Honeywell 316 and 516 minicomputers.
The first Prime system, similar to the DDP 516 but a 32-bit machine with paging. It ran an operating system called DOS, also referred to as PRIMOS 2 (not to be confused with MS-DOS, PC DOS, etc.).
Poi nel ’74 il 300: It had S-mode and R-mode instructions. (Vedi in fondo).

By 1987 Prime Computer had introduced an alternative line of Intel 80386-based computers, the EXL-316 series, running the Unix operating system.

The company operating system, PRIMOS was originally written mostly in the Fortran IV programming language with some assembler. Subsequently the PL/P and Modula-2 languages were used in the Kernel. A number of new PRIMOS utilities were written in SP/L which was similar to PL/P.

Apollo
1980. Apollo machines used a proprietary operating system, Aegis, because of the excessive cost of single CPU Unix licenses at the time of system definition. Aegis, like Unix, was based on concepts from the Multics time sharing operating system. It used the concepts of shell programming (à la Stephen Bourne), single level store, and object-oriented design. Aegis was written in a proprietary version of Pascal.

Quindi Robert | Symbo1ics ha ragione! Fortran e Pascal. In versioni proprietarie. E Unix costava troppo caro. E io ero giovane!

OK, Nostalgia mode off. Ma prima specialmente per Giorgio (adesso gli mando un msg) ma anche per tutto l’universo mondo: ci sono altri che tra gli incubi annoverano la T$AMLC. E che interi usiamo? E come lo compiliamo Run o Segmentato?

Comandi sconosciuti

Qualche giorno fa un vecchio collega, anzi un capo, mi telefona per confermarmi un meeting di cui si parlava da tempo. E per invogliarmi, il bieco, di dice “Ah, cercando altro in cantina ho trovato un mucchio di vecchi manuali del Prime“, il mio primo ‘puter 😀
In realtà non erano così vecchi e il pezzo forte non l’ho visto: erano fogli di quelli per i contenitori ad anelli, ancora cellofanati in bundle, si vedeva che erano diversi per via delle copertine in cartoncino. L’ha mandato così intonso a un museo, sigh! Tutto quello che sappiamo era che il primo manuale raccontava di ratfor, e che anche il resto non doveva essere così importante se nessuno si è curato di aprire il malloppo.

Il Prime aveva un sistema operativo suo, Primos, derivato da Multics ma appena prima di chiudere aveva tentato di passare a Unix, senza successo. Sigh.

Il linguaggio ratfor è una cosa strana, non credo sia mai stato utilizzato da nessuno. Si trattava di scrivere con una sintassi quasi simile al C e ratfor convertiva il codice in Fortran. E c’era, sul Prime, prima del passaggio a Unix, mi ricordo di aver letto qualcosa e di averlo giudicato tra le cose inutili.

ratfor - rational FORTRAN dialect.
C’è naturalmente anche con Linux, no, non lo installo.

ratfor

Invece l’altro giorno, in attesa che la riunione iniziasse io e l’ex-capo abbiamo passato in rassegna il SysV Command Reference. Anche lì cose mai viste, attivo la modalità nostalgia e ne racconto un po’.

cxref - generate C program cross-reference.
Provato a installarlo, pasticciato un pochino ma non sono riuscito a farlo funzionare.

dc - desk calculator.
Questo lo conosco, ci ho dedicato un post in passato: dc = desk calculator, antenato di bc, calc e altri ancora.
Ci sono alternative molto più user friendly ma –siamo in nostalgia mode ricordate– ecco un esempio:

dc

expr - evaluate arguments as an expression.
Sì, mah, forse…

expr

hostname - set or print name of current host system.
Questo lo sapevo, come pure basename e dirname.

hostname

spline - interpolate smooth curve.
Installato, installando plotutils. Non facilissimo da usare, anzi sono ricorso a The spline Program per capirci qualcosa. Chissà perché non lo usavamo allora? A parte che avevamo tutta una serie di programmi fatti da noi, uno per ogni caso. Oggi poi c’è Gnuplot.

splinegsp0gsp1

units - conversion program.
Installato, OK, anche se oggi c’è il Web e Google e Wikipedia e Wolfram|Alpha.
In ogni caso si può usare così:

units-0

o così:

units-1

OK, nostalgia --off --back-to-the-present 🙂

WIMP o cmd?

Automator
OK, avevo detto che niente più post nostalgici di come erano i ‘puters una volta ma poi domenica 9 James Hague di programming in the
twenty-first century se ne esce con questo post: The UNIX Philosophy and a Fear of Pixels  e allora devo scrivere qualcosa. Poi smetto, davvero.

Quando io ho cominciato le schede perforate non si usavano più. Quasi: per esempio al Poli per gli studenti ma sul lavoro ormai c’erano i TTY (allora i terminali, monitor e tastiera attaccati, collegati tramite RS232 all’elaboratore si chiamavano così). Tutto testuale e ogni computer aveva un proprio sistema operativo. Dovevi imparare una dozzina di comandi, segnateli, ti dicevano. Allora: logarti, lanciare i programmi che usavi, stampare i risultati, slogarti. Ecco il problema era che i programmi richiedevano dei dati, sì avresti potuto inserirli interattivamente ma se erano tanti e poi tu sei lento e il tempo macchina è prezioso.

vicheatsheet

Uh! allora dovevi imparare a usare un editor. Avete presente ed? Sì c’è ancora, quasi mi ricordo tutti i comandi. Non è che fosse così davvero, ogni macchina aveva il suo, per esempio sul Prime i comandi erano simili ma non gli stessi. Poi sarebbe venuto vi (sta per visual, era diverso da quello di adesso, poi Emacs, grazie a RMS). Con l’editor ti preparavi il tuo (o i tuoi) file di dati, seguendo le specifiche tramandate sul retro di tabulati (i fogli della stampante), li controllavi e finalmente li davi in pasto al computer per l’elaborazione, il batch.

pipe

Poi a un certo punto le cose sono cambiate: è arrivato UNIX (allora si scriveva così). E Unix era diverso. I comandi erano molti di più ma soprattutto pieni di opzioni. C’erano i manuali (come il man che c’è ancora adesso, sia on- che off-line) ma risultavano incomprensibili se eri nuovo. Da lì l’idea che Unix era difficile. Errore! Dovevi solo impararlo e poi era una meraviglia.

pipes

Delle cose che prima avresti fatto con un programmino in Fortran (c’era solo quello) adesso potevi farlo con un comando. Magari lungo, complesso, pieno di segni misteriosi, i caratteri speciali. Sì perché c’era una meraviglia mai vista prima: la pipe che ti consentiva di concatenare i vari comandi.

turbovision

Le interfacce grafiche a finestre (WIMP) sarebbero venute molto dopo.

Il che non vuol dire che prima ce ne fossero, testuali. Per esempio su Prime c’erano i CPL (Command Process Language), un linguaggio di script, su Apollo c’era Dialog (anzi due versioni, prima che Apollo adottasse Unix e poi venisse comprato da HP e fagocitato). Con Unix si usava Tcl/tk (ma dopo, 1988 dice Wikipedia).
Intanto erano comparsi i personal computer, in genere con il Basic, si faceva tutto con il Basic. Poi il Mac e Windows. Ma prima c’era avevo avuto un lungo interludio con Turbo Vision della Borland.

Ecco questo, mica come oggi che si fa tutto con WIMP, “window, icon, menu, pointer.

Anzi è vecchio, Micro$oft dice che dobbiamo usare Metro, che non si chiama più Metro perché quella è la metropolitana.

tsou

E pensa te che quest’anno io ho contribuito a un grosso lavoro tutto (OK, quasi tutto) gestito con comandi. E poi c’è il mio amico Luigi Bit3Lux che continua a racontare come usare gli attrezzi di una volta, senza spaventarsi di quelli più feroci, come AWK, guarda qui.

Nostalgia II

OK, mi sta passando. È cominciato qui, poi ho trovato altro, sui miei ‘puters.

John Von Neumann e il MANIACNo, non così vecchio, dai!

Qui si trova qualcosa del Prime e qualcosa di Apollo. Una cosa che spiazza è che tra l’una e l’altra passano anni, cioè revisioni, e poi la memoria è quella che è.

peng

Non metto link, non so nemmeno se possa interessare a qualcuno, è sostanzialmente materiale alla rinfusa, come quello che si trova nel cassetto delle foto della nonna che poi te le racconta.

disc

Allora qualsiasi manuale si apriva con note come questa. Non sapevo mai se mi stavano confidando un segreto segretissimo o erano i soliti venditori…

routines

Poi dentro ci trovavi roba minacciosa: le antenate delle API.

9-1

Come queste. Mi raccomando nomi mnemonici (ma con lunghezza massima di 6 caratteri).

basic

L’inizio del declino. I nuovi arrivati avevano a casa il C64, il Vic20, l’Apple ][, lo Z80, l’Atari (i musicisti). Ma ragazzi, sul Prime no! (a parte Giorgio).

pw

Apollo, quando l’ho incontrato si presentava così, oggi quei monitor sono orrendi, allora…

w2

A me questo sembra Robert Redford, il periodo è quello.

ad

Questa era la veste dei manuali, quelli duraturi, per raccoglitori a tre anelli, certo.

1982

Questo lo conoscevo solo per sentito dire, 1982, allora c’erano le Lisp Machines. Notare il mouse (decisamente non ergonomico) e la tastiera, allora si usava spesso così.

OK, quanti brands sono spariti: Prime, Apollo, DEC, Symbolics, Olivetti, Sun, Silicon Graphics, …
E quanti non sono più quelli di una volta, HP, Sony, IBM si è trasformata in qualcosa di completamente differente, irriconoscibile, Apple, beh…
E forse anche il PC è superato da tablets, smartphones, e-readers e aggeggi consimili. (No non dirò che mi sento vecchio).
E per il software è sparita Borland.

Beh, basta così, niente più ricordi nostalgici.
Ma ferma le macchine: leggo proprio adesso un post che ha bisogno di una risposta. Prossimamente.

Lisp I Programmer’s Manual, 1960

lisp-3

OK, l’operazione Nostalgia continua. Oggi l’esame del manuale del LISP I, primo marzo 1960 (io frequentavo la seconda elementare, non ho partecipato).autoridove

LISP I is a programming system for the IBM 704 for computing with symbolics expressions. […] The system has a central core based on a class of recursive functions of symbolics expressions which should be studied first and if possible used before the more peripheral features are tried.

Basta, mi verrebbe voglia di copiare tutto 😀
Dunque la stessa macchina di cui ho già parlato per il FORTRAN I.
Nei riconoscimenti si da credito, tra l’altro, di idee provenienti dal Fortran.

C’è già apply (Russell e McCarthy), non è una funzione Lisp ma un operatore e il garbage collector (Edwards).

In 1. Introduction si dice che Lisp usa 12 KB dei 32 disponibili sul 704, corretto in 709.
Le funzioni incluse sono sia in assembler che in S-expressions (quelle usuali del Lisp).

Poi si parte con una serie di definizioni, quelle che si usano ancora adesso. E a p.6 si arriva a lambda di Church.
La trattazione è matematica, non l’ho studiata attentamente ma (non ci sono mate qui, vero?) a sentimento mi sembra OK.
Arriva così a definire le S-expressions (S per symbolics) formate da ., (, ), e un insieme infinito di simboli atomici.

s-expr
e qui saltano fuori le liste

listsOK, adesso le funzioni per operare sulle liste: CAR, CONS, CDR, ATOM, allora si usava tutto maiuscolo per parlare con il ‘puter.

Ci sono correzioni a matita, illeggibili. Per esempio a p.18 apply è cancellata sostituita da eval quote.

A p.23 troviamo 3. LISP PRIMER, che è il manuale vero e proprio del linguaggio, ma la trattazione matematica continua (sono teorici, che stanno inventando).

A p.37 troviamo
lpsdove si precisa

applye seguono esempi di semplificazione di espressioni logiche.
A p.40 si ha la definizione di funzione in Lisp, il capitolo mi risulta poco chiaro.

A p.50 4.5 The Program Feature
programArriviamo così a p.65 5. Running a LISP Program, come preparare il pacco di schede, e come lanciare il run. Come precedentemente precisato la base è l’operatore APPLY, nella forma apply[f;x;p] e il programma Lisp consiste nell’insieme di triplette f;x;p costituenti il deck (quelli di Digital chiamavano così il pacco di schede, non so se vale).
Le schede possono essere perforate dove si vuole (a differenza del Fortran) prima di colonna 73. E si può continuare su più schede, la fine è la parentesi chiusa (Fortran: tiè!).
Uno spazio è equivalente a una virgola (che presto sparirà) e spazi consecutivi sono ignorati.
Il pacco di schede Lisp dev’essere contenuto in quelle del batch, lo trovate nella stanza 26-265 nel cassetto etichettato “Utility Decks”.

Consiglio, per terminare il programma:

stop

Poi le indicazioni di come devono essere messi i nastri magnetici (tapes), lì all’MIT.

Seguono istruzioni su come gestire gli errori, la struttura delle liste (M- e S-expressions, M per Meta), i numeri float e altri esempi (funzioni Lisp).

In conclusione il linguaggio era chiaro al gruppo, l’implementazione ancora molto primitiva anche se per certe cose non sarebbe più cambiata (OK, quasi).

jmc
Io nel frattempo ero sempre impegnato con le suole elementari, mi mancavano ancora le quattro operazioni, le tabelline. Anche a leggere dovevo ancora perfezionarmi. Ma poi un giorno anch’io sarei arrivato al Lisp, tramite GEB di DHR, ma questa sarebbe un’altra storia, molto meno interessante e la copia dell’interprete Lisp che mi era stata passata non era, come dire, … ecco 😉

Fortran I per IBM 704

OK, non esattamente una novità. Ma la nostalgia


No non sono così vecchio, vedo questa roba per la prima volta, grazie a un tweet di un über-geek (secondo me dovrebbe bloggare, davvero).
Ne ho parlato qui.

Il manuale è The FORTRAN Automatic Coding system for the IBM 704 EDPM, dell’Applied Science Division and Programming Research Dept., New York, NY.


Intanto una nota OT: ho provato a leggerlo sul Kindle Fire, non è possibile, ci vuole un monitor decente. O avere un tablet che consenta di zoomare.

Il manuale è da leggere tutto per quelli come me. Non sono uno storico, anzi non so nemmeno come lavora uno storico, non sarò imparziale, sono solo alcune cose che mi sono venute in mente, personali.


A FORTRAN source program consists of a sequence of FORTRAN statements. There are 32 different types of statements, which are descibed in detail in the chapters which follows.

Si parte con un esempio, trovare il numero massimo di un array, non si usava ancora “Hello World!” allora.
Poi la definizione di costanti, variabili e array, chiamati subscripts. Per cui nel capitolo successivo (il terzo) si possono affrontare funzioni, espressioni e formule aritmetiche. Qui la prima sorpresa: il nome delle funzioni deve finire con F. E F finale è riservata alle funzioni. Altra anomalia (che come la precedente sparirà con la versione successiva) una funzione restituisce un intero se il nome inizia con X, contro la regola definita per le variabili, quella vigente tuttora.
Il capitolo 4 Control Statements è una rivelazione (per i giovani, io ho passato parecchi anni a lottare contro di esso). Indovinate perché!
Sì è tutto un giumpare (o si scrive jumpare?), tutti i controlli sono GO TO, anche gli IF.
OK, quasi tutti, ci sono anche i cicli (che da noi il for si chiama DO).
E lascio, non capireste voi giovani, roba come questa

Ecco, qui dovete ripassarvi cosa diceva il dr.prof. su come si scrive un programma, qui.

Allora se dovevi aggiornare un programma e non avevi il diagramma di flusso ti conveniva rifarlo, magari solo a blocchi ma senza mappa non ne uscivi fuori. I programmatori vecchi dei miei tempi continuavano a usare questo stile. Quando io ho cominciato le schede non si usavano (quasi) più, ma per dire una riga di programma si diceva una scheda.

OK, il cap. 5 Input-Output Statements racconta di perforatrici (di schede e nastri di carta), tamburi (antenati dei dischi), stampanti e nastri (magnetici, tapes). Tutta roba che voi umani…
Per contro, a parte il formato fisso in lettura ci sono parecchie cose ancora attuali, come la lettura degli arrays e l’istruzione FORMAT.

Il cap. 6 Specification Statements è rimasto attuale, tranne FREQUENCY che è sparita subito, fino al ’90. Poi è cambiato parecchio ma io me ne sono accorto solo l’anno scorso (dai era da tanto che non usavo il Fortran, perdonato?).

Segue 7. Miscellaneous Details About FORTRAN, con cose più o meno sensate (per come le vediamo oggi) e 8. Examples of FORTRAN Programming, presentati sui fogli per programmatori che si usavano allora (quelli ricchi, noi sfigati…).
Mancavano ancora le subroutines (procedure, sottoprogrammi, verranno introdotte nella versione 2) ma ci possono essere sottoprogrammi sul master tape. Poi, dai il C/C++ ancora adesso non le ha, cioè sì ma indistinguibili dalle funzioni.

Bon. Era la prima volta che usciva un linguaggio di programmazione diverso dall’assembler (lo so che si dovrebbe dire Assembly ma poi ti prendono per un originale). E secondo lo standard IBM macchina nuova == sistema operativo nuovo, soprattutto rigorosamente incompatibile con tutti i precedenti e quelli in corso di sviluppo di cui eri a conoscenza –OK, non davvero così ma l’impressione era “come se”.

È stato un successo. Tutto è nato di lì.

Due parole sulla macchina: IBM 704 su Wikipedia, come faremmo senza la Wiki?

Poi, intrigante, questo: Circuito di calcolo per il sistema IBM 704, a Milano, mi devo informare, atz! è in deposito. Ma chissà… 😉

Nostalgia – I

OK, poi magari mi passa. E poi, dai!, Go è noioso, solo un altro linguaggio. Ogni tanto –‘spetta, com’è che si diceva semel in anno…

E poi è stato al3hex


Non ha un blog, dovrebbe. Tipo ieri ti spara di seguito tre tweets fantabulosi, questi:


Ecco. Io ho cominciato a vedere, ci ho girato su un po’ ho trovato cose che pensavo non ci fossero più, alcune mai viste, altre invece sì, tanto tempo fa.

Può darsi, anzi probabile, che poi ne riparli (visto l’I nel titolo?) ma per adesso vi dico solo che ieri sera mi sono scorso il manuale del Fortran IV del Prime, ritrovato la coppia TNOU / TNOUA, le FUnits, i 2 modi di compilare…

E pensa te che c’è hanche un COMO di Magsav. Per chi non lo sapesse un como è quasi come un tee ma quasi completamente differente.

Poi ho iniziato a vedere il manuale del LISP I, serio, intrigante, forse ne riparlerò (visto l’I nel titolo?).

Da un’altra parte ho trovato un commento, questo


con errore! Si riferisce al mitico John William Poduska Sr, allora si chiamava Bill.

Bon, devo finire una roba per domani mattina. Questi sono i link:


Grazie al3hex 😀