Plankalkül - Plankalkül

Plankalkül
Paradigma Procedurale
Progettato da Konrad Zuse
Apparso per la prima volta 1948 ; 73 anni fa – concept pubblicato per la prima volta ( 1948 )
Principali implementazioni
Plankalkül-Compiler della FU Berlin nel 2000
Influenzato da
Begriffsschrift
influenzato
Superplan di Heinz Rutishauser ,
ALGOL 58

Plankalkül ( pronuncia tedesca: [plaːnkalkyːl] ) è un linguaggio di programmazione progettato per scopi ingegneristici da Konrad Zuse tra il 1942 e il 1945. È stato il primo linguaggio di programmazione di alto livello ad essere progettato per un computer.

Kalkül è il termine tedesco per un sistema formale, come in Hilbert-Kalkül , il nome originale del sistema di deduzione in stile Hilbert , quindi Plankalkül si riferisce a un sistema formale per la pianificazione.

Storia della programmazione

Nel campo della creazione di macchine di calcolo, Zuse era autodidatta e le sviluppò senza conoscere altre macchine di calcolo meccanico che esistevano già, sebbene in seguito (costruendo la Z3 ) si ispirò al libro di Hilbert e Ackermann sulla scuola elementare. logica matematica (cfr. Principi di logica matematica ). Per descrivere i circuiti logici, Zuse ha inventato il suo proprio sistema di schema e la notazione, che ha definito "combinatoria dei condizionali" ( tedesco : Bedingungskombinatorik ). Dopo aver terminato la Z1 nel 1938, Zuse scoprì che il calcolo che aveva ideato indipendentemente esisteva già ed era noto come calcolo proposizionale . Ciò che Zuse aveva in mente, tuttavia, doveva essere molto più potente (il calcolo proposizionale non è Turing-completo e non è in grado di descrivere anche semplici calcoli aritmetici). Nel maggio 1939 descrisse i suoi piani per lo sviluppo di quello che sarebbe diventato Plankalkül. Ha scritto quanto segue nel suo taccuino:

Quasi mezzo anno di graduale introduzione nella logica formale. Lì ho riscoperto molti dei miei pensieri precedenti. (combinatoria dei condizionali = calcolo proposizionale ; studio degli intervalli = teoria reticolare ). Ora ho in programma la creazione di "Calcolo dei piani". Ci sono una serie di concetti necessari per chiarire questo.

Seit etwa einem halben Jahr allmähliches Einführen in die formale Logik. Viele meiner früheren Gedanken habe ich dort wieder gefunden. (Bedingungskombinatorik = Aussagenlogik; Lehre von den Intervallen = Gebietenkalkül). Ich aereo jetzt die Aufsetzung des 'Plankalküls'. Hierzu sind eine Reihe von Begriffen zu klären.

—Taccuino di Konrad Zuse
Tavolo sulla casa a Hinterstein  [ de ] dove Zuse ha lavorato su Plankalkül

Mentre lavorava alla sua tesi di dottorato, Zuse sviluppò il primo sistema formale noto di notazione algoritmica in grado di gestire rami e cicli. Nel 1942 iniziò a scrivere un programma di scacchi a Plankalkül. Nel 1944, Zuse incontrò il logico e filosofo tedesco Heinrich Scholz , che espresse apprezzamento per l'utilizzo del calcolo logico da parte di Zuse . Nel 1945, Zuse descrisse Plankalkül in un libro inedito. Il crollo della Germania nazista , tuttavia, gli impedì di presentare il suo manoscritto.

A quel tempo gli unici due computer funzionanti al mondo erano l' ENIAC e l' Harvard Mark I , nessuno dei quali usava il compilatore, e l'ENIAC doveva essere riprogrammato per ogni compito cambiando la connessione dei cavi.

Sebbene la maggior parte dei suoi computer siano stati distrutti dalle bombe alleate, Zuse è riuscito a salvare una macchina, la Z4 , e a spostarla nel villaggio alpino di Hinterstein (parte di Bad Hindelang ).

Il primissimo tentativo di ideare un linguaggio algoritmico fu intrapreso nel 1948 da K. Zuse. La sua notazione era abbastanza generale, ma la proposta non ottenne mai la considerazione che meritava.

—  Heinz Rutishauser , creatore di ALGOL

Incapace di continuare a costruire computer, cosa proibita anche dalle potenze alleate, Zuse dedicò il suo tempo allo sviluppo di un modello e di un linguaggio di programmazione di livello superiore. Nel 1948 pubblicò un articolo nell'Archiv der Mathematik e lo presentò all'Annual Meeting del GAMM . Il suo lavoro non attirò molta attenzione. In una conferenza del 1957, Zuse espresse la speranza che Plankalkül, "dopo un po' di tempo come Bella Addormentata , possa ancora prendere vita". Ha espresso disappunto per il fatto che i designer di ALGOL 58 non abbiano mai riconosciuto l'influenza di Plankalkül sul proprio lavoro.

Plankalkül è stato pubblicato in modo più completo nel 1972. Il primo compilatore è stato implementato da Joachim Hohmann nella sua tesi del 1975. Altre implementazioni indipendenti seguirono nel 1998 e nel 2000 presso la Libera Università di Berlino .

Descrizione

Plankalkül ha fatto confronti con il linguaggio APL e con l' algebra relazionale . Include istruzioni di assegnazione, subroutine , istruzioni condizionali, iterazione, aritmetica in virgola mobile, array, strutture di record gerarchiche, asserzioni, gestione delle eccezioni e altre funzionalità avanzate come l' esecuzione mirata . Il Plankalkül fornisce una struttura dati chiamata grafo generalizzato ( verallgemeinerter Graph ), che può essere utilizzata per rappresentare strutture geometriche.

Plankalkül condivideva una notazione idiosincratica che utilizzava più righe con la Begriffsschrift di Frege del 1879 (che trattava di logica matematica ).

Alcune caratteristiche del Plankalkül:

  • solo variabili locali
  • le funzioni non supportano la ricorsione
  • supporta solo la chiamata per valore
  • i tipi compositi sono array e tuple
  • contiene espressioni condizionali
  • contiene un ciclo for e un ciclo while
  • nessun goto

Tipi di dati

L'unico tipo di dati primitivo nel Plankalkül è un singolo bit o booleano ( tedesco : Ja-Nein-Werte - valore sì-no nella terminologia Zuses). È indicato dall'identificatore . Tutti gli altri tipi di dati sono compositi e si formano dalla primitiva mediante "array" e "record".

Quindi, una sequenza di otto bit (che nell'informatica moderna potrebbe essere considerata come byte ) è indicata da , e la matrice booleana di dimensione da   è descritta da . Esiste anche una notazione abbreviata, quindi si potrebbe scrivere al posto di .

Il tipo potrebbe avere due possibili valori e . Quindi la sequenza a 4 bit potrebbe essere scritta come L00L, ma nei casi in cui tale sequenza rappresenta un numero, il programmatore potrebbe utilizzare la rappresentazione decimale 9.

Record di due componenti ed è scritto come .

Il tipo ( tedesco : Art ) in Plankalkül è composto da 3 elementi: valore strutturato ( tedesco : Struktur ), significato pragmatico ( tedesco : Typ ) e possibile restrizione sui possibili valori ( tedesco : Beschränkung ). I tipi definiti dall'utente sono identificati dalla lettera A con un numero, come - primo tipo definito dall'utente.

Esempi

Zuse ha usato molti esempi dalla teoria degli scacchi:

Coordinate della scacchiera (ha dimensioni 8x8 quindi 3 bit sono appena sufficienti)
quadrato della scacchiera (ad esempio L00, 00L denota e2 in notazione algebrica )
pezzo (ad esempio, 00L0 — re bianco)
pezzo su una scacchiera (ad esempio L00, 00L; 00L0 — re bianco su e2)
scacchiera (posizioni dei pezzi, descrive quale pezzo contiene ciascuno dei 64 quadrati)
stato del gioco (  — scacchiera,  — chi si muove,  — possibilità di arrocco (2 per il bianco e 2 per il nero), A2 — informazioni sulla cella su cui è possibile la mossa En passant

Identificatori

Gli identificatori sono caratteri alfanumerici con un numero. Esistono i seguenti tipi di identificatori per le variabili:

  • Valori di input ( tedesco : Eingabewerte, Variablen ) — contrassegnati da una lettera V.
  • Valori intermedi, temporanei ( tedesco : Zwischenwerte ) - contrassegnati con una lettera Z.
  • Constants ( tedesco : Constanten ) - contrassegnati con una lettera С.
  • Valori di output ( tedesco : Resultatwerte ) — contrassegnati con una lettera R.

Una variabile particolare di qualche tipo è identificata da un numero, scritto sotto il tipo. Per esempio:

, , ecc.

I programmi ei sottoprogrammi sono contrassegnati da una lettera P, seguita da un numero di programma (e facoltativamente da un sottoprogramma). Ad esempio , .

Il valore di output del programma salvato in variabile è disponibile per altri sottoprogrammi sotto l'identificatore e leggere il valore di quella variabile significa anche eseguire il relativo sottoprogramma.

Accesso agli elementi per indice

Plankalkül consente l'accesso a elementi separati della variabile utilizzando "component index" ( tedesco : Komponenten-Index ). Quando, ad esempio, il programma riceve input in una variabile di tipo (stato del gioco), allora  — fornisce lo stato della scacchiera,  — il pezzo sul quadrato numero i e il numero di bit j di quel pezzo.

Nei moderni linguaggi di programmazione, ciò sarebbe descritto da una notazione simile a V0[0], V0[0][i], V0[0][i][j](anche se per accedere a un singolo bit nei moderni linguaggi di programmazione viene generalmente utilizzata una maschera di bit ).

Sintassi bidimensionale

Poiché gli indici delle variabili sono scritti verticalmente, ogni istruzione Plankalkül richiede più righe per essere annotata.

La prima riga contiene il tipo di variabile, quindi il numero variabile contrassegnato con la lettera V ( tedesco : Variablen-Index ), quindi gli indici dei sottocomponenti variabili contrassegnati con K ( tedesco : Komponenten-Index ) e quindi ( tedesco : Struktur-Index ) contrassegnato con S, che descrive il tipo di variabile. Il tipo non è richiesto, ma Zuse nota che questo aiuta a leggere e comprendere il programma.

Nei tipi di linea e potrebbe essere abbreviato in e .

Esempi:

variabile V3 — elenco di coppie di valori di tipo
La riga K potrebbe essere saltata quando è vuota. Pertanto, questa espressione significa lo stesso di sopra.
Il valore di otto bit (indice 7), della prima coppia (indice 0), dell'elemento і-esimo della variabile V3, è di tipo booleano ( ).

Gli indici potrebbero essere non solo costanti. Le variabili potrebbero essere utilizzate come indici per altre variabili, e questo è contrassegnato da una linea, che mostra in quale indice del componente verrebbe utilizzato il valore della variabile:

Utilizzo della variabile come indice per un'altra variabile, in notazione Plankalül 2d Z5-esimo elemento della variabile V3. Equivalente all'espressione V3[Z5]in molti linguaggi di programmazione moderni.

Operazione di assegnazione

Zuse introdusse nel suo calcolo un operatore di assegnamento, sconosciuto in matematica prima di lui. Lo contrassegnò con « », e lo chiamò segno di resa ( tedesco : Ergibt-Zeichen ). L'uso del concetto di compito è una delle differenze chiave tra matematica e informatica.

Zuse ha scritto quell'espressione:

è analoga alla più tradizionale equazione matematica:

Ci sono affermazioni secondo cui Konrad Zuse inizialmente usò il glifo Ergibt-Zeichen.pngcome segno di assegnazione e iniziò a usarlo sotto l'influenza di Heinz Rutishauser . Knuth e Pardo ritengono che Zuse abbia sempre scritto , e ciò è stato introdotto dagli editori di «Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben» nel 1948. Alla conferenza ALGOL 58 a Zurigo, i partecipanti europei hanno proposto di utilizzare per l'assegnazione il carattere introdotto da Zuse, ma la delegazione americana ha insistito per . Ergibt-Zeichen.png:=

La variabile che memorizza il risultato di un'assegnazione ( l-value ) viene scritta a destra dell'operatore di assegnazione. La prima assegnazione alla variabile è considerata una dichiarazione.

Il lato sinistro dell'operatore di assegnazione viene utilizzato per l'espressione ( tedesco : Ausdruck ), che definisce quale valore verrà assegnato alla variabile. Le espressioni possono utilizzare operatori aritmetici, operatori booleani e operatori di confronto ( ecc.).

L'operazione di elevazione a potenza è scritta in modo simile all'operazione di indicizzazione, utilizzando le righe in notazione 2d:

Notazione a potenza in Plankalkül

Flusso di controllo

Terminologia

Zuse ha chiamato un singolo programma Rechenplan ("piano di calcolo"). Ha immaginato quello che ha chiamato un Planfertigungsgerät ("dispositivo di assemblaggio del piano"), che avrebbe automaticamente tradotto la formulazione matematica di un programma in una pellicola perforata leggibile dalla macchina .

Esempio

La notazione originale era bidimensionale. Per una successiva implementazione negli anni '90, è stata sviluppata una notazione lineare.

L'esempio seguente definisce una funzione max3(in una trascrizione lineare) che calcola il massimo di tre variabili:

P1 max3 (V0[:8.0],V1[:8.0],V2[:8.0]) → R0[:8.0]
max(V0[:8.0],V1[:8.0]) → Z1[:8.0]
max(Z1[:8.0],V2[:8.0]) → R0[:8.0]
END
P2 max (V0[:8.0],V1[:8.0]) → R0[:8.0]
V0[:8.0] → Z1[:8.0]
(Z1[:8.0] < V1[:8.0]) → V1[:8.0] → Z1[:8.0]
Z1[:8.0] → R0[:8.0]
END

Guarda anche

Appunti

Riferimenti

link esterno