C--
Paradigma | imperativní |
---|---|
Vznik | 1997 |
Autor | Simon Peyton Jones, Norman Ramsey |
Typová kontrola | statická, slabá |
Ovlivněn jazyky | C |
Web | https://www.cs.tufts.edu/~nr/c--/ |
C−− je programovací jazyk založený na jazyce C. Jeho tvůrci, zabývající se hlavně funkcionálním programováním, Simon Peyton Jones a Norman Ramsey ho navrhli jako jazyk, jehož kód nebude programátor psát ručně, ale bude generován kompilátory vysokoúrovňových programovacích jazyků. Na rozdíl od mnoha ostatních generovaných jazyků má jeho kód formu klasického ASCII textu, není to bajtkód, nebo jiný binární formát.
Charakteristika
[editovat | editovat zdroj]C−− je jazyk na úrovni mezi C a assemblerem, vytvořený pro zjednodušení tvorby kompilátorů generujících velmi kvalitní strojový kód. Zjednodušení je docíleno tím, že tvořený kompilátor vysokoúrovňového programovacího jazyka vygeneruje pouze kód v C−− a složitější část, generování nízkoúrovňových instrukcí a optimalizaci provede kompilátor jazyka C−−. Práce na jazyku začala v devadesátých letech. Zatímco napsání vlastního kompilátoru je velmi složitý úkol sám o sobě, tou dobou byla již hotová řešení velmi složitá a velmi špatně dokumentovaná. Mnoho vytvořených kompilátorů generovalo kód v jazyce C. Pro funkcionální programování ale jazyk C není vhodný, protože nepodporuje koncovou rekurzi, garbage collection, nebo efektivní ošetřování výjimek. C−− je jednodušší, přesně definovaná alternativa k C podporující všechny tyto funkce. Jeho největší inovativnost spočívá v run-time rozhraní, dovolujícím psaní samostatných garbage collectorů, ošetřování výjimek a dalších run-time vlastností, fungujících s každým C−− kompilátorem.
Syntaxe je z větší části založena na C, určité změny od standardu C spočívají v definování funkcí s neurčitým počtem parametrů, syntaxi pointerů a některých částí typového systému. Tyto změny byly zavedeny z důvodu ulehčení generování zdrojových kódů obsahujících zmíněné pokročilé funkce, jež jsou klíčovou součástí jazyka C−−.
Ve jméně jazyka je ukryt vtip, znaky minus symbolizují, že C−− vzniknul omezením jazyka C stejně, jako C++ je vlastně rozšířená forma C. (Vtip je ukryt v tom že "--" a "++" jsou operátory symbolizující inkrementaci a dekrementaci.)
C−− je jazyk, který je výstupem například Glasgow Haskell kompilátoru a někteří vývojáři jazyka C−−, například Simon Peyton Jones, João Dias a Norman Ramsey na vývoji tohoto kompilátoru také pracovali, nebo pracují.
Typový systém
[editovat | editovat zdroj]Typový systém jazyka C−− je záměrně navržen aby odpovídal omezením daným hardware a ne těm, která definují vyšší programovací jazyky. Hodnota uložená v registru nebo paměti může být pouze jednoho typu – bit vector. Bit vector je polymorfní typ a může mít různé délky, například 8 bitů (bits8), 32 bitů (bits32) nebo 64 bitů (bits64). Dále bit vector nabízí také reprezentaci logické hodnoty (bool), která může být výsledkem logických výrazů a která může být použita pro řízení toku programu. Logická hodnota však nemůže být uložena v registru nebo paměti. Stejně jako v asembleru, jakákoliv složitější operace, jako například rozlišování mezi znaménkovými, a neznaménkovými datovými typy, desetinnými typy a pointery, je reprezentována buď jednoduššími operacemi, nebo specifickými konstrukty jazyka.
Financování
[editovat | editovat zdroj]Vývoj jazyka je financován nadací Microsoft Research a Národní vědeckou nadací grantem číslo 0325460.
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku C−− na anglické Wikipedii.