1 Punkte von GN⁺ 2024-09-27 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-09-27
Hacker-News-Kommentare
  • Habe 2011 ein iterator-gesteuertes for geschrieben. Damals stellte ich mir vor, wie es in den C++-Standard aufgenommen würde

  • Besitze das High C/C++ Language Reference

  • Funktionen, die D (oder Das BetterC) bietet:

    • Unterstriche in Literalen sind möglich
    • Case-Bereiche können angegeben werden
    • Benannte Argumente sind möglich
    • Verschachtelte Funktionen sind möglich
    • Statische verschachtelte Funktionen sind möglich
    • Bietet generatorähnliche Funktionen
  • Der C-Compiler lcc-win hat Operator Overloading, Standardargumente für Funktionen und Funktionsüberladung hinzugefügt

  • Der 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-extensions und bietet unter anderem die automatische Umwandlung von Strukturzeigern in anonyme Felder

  • Die 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 ¥n statt \n enden, liegt an der Shift-JIS-Codepage

  • Die 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 beeindruckend

  • Besonders 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