C--
Paradigm | nödvändigt |
---|---|
Designad av | Simon Peyton Jones och Norman Ramsey |
Dök först upp | 1998 |
Maskinskrivningsdisciplin | statisk , svag |
Hemsida | https://www.cs.tufts.edu/~nr/c--/index.html |
Influerad av | |
C |
C-- (uttalas C minus minus ) är ett C -liknande programmeringsspråk . Dess skapare, forskarna för funktionell programmering Simon Peyton Jones och Norman Ramsey, designade den för att genereras huvudsakligen av kompilatorer för språk på mycket hög nivå snarare än skriven av mänskliga programmerare. Till skillnad från många andra mellanspråk är dess representation vanlig ASCII- text, inte bytekod eller annat binärt format.
Det finns två huvudgrenar:
- C--, den ursprungliga grenen, med den slutliga versionen 2.0 som släpptes i maj 2005
- Cmm, gaffeln som aktivt används som mellanrepresentation (IR) i Glasgow Haskell Compiler (GHC)
Design
C-- är ett "portabelt assemblerspråk ", designat för att underlätta implementeringen av kompilatorer som producerar maskinkod av hög kvalitet . Detta görs genom att delegera kodgenerering på låg nivå och programoptimering till en C-- kompilator. Språkets syntax lånar kraftigt från C samtidigt som man utelämnar eller ändrar standard C-funktioner som variadiska funktioner , pekarsyntax och aspekter av C:s typsystem, eftersom de hämmar väsentliga funktioner i C-- och enkel kodgenerering.
Namnet på språket är ett skämt, vilket indikerar att C-- är en reducerad form av C, på samma sätt som C++ i grunden är en utökad form av C. (i C betyder --
och ++
"minskning" och "öka" respektive.)
Arbetet med C-- började i slutet av 1990-talet. Eftersom att skriva en anpassad kodgenerator är en utmaning i sig, och kompilatorns backends som var tillgängliga för forskare vid den tiden var komplexa och dåligt dokumenterade, hade flera projekt skrivit kompilatorer som genererade C-kod (till exempel den ursprungliga Modula-3- kompilatorn). C är dock ett dåligt val för funktionella språk: det garanterar inte optimering av tail-call eller stöder korrekt sophämtning eller effektiv undantagshantering . C-- är ett snävt definierat enklare alternativ till C som stöder alla dessa. Dess mest innovativa funktion är ett körtidsgränssnitt som tillåter skrivning av bärbara sophämtare, undantagshanteringssystem och andra körtidsfunktioner som fungerar med vilken C-- kompilator som helst.
Den första versionen av C-- släpptes i april 1998 som en MSRA-tidning, åtföljd av en uppsats från januari 1999 om sophämtning. En reviderad manual lades ut i HTML-form i maj 1999. Två uppsättningar stora ändringar som föreslagits 2000 av Norman Ramsey ("Proposed Changes") och Christian Lindig ("A New Grammar") ledde till C-- version 2, som slutfördes runt 2004 och släpptes officiellt 2005.
Typ system
Systemet av C-- är designat för att återspegla begränsningar som påtvingas av hårdvara snarare än konventioner som åläggs av högre nivåer. Ett värde lagrat i ett register eller minne kan bara ha en typ: bit-vektor . Bit-vektor är dock en polymorf typ som finns i flera bredder, t.ex. bits8 , bits32 , eller bits64 . En separat 32- eller 64-bitars familj av flyttalstyper stöds. Förutom bitvektortypen tillhandahåller C-- en bool av typen bool, som kan beräknas av uttryck och användas för kontrollflöde men inte kan lagras i ett register eller minne. Som i ett assemblerspråk, påtvingas varje högre typ av disciplin, såsom distinktioner mellan signerad, osignerad, float och pekare, av C--operatorerna eller andra syntaktiska konstruktioner. C-- är inte typkontrollerad, inte heller verkställer eller kontrollerar den anropskonventionen.
C-- version 2 tar bort distinktionen mellan bit-vektor- och flyttalstyper. Dessa typer kan annoteras med en sträng "snäll"-tagg för att särskilja, bland annat, en variabels heltal kontra flyttypning och dess lagringsbeteende (globalt eller lokalt). Det förra är användbart på mål som har separata register för heltals- och flyttalsvärden. Specialtyper för pekare och det ursprungliga ordet introducerades, även om de är mappade till en bitvektor med en målberoende längd.
Genomföranden
Specifikationssidan för C-- listar några implementeringar av C--. Den "mest aktivt utvecklade" kompilatorn, Quick C--, övergavs 2013.
Haskell
Vissa utvecklare av C--, inklusive Simon Peyton Jones, João Dias och Norman Ramsey, arbetar eller har arbetat på GHC, vars utveckling har lett till tillägg i C--språket, som bildar Cmm-dialekten som använder C - förprocessorn för ergonomi .
GHC-backends är ansvariga för att ytterligare omvandla C-- till körbar kod, via LLVM IR, slow C eller direkt genom den inbyggda inbyggda backend. Trots den ursprungliga avsikten utför GHC många av sina generiska optimeringar på C--. Som med andra kompilator-IR kan C--representationen dumpas för felsökning. Målspecifika optimeringar utförs senare av backend.
Se även
externa länkar
- Arkiv för gammal officiella webbplats (cminusminus.org)
- Snabb C-- kodarkiv (referensimplementeringen)