Quali caratteristiche hanno contribuito all'evoluzione di Pascal?


17

Sto compilando una storia dettagliata del linguaggio Pascal e ci sono alcuni dettagli che mi mancano.

Ci sono così tante funzionalità oggi che diamo per scontate. Quali caratteristiche hanno contribuito in modo significativo all'evoluzione di Pascal e perché sono state significative?

Sto cercando funzionalità linguistiche, non funzionalità di piattaforma o framework. Così come sovraccarico dell'operatore o parametri predefiniti, ma non supporto Linux o nuovo widget Rich Text.

So che ci sono alcuni gusti diversi di Pascal (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal, ecc.) E hanno introdotto le stesse funzionalità in momenti diversi e in parallelo. Va bene. Sto osservando la lingua pasquale nel suo insieme e quando si sono verificati i traguardi significativi (date, versioni, ecc.)


@Jim La tua domanda ha richiesto un elenco di date, ma non ha chiesto input sul perché qualcuno le consideri significative. Ho riformulato la tua domanda per catturare quell'aspetto e l'ho riaperta.

2
Sai che il prodotto Turbo Pascal ha rivoluzionato il mondo Pascal? E anche il mondo dei PC IBM, in realtà? Soprattutto perché ha riparato le stringhe.

4
Non dimenticare UCSD Pascal! Introduceva bytecode (codici-p), molto prima che Java fosse un luccichio negli occhi di Sun.
Macneil,

1
+1 @Macneil UCSD p-Code e Smalltalk VM sono le cose che spiego sempre quando si parla di codice gestito moderno (Java, .NET). È divertente avere un déjà vu quando si vedono un sacco di cose "moderne" (come Apps, che è solo un nuovo sapore di client-server).
Jeroen Wiert Pluimers,

1
@Jeroen Pluimers: Sono anche divertito da questo discorso sul DVCS come "nuovo". Ho usato SCCS / Teamware presso Sun, Torvalds ha usato BitKeeper. Quando ho visto CVS, ho saputo che era rotto (come ha fatto Torvalds). Quando ho sentito parlare per la prima volta di SVN, ho pensato "oh, alla fine l'hanno risolto". Ma no. Il mondo OSS (e Joel!) Sono stati così danneggiati dal CVS che ha fatto tutto di male, hanno bisogno di credere che sia una novità!
Macneil,

Risposte:


10

Dal punto di vista storico linguistico, probabilmente il maggior contributo di Pascal è stata la forte sicurezza dei tipi. Quella battaglia è per lo più finita ora - la squadra di Pascal ha vinto - e il punto di svolta industriale era Java. Ma per molto tempo, C è stato favorito prima di Pascal da persone che si consideravano programmatori cresciuti in gran parte per questo: le persone volevano la libertà di manipolare i loro puntatori come se fossero numeri interi. Le implementazioni pratiche di Pascal avevano scappatoie, tuttavia, come i sindacati che non controllavano dinamicamente il campo discriminante, o avevano persino una completa tipografia di puntatori al punto di essere tutti tranne C equivalenti (Turbo Pascal era uno di questi).

Questo, e una semplificazione della complicata specifica ALGOL 68 [1], potrebbe essere un punto di partenza.

[1] Prova a leggere il rapporto ALGOL 68 qualche volta - è sicuramente un prodotto degli anni '60! Un sito sul web menziona alcuni dei suoi strani termini: "token bus", "alberi di produzione invisibili", "ambienti primordiali", "unioni incestuose", "nozioni", "protonzioni", "metanotion", "hypernotions", " paranotion ', ecc.


15

Direi che le due forze motrici più importanti nella storia di Pascal sono state:

  1. Sicurezza del tipo: Pascal è stato fondamentale nel creare la convinzione che la sicurezza del tipo sia importante e critica in una lingua.
  2. Efficienza del compilatore: Pascal è sempre stato progettato come una lingua a passaggio singolo e ha mostrato al mondo quanto velocemente può essere un compilatore senza rinunciare alla potenza. Le cose che rendono un compilatore veloce sono anche le cose che rendono un linguaggio ben progettato e di facile lettura. Il genuis di Borland era nel fornire tutto ciò e anche le prestazioni.

PASCAL non è stata anche la prima lingua in cui il compilatore è stato scritto in PASCAL stesso? Un'altra cosa notevole a quel tempo era il codice P - codice per una macchina pascal virtuale. Tutto quello che si doveva fare per implementare PASCAL su una macchina diversa era scrivere un interprete o un assemblatore per il codice P.
Ingo,

Vorrei aggiungere che la sicurezza del tipo includeva anche i meccanismi noti come controlli di runtime nella maggior parte dei compilatori pascal. (Quasi?) Ogni compilatore li ha, che è fondamentalmente diverso dall'approccio LINT preferito dai compilatori C.
Marco van de Voort,

11

Devi davvero tornare alle origini: trova un po 'di storia di Niklaus Wirth. Pascal ha iniziato la sua vita come lingua di insegnamento. "Algorithms + Data Structures = Programs" è un buon punto di partenza.

All'epoca, Pascal era molto più semplice di Algol 68 e PL / 1. Ha costretto la struttura e la dichiarazione e la forte sicurezza dei tipi, a differenza di Fortran4 (Fortran 77 ha migliorato un po 'le cose lì, ma si poteva ancora giocare terribilmente veloce-sciolto). E rispetto a COBOL è stato breve, semplice e facile scrivere programmi. (Ciao mondo in circa 6 righe invece di 600).

Quando ebbe origine, c'erano cose come le matrici di caratteri in Pascal - era per la gestione delle stringhe. Le cose sono migliorate nel corso degli anni.

Se vuoi davvero approfondire una storia di Pascal, alcuni punti che devi prendere in considerazione:

  • Wirth's original (Standard Pascal)
  • estensioni di Digital Equipment Corp (DEC) su Vax
  • il sistema UCSD p (su molte macchine ma in particolare l'Apple-2)
  • Turbo Pascal
  • Apollo Domain Pascal (utilizzato per scrivere il sistema operativo Domain / OS, chiamato anche Aegis)
  • Turbo Pascal con oggetti e unità (versione 5.5 e successive. Modifica: appena trovato il PDF OOP TP 5.5 )
  • Delphi

Negli anni '80 c'è stata una grande festa delle lumache tra Pascal e C. C'era una grande quantità di sviluppo e attività in corso in entrambi i campi.

Di conseguenza, cose strane e meravigliose come Bliss-32, Algol e PL / 1 sono praticamente scomparse - ma idee da queste si sono fatte strada in Pascal.

EDIT: potrebbero essere impacchettati array di caratteri che conferivano alcune proprietà speciali, ma se volevi quello che ora conosciamo come gestione delle stringhe, dovevi coltivarlo da solo.


IIRC c'era una piccola quantità di gestione speciale per packed array[1..n] of char;, ad esempio in Read (ln) e Write (ln)
Gerry

Sì, readln, writeln erano un po 'speciali in quanto potevano gestire l'input / output di un numero variabile di caratteri. C'è stato anche un po 'di confusione alla fine degli anni '80 sul fatto che fossero malvagi e peccaminosi e infrangessero il costrutto del linguaggio perché accettavano un numero variabile di parametri. I puristi odiavano questo. Il resto di noi lo ha appena usato senza preoccuparsene troppo.
quick_now

Forse i moduli / unità di sistema dell '"altro" linguaggio Modula2 di Wirth. (Anche se forse indiretto attraverso i conseguenti sforzi per ottenerlo in standard Pascal, ha finalmente reso lo standard Extended Pascal, anche se con una sintassi diversa)
Marco van de Voort

5

Estensioni orientate agli oggetti! Object Pascal è stato il più grande (non ufficiale) salto di standard con l'uscita di Delphi (1) a metà degli anni '90. È difficile sceglierne solo uno, ma l'intero nucleo del modello a oggetti nel suo insieme ha contribuito a portare il linguaggio allo stato moderno. Purtroppo fino ad oggi non è stato trasformato in un unico standard unificato ufficiale al quale tutti i compilatori si conformerebbero per la simmetria del codice.

Per fortuna gli sviluppatori del progetto Free Pascal sono stati abbastanza accomodanti con le funzionalità aggiunte a Delphi sia da Borland che da Embarcadero. RemObjects non tanto, ma almeno ha legami con Embarcadero sotto Delphi Prism, quindi qualsiasi deviazione da uno standard (per rendere il linguaggio più conforme a .NET) sarebbe altamente documentata.


8
Gli oggetti sono stati introdotti in Pascal con Turbo Pascal 5.5
mcottle

1
le procedure e le funzioni erano di default statiche. È stato necessario utilizzare la virtualparola chiave per renderli sostituibili da sottoclassi.

1
Virtual non è una parola riservata in Delphi. L'elenco delle parole riservate di Delphi e delle parole chiave Prism è disponibile qui e qui .
David I,

2
Gli oggetti sono stati introdotti in Pascal da Apple. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster

2
@Carl - Avevo dimenticato che i classici Mac erano programmati in Pascal e non sapevo che fosse una versione OO di Pascal co-creata da Wirth.
mcottle

4

Solo una o due cose che ricordo dall'uso di Pascal molto tempo fa con MS-DOS:

Turbo Pascal ha più o meno introdotto una sorta di IDE negli anni '80 (e le prestazioni di compilazione hanno avuto un grande impulso rispetto all'UCSD Pascal

In qualche modo verso la metà degli anni '90 Borland cambiò il nome da Turbo a Borland Pascal . Come primo passo sono state introdotte le Unità, che hanno permesso di suddividere grandi progetti in unità di compilazione separate.

Successivamente hanno aggiunto anche la programmazione orientata agli oggetti.


Turbo Pascal era il prodotto semplice. Borland Pascal aveva MOLTE cose extra come assemblatori ecc.

2
Le unità sono state introdotte in Turbo Pascal (v4 IIRC). Questi sono stati compilati in file .tpu (unità turbo pascal), che erano i predecessori degli attuali file dcu. Credo che fossero basati su concetti tratti dal linguaggio Modula-2 di Wirth.
Gerry,

1
ISTR anche il sistema p UCSD aveva unità, ma non so se hanno preceduto Turbo Pascal o no.
TMN,

È interessante notare che la cartuccia "PROGRAMMAZIONE DI BASE" per l'Atari 2600 ha fornito nel 1980 una schermata di programmazione che era sorprendentemente simile a una schermata CodeView; si potrebbe visualizzare il programma (con l'attuale punto di esecuzione evidenziato) in un'area dello schermo, i valori delle variabili in un secondo e qualsiasi output delle istruzioni "print" in un terzo. Sfortunatamente, la quantità di RAM disponibile per il programmatore era così limitata che non si limitava alle applicazioni "giocattolo", non era nemmeno un giocattolo. Ancora un risultato tecnico interessante per una piattaforma con ...
supercat

... ben 128 byte di RAM (inclusi 24 byte richiesti per i puntatori dello schermo) e con l'intero sistema di sviluppo che si adatta a 4K di ROM (comprese le forme dei caratteri). Dati questi vincoli, consentire agli utenti 64 byte di RAM di contenere il loro programma, le variabili e l'output è stato un trucco piuttosto accurato. Peccato che Atari abbia rilasciato la programmazione di base prima di sviluppare il suo chip "SARA" (che ha raddoppiato la RAM da 128 byte a 256). Essere in grado di usare 128 byte di RAM per il programma più 64 per variabili e output sarebbe stato molto meglio che avere 64 byte per tutto.
supercat

4

Uno dei passi evolutivi fondamentali in Pascal era la nozione corretta di stringhe. ISO 7185 ("Standard Pascal") non li aveva, il che è un po 'imbarazzante. Tuttavia, tutti i veri programmatori ne avevano bisogno e le implementazioni Pascal praticabili (come Borland / Turbo Pascal) le fornivano.


4

Ripensando alle innovazioni del linguaggio Pascal di Delphi, aggiungerei il modello Proprietà, Metodo, Evento (PME) e la sezione "Pubblicato" per le lezioni. Ciò ha reso possibile il codice nativo, facile da usare ed estendere la costruzione dei componenti. Components ha rispettato la promessa di Brad Cox di IC software.



3

La lotta tra molti sapori di Pascal negli anni '80 e nei primi anni '90.

Avevi Apple Pascal , Microsoft Pascal e QuickPascal e Turbo Pascal .

Tutti hanno introdotto Object Pascal in un modo o nell'altro (QuickPascal 1.0 e Turbo Pascal 5.5 nello stesso lasso di tempo). Apple perché lo richiedevano per la loro piattaforma, Microsoft e Borland perché OO stava diventando "cool" (poi QuickPascal morì poco dopo e Turbo Pascal 6.0 aggiunse un ragionevole framework OO chiamato Turbo Vision ).

Rudy Velthuis è abbastanza completo su questo nel suo post sul forum .

È possibile scaricare un'immagine ISO con DOS 6.22 e alcuni compilatori DOS Pascal di quell'epoca .


2

Penso che l'introduzione di interfacce (in Delphi 3 IIRC) sia stata molto importante per renderlo un moderno linguaggio orientato agli oggetti.


Si noti che l' ereditarietà dell'interfaccia non è OO in sé, ma è considerata una delle forme più vere di polimorfismo. Dato che condivideva lo stesso formato VMT di COM , ha reso molto più semplice l'interazione con COM (le persone hanno ampie opinioni su ciò che è positivo o negativo <g>).
Jeroen Wiert Pluimers,

2

Aggiungerò metodi anonimi e generici al mix.


1
Alle versioni più recenti di Delphi, forse. Ho usato fino a Delphi 7, quindi ovviamente non ho mai usato metodi anonimi o generici!
Frank Shearar,


2

Per me le due cose più importanti (dopo alcune altre lingue come C ...) erano l'insensibilità del case e la velocità del compilatore.

E dopo questo è il fatto che è più facile scrivere con la tastiera finlandese, perché non ho bisogno costantemente del {} o di altri tasti che è difficile da raggiungere ...

Sono a bordo da Delphi2 ma ho usato D1 in lavoro un paio d'anni ...


1

Inizia con "Programmazione strutturata" , di Dahl, Dijkstra e Hoare. La sezione di Dijkstra è fondamentale, anche oggi. La sezione di Tony Hoare sulla strutturazione dei dati ha gettato gran parte delle basi per PASCAL. (La sezione di Dahl parlava di ciò che alla fine divenne una programmazione orientata agli oggetti. Descrisse ciò che divenne classi in Simula 67.)

Guarda in ALGOL-W, l'implementazione di Wirth di una variante di ALGOL-60.

È inoltre necessario conoscere PL / I e l'editor di collegamenti IBM 360 (linker) al momento. È stata una meraviglia di generalità, con il piccolo problema che ha funzionato più lentamente della melassa a gennaio a Juneau, in Alaska. PASCAL è stato appositamente progettato per essere compilato e collegato in un unico passaggio, per la velocità. (Ha aiutato il fatto che la lingua abbia preso vita su un supercomputer CDC 6400 junior, con molta memoria, rendendo pratico un compilatore a un passaggio.)

In realtà c'erano due versioni principali di PASCAL dell'ETH di Zurigo. La lingua che tutti attualmente conoscono come PASCAL era in realtà PASCAL2, la seconda versione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.