Welche Funktionen haben zur Entwicklung von Pascal beigetragen?

17

Ich erstelle eine detaillierte Geschichte der Pascal-Sprache, und es fehlen einige Details.

Es gibt heute so viele Funktionen, die wir für selbstverständlich halten. Welche Merkmale haben maßgeblich zur Entwicklung von Pascal beigetragen, und warum waren sie von Bedeutung?

Ich suche nach Sprachfunktionen, nicht nach Plattform- oder Framework-Funktionen. So wie das Überladen von Operatoren oder Standardparametern, aber nicht die Linux-Unterstützung oder das neue Rich-Text-Widget.

Ich weiß, dass es einige verschiedene Varianten von Pascal gibt (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal usw.), und sie haben die gleichen Funktionen zu verschiedenen Zeiten und parallel eingeführt. Das ist ok. Ich betrachte die Pascal-Sprache als Ganzes und wann die wesentlichen Meilensteine ​​aufgetreten sind (Daten, Versionen usw.)

Jim McKeeth
quelle
@Jim Bei Ihrer Frage wurde eine Liste mit Datumsangaben angefordert, aber nicht nach dem Grund gefragt, warum jemand sie als wichtig erachtet. Ich habe Ihre Frage umformuliert, um diesen Aspekt zu erfassen, und habe sie erneut geöffnet.
2
Sie wissen, dass das Produkt Turbo Pascal die Pascal-Welt revolutioniert hat? Und die IBM PC-Welt auch? Zumal es feste Saiten gibt.
4
UCSD Pascal nicht vergessen! Es führte Bytecodes (p-Codes) ein, lange bevor Java in Suns Augen funkelte.
Macneil
1
+1 @Macneil UCSD p-Code und die Smalltalk VM sind die Dinge, die ich immer erkläre, wenn ich über modernen verwalteten Code (Java, .NET) spreche. Es macht Spaß, ein Déjà Vu zu haben, wenn man eine Menge 'moderner' Dinge sieht (wie zum Beispiel Appseine neue Variante von Client-Server).
Jeroen Wiert Pluimers
1
@Jeroen Pluimers: Ich bin auch amüsiert darüber, dass DVCS "neu" ist. Ich habe SCCS / Teamware bei Sun verwendet, Torvalds hat BitKeeper verwendet. Als ich CVS sah, wusste ich, dass es kaputt war (wie auch Torvalds). Als ich zum ersten Mal von SVN hörte, dachte ich: "Oh, sie haben es endlich behoben." Aber nein. Die OSS-Welt (und Joel!) Wurden durch CVS so beschädigt, dass sie glauben müssen, dass es eine neue Sache ist!
Macneil

Antworten:

10

Aus sprachgeschichtlicher Sicht war der wahrscheinlich größte Beitrag von Pascal die starke Typensicherheit. Dieser Kampf ist jetzt größtenteils vorbei - Pascals Seite hat gewonnen - und der industrielle Wendepunkt war Java. Aber für eine sehr lange Zeit wurde C vor Pascal von Leuten bevorzugt, die sich zu einem großen Teil als erwachsene Programmierer betrachteten: Die Leute wollten die Freiheit, ihre Zeiger so zu manipulieren, als wären sie ganze Zahlen. Praktische Implementierungen von Pascal hatten jedoch Lücken, wie Gewerkschaften, die das Diskriminanzfeld nicht dynamisch überprüften, oder hatten sogar eine vollständige Typisierung von Zeigern, bis sie alle außer C-Äquivalent waren (Turbo Pascal war eine davon).

Dies und eine Vereinfachung der komplizierten ALGOL 68-Spezifikation [1] könnten ein Ausgangspunkt sein.

[1] Lies mal den ALGOL 68-Bericht - er ist definitiv ein Produkt der 60er! Eine Seite im Internet erwähnt einige ihrer seltsamen Ausdrücke: "Bus-Token", "unsichtbare Produktionsbäume", "Urumgebung", "Inzest-Gewerkschaften", "Begriffe", "Protonotionen", "Metanotionen", "Hypernotionen", " Paranotionen usw.

Barry Kelly
quelle
15

Ich würde sagen, dass die beiden wichtigsten Triebkräfte in der Geschichte von Pascal waren:

  1. Typensicherheit: Pascal war maßgeblich an der Überzeugung beteiligt, dass die Typensicherheit in einer Sprache wichtig und kritisch ist.
  2. Compiler-Effizienz: Pascal wurde immer als Single-Pass-Sprache entwickelt und hat der Welt gezeigt, wie schnell ein Compiler sein kann, ohne auf Leistung zu verzichten. Die Dinge, die einen schnellen Compiler ausmachen, sind auch die Dinge, die eine gut gestaltete, einfach zu lesende Sprache ausmachen. Borlands Genie bestand darin, all das und auch die Leistung zu erbringen.
Nick Hodges
quelle
War PASCAL nicht auch die erste Sprache, in der der Compiler in PASCAL selbst geschrieben wurde? Eine andere bemerkenswerte Sache zu dieser Zeit war der P-Code - Code für eine virtuelle Pascal-Maschine. Um PASCAL auf einem anderen Rechner zu implementieren, musste lediglich ein Interpreter oder Assembler für den P-Code geschrieben werden.
Ingo
Ich möchte hinzufügen, dass die Typensicherheit auch die als Laufzeitprüfungen bekannten Mechanismen in den meisten Pascal-Compilern umfasste. (Fast?) Jeder Compiler hat sie, was sich grundlegend von dem von C-Compilern favorisierten LINT-Ansatz unterscheidet.
Marco van de Voort
11

Man muss wirklich zu den Ursprüngen zurückkehren - eine Geschichte von Niklaus Wirth finden. Pascal begann sein Leben als Unterrichtssprache. "Algorithmen + Datenstrukturen = Programme" ist ein guter Ausgangspunkt.

Zu dieser Zeit war Pascal viel einfacher als Algol 68 und PL / 1. Es erzwang Struktur und Deklaration und starke Typensicherheit, im Gegensatz zu Fortran4 (Fortran 77 verbesserte die Dinge ein wenig, aber man konnte immer noch furchtbar schnell und locker spielen). Und im Vergleich zu COBOL war es kurz, einfach und einfacher, Programme zu schreiben. (Hallo Welt in ca. 6 Zeilen statt 600).

Als es anfing, gab es in Pascal Dinge wie Zeichen-Arrays - das war es für das String-Handling. Die Dinge haben sich im Laufe der Jahre verbessert.

Wenn Sie wirklich in eine Pascal-Geschichte eintauchen möchten, müssen Sie einige Punkte berücksichtigen:

  • Wirths Original (Standard Pascal)
  • Erweiterungen von Digital Equipment Corp (DEC) auf dem Vax
  • das UCSD p-System (auf vielen Rechnern, insbesondere dem Apple-2)
  • Turbo Pascal
  • Apollo Domain Pascal (zum Schreiben des Domain / OS-Betriebssystems, auch Aegis genannt)
  • Turbo Pascal mit Objekten und Einheiten (Version 5.5 und höher. Bearbeiten: Ich habe gerade das TP 5.5 OOP PDF gefunden. )
  • Delphi

In den 1980er Jahren gab es ein riesiges Schneckenfest zwischen Pascal und C. In beiden Lagern war eine enorme Entwicklung und Aktivität zu beobachten.

In der Folge sind seltsame und wundervolle Dinge wie Bliss-32, Algol und PL / 1 so gut wie verschwunden - aber Ideen aus diesen haben sich in Pascal eingeschlichen.

BEARBEITEN: Zeichen-Arrays konnten gepackt werden, was einige spezielle Eigenschaften verlieh, aber wenn Sie das wollten, was wir jetzt als String-Handling kennen, mussten Sie es selbst erweitern.

schnell_nun
quelle
Im IIRC gab es eine kleine Menge an Sonderbehandlungen packed array[1..n] of char;, zB in Read (ln) und Write (ln)
Gerry
Ja, readln, writeln waren etwas Besonderes, da sie die Eingabe / Ausgabe einer variablen Anzahl von Zeichen handhaben konnten. Es gab in den späten 1980er Jahren auch ein wenig Staub auf sich, dass sie böse und sündig waren und das Sprachkonstrukt brachen, weil sie eine variable Anzahl von Parametern akzeptierten. Die Puristen hassten das. Der Rest von uns hat es einfach benutzt, ohne sich zu viele Gedanken darüber zu machen.
quick_now
Möglicherweise Modul- / Einheitensysteme aus der "anderen" Wirth-Sprache Modula2. (Obwohl dies indirekt über die daraus resultierenden Bemühungen, Pascal-Standards zu erreichen, möglich ist, wurde es schließlich zum Extended Pascal-Standard, allerdings mit anderer Syntax)
Marco van de Voort,
5

Objektorientierte Erweiterungen! Object Pascal war der größte (inoffizielle) Standardsprung mit der Veröffentlichung von Delphi (1) Mitte der 90er Jahre. Es ist schwierig, nur eines herauszufinden, aber der gesamte Kern des gesamten Objektmodells hat dazu beigetragen, die Sprache auf den neuesten Stand zu bringen. Leider wurde es bis heute nicht zu einem offiziellen einheitlichen Standard gemacht, dem alle Compiler hinsichtlich der Codierungssymmetrie entsprechen würden.

Zum Glück haben die Free Pascal-Projektentwickler den Delphi-Funktionen von Borland und Embarcadero durchaus Rechnung getragen. RemObjects sind weniger wichtig, haben aber zumindest Verbindungen zu Embarcadero unter Delphi Prism, sodass jede Abweichung von einem Standard (um die Sprache besser .NET-kompatibel zu machen) in hohem Maße dokumentiert wäre.

Jason McMillen
quelle
8
Objekte wurden mit Turbo Pascal 5.5
mcottle 29.07.11
1
Prozeduren und Funktionen waren standardmäßig statisch. Sie mussten das virtualSchlüsselwort verwenden, um sie durch Unterklassen überschreibbar zu machen.
1
Virtuell ist in Delphi kein reserviertes Wort. Die Liste der von Delphi reservierten Wörter und Prism-Schlüsselwörter finden Sie hier und hier .
David ich
2
Objekte wurden von Apple in Pascal eingeführt. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster
2
@Carl - Ich hatte vergessen, dass die klassischen Macs in Pascal programmiert waren, und ich wusste nicht, dass es sich um eine OO-Version von Pascal handelte, die von Wirth mitentwickelt wurde.
mcottle
4

Nur ein oder zwei Dinge, an die ich mich erinnere, als ich Pascal vor langer Zeit mit MS-DOS verwendet habe:

Turbo Pascal führte in den 80er Jahren mehr oder weniger eine Art IDE ein (und die Kompilierungsleistung wurde im Vergleich zu UCSD Pascal erheblich gesteigert)

Irgendwie änderte Borland Mitte der 90er Jahre den Namen von Turbo in Borland Pascal . In einem ersten Schritt wurden die Units eingeführt, die es ermöglichten, große Projekte in separate Zusammenstellungseinheiten aufzuteilen.

Später kamen auch objektorientierte Programme hinzu.

thorsten müller
quelle
Turbo Pascal war das einfache Produkt. Borland Pascal hatte eine
2
Einheiten wurden in Turbo Pascal (v4 IIRC) eingeführt. Diese wurden zu .tpu-Dateien (Turbo Pascal Unit) kompiliert, die die Vorgänger der aktuellen DCU-Dateien waren. Ich glaube, sie basierten auf Konzepten aus Wirths Modula-2-Sprache.
Gerry
1
ISTR das UCSD p-System hatte auch Einheiten, aber ich weiß nicht, ob sie vor Turbo Pascal waren oder nicht.
TMN
Interessanterweise bot die "BASIC PROGRAMMING" -Kassette für den Atari 2600 1980 einen Programmierbildschirm, der einem CodeView-Bildschirm überraschend ähnlich war. Man könnte das Programm (mit hervorgehobenem aktuellen Ausführungspunkt) in einem Bereich des Bildschirms anzeigen, die Werte von Variablen in einer Sekunde und jede Ausgabe von "print" -Anweisungen in einer dritten. Leider war der für den Programmierer verfügbare Arbeitsspeicher so begrenzt, dass er nicht nur auf "Spielzeug" -Anwendungen beschränkt war - er war nicht einmal ein Spielzeug. Immer noch eine interessante technische Leistung für eine Plattform mit ...
Supercat
... satte 128 Bytes RAM (einschließlich 24 Bytes, die für Bildschirmzeiger benötigt wurden) und mit dem gesamten Entwicklungssystem, das in 4 KB ROM passt (einschließlich der Zeichenformen). Angesichts dieser Einschränkungen war es ein hübscher Trick, den Benutzern 64 Byte RAM zu ermöglichen, ihr Programm, ihre Variablen und die Ausgabe zu speichern. Schade, dass Atari Basic Programming herausgebracht hat, bevor sie ihren "SARA" -Chip entwickelt haben (der den RAM von 128 Bytes auf 256 verdoppelt hat). 128 Bytes RAM für das Programm und 64 für Variablen und Ausgaben zu verwenden, wäre viel besser gewesen, als 64 Bytes für alles zu haben.
Supercat
4

Einer der wichtigsten Evolutionsschritte in Pascal war der richtige Begriff von Strings. ISO 7185 ("Standard Pascal") hatte sie nicht, was irgendwie peinlich ist. Alle echten Programmierer brauchten sie jedoch, und funktionsfähige Pascal-Implementierungen (wie Borland / Turbo Pascal) stellten sie zur Verfügung.

MSalters
quelle
4

Rückblick auf Delphis Pascal-Sprachinnovationen - Ich würde das Property-, Method-, Event- (PME) -Modell und den Abschnitt "Published" für Klassen hinzufügen. Das machte nativen Code benutzerfreundlich und ermöglichte die Erweiterung des Komponentenaufbaus. Die Komponenten erfüllten Brad Cox 'Versprechen von Software-ICs.

David I.
quelle
3

Der Kampf zwischen vielen Geschmacksrichtungen von Pascal in den 80er und frühen 90er Jahren.

Sie hatten Apple Pascal , Microsoft Pascal und QuickPascal und Turbo Pascal .

Alle haben Object Pascal auf die eine oder andere Weise eingeführt (QuickPascal 1.0 und Turbo Pascal 5.5 im selben Zeitrahmen). Apple, weil sie es für ihre Plattform benötigten, Microsoft und Borland, weil OO "cool" wurde (dann starb QuickPascal bald danach und Turbo Pascal 6.0 fügte ein vernünftiges OO-Framework mit dem Namen Turbo Vision hinzu ).

Rudy Velthuis ist diesbezüglich in seinem Forumsbeitrag ziemlich vollständig .

Sie können ein ISO-Image mit DOS 6.22 und einigen DOS Pascal-Compilern aus dieser Zeit herunterladen .

Jeroen Wiert Pluimers
quelle
2

Ich denke, die Einführung von Interfaces (in Delphi 3 IIRC) war sehr wichtig, um es zu einer modernen objektorientierten Sprache zu machen.

François
quelle
Beachten Sie, dass die Schnittstellenvererbung an sich nicht OO ist, sondern als eine der wahrsten Formen des Polymorphismus gilt. Da es dasselbe VMT- Format wie COM verwendet , wurde die Interaktion mit COM erheblich vereinfacht (Menschen sind sich einig, dass dies eine gute oder eine schlechte Sache ist <g>).
Jeroen Wiert Pluimers
2

Ich werde der Mischung anonyme Methoden und Generika hinzufügen.

gabr
quelle
1
Vielleicht auf die neuesten Versionen von Delphi. Ich habe Delphi 7 verwendet, also natürlich nie anonyme Methoden oder Generika!
Frank Shearar
2

Für mich waren die beiden größten Dinge (nach einigen anderen Sprachen wie C ...) die Unempfindlichkeit gegenüber Groß- und Kleinschreibung und die Geschwindigkeit des Compilers.

Und danach ist die Tatsache, dass es einfacher ist, mit der finnischen Tastatur zu schreiben, weil ich nicht ständig die {} oder andere Tasten brauche, die schwer zu erreichen sind ...

Ich bin seit Delphi2 an Bord, habe aber D1 ein paar Jahre in der Arbeit benutzt ...

Tommi Prami
quelle
1

Beginnen Sie mit "Structured Programming" von Dahl, Dijkstra und Hoare. Der Abschnitt von Dijkstra ist auch heute noch von grundlegender Bedeutung. Der Abschnitt von Tony Hoare über Datenstrukturierung hat PASCAL in hohem Maße vorbereitet. (Dahls Abschnitt sprach darüber, was letztendlich objektorientierte Programmierung wurde. Er beschrieb, was in Simula 67 zu Klassen wurde.)

Schauen Sie sich ALGOL-W an, Wirths Implementierung einer Variante von ALGOL-60.

Sie müssen zu diesem Zeitpunkt auch über PL / I und den IBM 360 Link Editor (Linker) informiert sein. Es war ein Wunder der Allgemeinheit, mit dem kleinen Problem, dass es im Januar in Juneau, Alaska, langsamer lief als Melasse. PASCAL wurde speziell entwickelt, um aus Gründen der Geschwindigkeit in einem Durchgang kompiliert und verknüpft zu werden. (Es hat geholfen, dass die Sprache auf einem CDC 6400 Junior-Supercomputer mit viel Speicher zum Leben erweckt wurde, wodurch ein One-Pass-Compiler praktisch wurde.)

Es gab zwei Hauptversionen von PASCAL von der ETH Zürich. Die Sprache, die derzeit jeder als PASCAL kennt, war PASCAL2, die zweite Version.

John R. Strohm
quelle