Die verlorenen Spracherweiterungen von MetaWares High C Compiler
C-Compiler in den 1980er Jahren
- In den 1980er Jahren konkurrierten viele kleine Unternehmen miteinander und boten verschiedene Spracherweiterungen an.
- Phar Lap entwickelte einen DOS-Extender, der den 32-Bit-80386-Prozessor nutzen konnte, und MetaWare portierte dafür den High-C-Compiler.
- Fujitsu integrierte den DOS-Extender von Phar Lap in die FM-TOWNS-Plattform, und High C wurde zum Standard-C-Compiler dieser Plattform.
Die einzigartigen Spracherweiterungen von High C
- High C enthielt nicht nur DOS-spezifische Erweiterungen, sondern auch eine Vielzahl nutzerorientierter Spracherweiterungen.
- Einige Funktionen wurden erst Jahrzehnte später in offizielle Standards aufgenommen, andere existieren bis heute weder in C noch in C++.
Unterstriche in numerischen Literalen
- Zur besseren Lesbarkeit langer numerischer Literale konnten Unterstriche zur Trennung verwendet werden.
- C++ führte diese Funktion in C++14 ein, C in C23.
Benannte Argumente
- Bei Funktionsaufrufen mit vielen Argumenten konnten die Argumente mit Bezeichnungen versehen werden.
- Dies ähnelt einem beliebten Feature von Python; wenn Argumentbezeichnungen vorhanden sind, können Argumente unabhängig von ihrer Reihenfolge angegeben werden.
- In Standard-C oder C++ gibt es diese Funktion noch nicht.
Bereichs-Cases
- Es wurde eine Funktion bereitgestellt, mit der sich wie in Pascal Wertebereiche abgleichen lassen.
- In Standard-C oder C++ gibt es diese Funktion nicht.
Verschachtelte Funktionen
- Innerhalb einer Funktion konnten weitere Funktionen verschachtelt deklariert werden.
- Verschachtelte Funktionen konnten als Typ „full function value“ deklariert werden, was wie eine nicht entweichende Closure funktioniert.
- Dies bot eine vollständigere Implementierung als die Erweiterung für verschachtelte Funktionen in GCC.
- In Standard-C gibt es bis heute keine offizielle Funktion für verschachtelte Funktionen.
Generatoren
- Unterstützt wurden Generator-Koroutinen im Python-Stil.
- Generatorfunktionen konnten mehrfach Werte erzeugen, und mit einer neuen
for-Schleifensyntax ließ sich jeder Wert der Reihe nach verarbeiten.
- Dies erlaubte komplexe Wechselwirkungen mit der Funktion für verschachtelte Funktionen.
- Es ist unwahrscheinlich, dass Standard-C diese Funktion integrieren wird.
Zusammenfassung von GN⁺
- MetaWares High-C-Compiler bot in den 1980er Jahren vielfältige Spracherweiterungen, die die Ausdruckskraft der Sprache C deutlich erhöhten.
- Einige Funktionen wurden erst Jahrzehnte später in offizielle Standards aufgenommen, andere existieren bis heute weder in C noch in C++.
- Fortgeschrittene Funktionen wie Generatoren und verschachtelte Funktionen sind selbst in vielen heutigen Programmiersprachen schwer zu finden.
- Der Artikel hilft dabei, die Geschichte und Entwicklung der Sprache C zu verstehen, und bietet interessante Einblicke in das Design von Programmiersprachen.
1 Kommentare
Hacker-News-Kommentare
Habe 2011 ein iterator-gesteuertes
forgeschrieben. Damals stellte ich mir vor, wie es in den C++-Standard aufgenommen würdeBesitze das High C/C++ Language Reference
Funktionen, die D (oder Das BetterC) bietet:
Der C-Compiler
lcc-winhat Operator Overloading, Standardargumente für Funktionen und Funktionsüberladung hinzugefügtDer Plan-9-C-Compiler hat mehrere Spracherweiterungen eingeführt, von denen einige in den C-Standard aufgenommen wurden
GCC unterstützt derzeit das Flag
-fplan9-extensionsund bietet unter anderem die automatische Umwandlung von Strukturzeigern in anonyme FelderDie Person, die diese Funktionen eingeführt hat, war ihrer Zeit weit voraus. Schade nur, dass sie keinen Einfluss auf den Standard hatten
Das Thema wurde zuvor bereits auf Hacker News behandelt
Jemand fragt sich, ob es eine PDF-Kopie gibt
Dass die String-Literale im Beispielcode mit
¥nstatt\nenden, liegt an der Shift-JIS-CodepageDie Generatoren erinnern an Rusts Frage nach interner/externer Iteration und an
try_fold()Die Typografie des Buchs wirkt zugleich schön und schrecklich
Ich kenne mich mit japanischer Notation oder Kerning-Regeln nicht gut aus, aber es sieht so aus, als hätte man eine proportional gesetzte Schrift in Zellen mit fester Breite gezwungen
Schön, dass die Codebeispiele nicht in 8-Punkt-Schrift gesetzt sind
Jemand fragt sich, ob das Buch auf Japanisch geschrieben oder erst auf Englisch verfasst und dann ins Japanische übersetzt wurde
Wenn es von Fujitsu stammt, wurde es wahrscheinlich auf Japanisch geschrieben. Die Qualität des Englischen in den
printf-Anweisungen und Code-Kommentaren eines Nicht-Muttersprachlers ist beeindruckendBesonders die generatorbezogenen Funktionen waren für die damalige Zeit ihrer Zeit weit voraus
Vielleicht war das nur möglich, weil Fujitsu den Standardisierungsprozess nicht durchlaufen musste. Das ist aber auch der Grund, warum diese Erweiterungen im modernen C/C++ wiederentdeckt und neu erfunden wurden