C--

C--
C--
Paradigmen: imperativ
Erscheinungsjahr: 1997
Entwickler: Simon Peyton Jones; Norman Ramsey
Typisierung: statisch, schwach
Einflüsse: C

C-- (Aussprache: "C minus minus") ist eine sehr C-ähnliche Programmiersprache bzw. Zwischensprache zur Erzeugung durch Compiler. Die Erfinder von C--, Simon Peyton Jones und Norman Ramsey, beide Forscher auf dem Gebiet der funktionalen Programmierung, erfanden C-- mehr zur Verwendung als Zwischensprache zum Maschinencode für Compiler von Höchstsprachen, als "normal programmierte" Sprache. Anders als andere Zwischensprachen besteht C-- aus ASCII-Text, nicht Bytecode (z.B. der Zwischencode von Java) oder anderen Binärformaten.

Inhaltsverzeichnis

Design und Geschichte

C-- ist eine "portable Assemblersprache", die dafür bestimmt ist, die Implementierung eines Compilers, der sehr guten Maschinencode erzeugen soll, zu vereinfachen, indem der Compiler einfach C---Code erzeugt und die Low-Level-Optimierung und -Umsetzung einem C---Compiler überlässt.

Die Arbeit an C-- begann Ende der 1990er. Da das Schreiben eines Codegenerators selbst schon schwierig ist, und die Compiler-Backends, die damals den Forschern offen verfügbar waren, komplex und schlecht dokumentiert waren, schrieben viele Projekte Compiler, die C-Code erzeugten (der originale Modula-3-Compiler funktionierte so). C ist jedoch eine schlechte Sprachwahl als Zwischensprache für funktionale Sprachen; zum Beispiel unterstützt C keine Endrekursion, besitzt keine Garbage Collection oder eine effiziente Ausnahmebehandlung. C-- ist eine einfachere, straffer standardisierte Sprache als C, die alle diese Features besitzt. Die größte Besonderheit an C-- ist ein Runtime-Interface, was das Schreiben beispielsweise von portablen Garbage Collectors, Ausnahmebehandlungssystemen und anderen Laufzeit-Erweiterungen ermöglicht, die mit jedem C---Compiler laufen.

Die Syntax von C-- lehnt sich stark an die von C an. Jedoch sind in der Syntax einige C-Eigenschaften entfernt oder geändert, wie zum Beispiel variadische Funktionen, Pointer-Syntax, und Aspekte des Typsystems von C, da diese bestimmte grundlegende Eigenschaften von C-- stören, sowie die einfache Erzeugbarkeit durch Compiler und Code-Generatoren erschweren.

Der Name C-- ist im Grunde ein Insiderscherz (++ und -- dienen in C-ähnlichen Sprachen zum In- bzw. Dekrementieren): C++ ist eine auf C basierende Sprache mit im Vergleich zu C erweiterten Funktionen ( also: C++ == C + 1), also ist C-- die Sprache C mit reduziertem Funktionsumfang ( C-- == C - 1)).

C-- ist eine Zielsprache des Glasgow Haskell Compiler, eine Anpassung der Sprache könnte die Haupt-Zielsprache werden. Einige C---Entwickler, darunter Simon P. Jones, João Dias und Norman Ramsey haben schon am Glasgow Haskell Compiler mitgearbeitet. Der GHC entstammt der Microsoft Research-Abteilung in Cambridge, obwohl es kein Microsoft-Projekt ist.

Typsystem

Wie in vielen Assemblersprachen wird jedwede höhere Typunterscheidung, beispielsweise zwischen signed, unsigned, float, Pointern etc. erst durch die Operatoren und anderen Sprachkonstrukte eingeführt.

Das C---Typsystem ist absichtlich so gestaltet, dass es die Einschränkungen der Hardware eher wiedergibt als die Typsysteme höherer Sprachen. In C-- kann ein Wert, der in einem Register oder einer Speicherzelle gespeichert ist, nur einen Typ haben, nämlich den eines Bitvektors. Ein Bitvektor ist ein polymorpher Typ und kann in verschiedenen Wortbreiten vorkommen, z.B. bits8, bits32 oder bits64. Neben dem Bitvektor besitzt C-- auch einen booleschen Typen bool, der zwar bei Ausdrücken als Lösung vorkommen kann und für die Kontrolle des Programmflusses eingesetzt werden kann, jedoch nicht in einem Register oder im Speicher gespeichert werden kann.

Sphinx C--

Der Name C-- wurde schon für eine frühere Programmiersprache genutzt, die in den 1990ern von Peter Cellik für x86-Computer entworfen wurde. Sphinx C-- integriert x86-Assemblerelemente in C.

Siehe auch...

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”