C--- C--

C--
Paradigma rozkazovací způsob
Navrhl Simon Peyton Jones a Norman Ramsey
Poprvé se objevil 1997
Kázeň při psaní statický , slabý
webová stránka https://www.cs.tufts.edu/~nr/c--/index.html
Ovlivněn
C

C- (výraznější C minus minus ) je C -jako programovací jazyk . Jeho tvůrci, výzkumníci funkčního programování Simon Peyton Jones a Norman Ramsey, jej navrhli tak, aby byl generován hlavně kompilátory pro jazyky velmi vysoké úrovně , než aby je psali lidští programátoři. Na rozdíl od mnoha jiných středně pokročilých jazyků je jeho reprezentací prostý text ve formátu ASCII , nikoli bytecode nebo jiný binární formát.

Existují dvě hlavní větve:

Design

C-- je „přenosný montážní jazyk “, který má usnadnit implementaci překladačů, které produkují vysoce kvalitní strojový kód . To se provádí delegováním generování kódu na nízké úrovni a optimalizace programu na kompilátor C--. Syntaxe jazyka si výrazně vypůjčuje jazyk C, přičemž vynechává nebo mění standardní funkce jazyka C, jako jsou variadické funkce , syntaxe ukazatelů a aspekty systému typu C, protože brání základním funkcím jazyka C a usnadňuje generování kódu.

Název jazyka je vtip, který naznačuje, že C-- je redukovaná forma C, stejným způsobem, jako je C ++ v podstatě rozšířenou formou C. ( --a ++znamená „dekrement“ a „přírůstek“. )

Práce na C-- začaly koncem devadesátých let. Vzhledem k tomu, že psaní vlastního generátoru kódu je samo o sobě výzvou a backendy kompilátoru dostupné v té době výzkumníkům byly složité a špatně zdokumentované, několik projektů mělo napsané kompilátory, které generovaly kód C (například původní kompilátor Modula-3 ). C je však špatnou volbou pro funkční jazyky: nezaručuje optimalizaci koncového volání ani nepodporuje přesné shromažďování odpadků nebo efektivní zpracování výjimek . C-- je přesně definovaná jednodušší alternativa k C, která podporuje všechny tyto. Jeho nejinovativnější funkcí je běhové rozhraní, které umožňuje psaní přenosných popelářů, systémů pro zpracování výjimek a dalších běhových funkcí, které fungují s jakýmkoli kompilátorem C--.

První verze C-- byla vydána v dubnu 1998 jako papír MSRA, doprovázený papírem z ledna 1999 o sběru odpadků. Revidovaný manuál byl zaslán ve formě HTML v květnu 1999. Dvě sady zásadních změn navržených v roce 2000 Normanem Ramseyem („Navrhované změny“) a Christianem Lindigem („Nová gramatika“) vedly k C- verzi 2, která byla dokončena kolem roku 2004 a oficiálně vydáno v roce 2005.

Typový systém

Systém typu C je navržen tak, aby odrážel omezení uložená hardwarem, nikoli konvence uložená jazyky vyšší úrovně. Hodnota uložená v registru nebo paměti může mít pouze jeden typ: bitový vektor . Bitový vektor je však polymorfní typ, který má několik šířek, např. Bits8 , bits32 nebo bits64 . Je podporována samostatná 32bitová nebo 64bitová rodina typů s plovoucí desetinnou čárkou. Kromě typu bitových vektorů C-- poskytuje boolean typu bool , který lze vypočítat pomocí výrazů a použít k řízení toku, ale nelze jej uložit do registru nebo paměti. Stejně jako v jazyce sestavení je jakákoli disciplína vyššího typu, například rozlišování mezi podepsanými, nepodepsanými, float a ukazateli, uložena operátory C-- nebo jinými syntaktickými konstrukty. C-- není typově kontrolován, ani nevynucuje ani nekontroluje konvenci volání.

C-- verze 2 odstraňuje rozdíl mezi typy bitových vektorů a plovoucí desetinnou čárkou. Tyto typy mohou být opatřeny poznámkou pomocí řetězce „kind“, aby se mimo jiné rozlišovalo celé číslo proměnné vs plovoucí typ a její chování při ukládání (globální nebo místní). První z nich je užitečné u cílů, které mají oddělené registry pro celočíselné hodnoty a hodnoty s plovoucí desetinnou čárkou. Byly zavedeny speciální typy pro ukazatele a nativní slovo, přestože jsou mapovány na bitový vektor s délkou závislou na cíli.

Implementace

Stránka specifikace C-- uvádí několik implementací C--. V roce 2013 byl opuštěn „nejaktivněji vyvíjený“ kompilátor, Quick C--.

Haskell

Někteří vývojáři C--, včetně Simon Peyton Jones, João Dias a Norman Ramsey, pracují nebo pracovali na GHC, jehož vývoj vedl k rozšíření v jazyce C-- a vytvořil dialekt Cmm, který používá preprocesor C pro ergonomii .

Backendy GHC jsou zodpovědné za další transformaci C-- na spustitelný kód, pomocí LLVM IR, slow C nebo přímo přes vestavěný nativní backend. Navzdory původnímu záměru GHC provádí mnoho svých generických optimalizací na C--. Stejně jako u jiných IR kompilátoru lze reprezentaci C-- za účelem ladění vypsat. Optimalizace specifické pro cíl samozřejmě provádí později backend.

Viz také

Reference

externí odkazy