C--

C--
Paradigmimperative
Designed bySimon Peyton Jones and Norman Ramsey
First appeared1998
Typing disciplinestatic, weak
Websitewww.cs.tufts.edu/~nr/c--/
Influenced by
C

C-- (pronounced C minus minus) is a C-like programming language, designed to be generated mainly by compilers for high-level languages rather than written by human programmers. It was created by functional programming researchers Simon Peyton Jones and Norman Ramsey. Unlike many other intermediate languages, it is represented in plain ASCII text, not bytecode or another binary format.[1][2]

There are two main branches:

Design

C-- is a "portable assembly language",[6] designed to ease the implementation of compilers that produce high-quality machine code.[7] This is done by delegating low-level code-generation and program optimization to a C-- compiler. The language's syntax borrows heavily from C while omitting or changing standard C features such as variadic functions, pointer syntax, and aspects of C's type system, because they hamper essential features of C-- and ease of code-generation.

The name of the language is an in-joke, indicating that C-- is a reduced form of C, in the same way that "C++" was chosen to connote an improved version of C. (In C, -- and ++ mean "decrement" and "increment", respectively.)[8]

Work on C-- began in the late 1990s. Since writing a custom code generator is a challenge in itself, and the compiler backends available to researchers at that time were complex and poorly documented, several projects had written compilers which generated C code (for instance, the original Modula-3 compiler). However, C is a poor choice for functional languages: it does not guarantee tail-call optimization, or support accurate garbage collection or efficient exception handling. C-- is a tightly-defined simpler alternative to C which supports all of these. Its most innovative feature is a run-time interface which allows writing of portable garbage collectors, exception handling systems and other run-time features which work with any C-- compiler.

The first version of C-- was released in April 1998 as a MSRA paper,[1] accompanied by a January 1999 paper on garbage collection.[2] A revised manual was posted in HTML form in May 1999.[9] Two sets of major changes proposed in 2000 by Norman Ramsey ("Proposed Changes") and Christian Lindig ("A New Grammar") led to C-- version 2, which was finalized around 2004 and officially released in 2005.[3]

Type system

The C-- type system is designed to reflect constraints imposed by hardware rather than conventions imposed by higher-level languages. A value stored in a register or memory may have only one type: bit-vector. However, bit-vector is a polymorphic type which comes in several widths, e.g. bits8, bits32, or bits64. A separate 32-or-64 bit family of floating-point types is supported. In addition to the bit-vector type, C-- provides a boolean type bool, which can be computed by expressions and used for control flow but cannot be stored in a register or memory. As in an assembly language, any higher type discipline, such as distinctions between signed, unsigned, float, and pointer, is imposed by the C-- operators or other syntactic constructs. C-- is not type-checked, nor does it enforce or check the calling convention.[3]: 28 

C-- version 2 removes the distinction between bit-vector and floating-point types. These types can be annotated with a string "kind" tag to distinguish, among other things, a variable's integer vs float typing and its storage behavior (global or local). The former is useful on targets that have separate registers for integer and floating-point values. Special types for pointers and the native word were introduced, although they are mapped to a bit-vector with a target-dependent length.[3]: 10 

Example code

The following C-- code calculates the sum and product of integers 1 through n[10] (n is received as an argument). It demonstrates two language features:

  • Procedures can return multiple results.
  • Tail recursion is explicitly requested with the "jump" keyword.
/* Tail recursion */
export sp;
sp( bits32 n ) {
  jump sp_help( n, 1, 1 );
}

sp_help( bits32 n, bits32 s, bits32 p ) {
  if n==1 {
      return( s, p );
  } else {
      jump sp_help( n-1, s+n, p*n );
  }
}

Implementations

The specification page of C-- lists a few implementations of C--. The "most actively developed" compiler, Quick C--, was abandoned in 2013.[11]

Haskell

Some developers of C--, including Simon Peyton Jones, João Dias, and Norman Ramsey, work or have worked on GHC, whose development has led to extensions in the C-- language, forming the Cmm dialect which uses the C preprocessor for ergonomics.[4][12]

GHC backends are responsible for further transforming C-- into executable code, via LLVM IR, slow C, or directly through the built-in native backend.[13][14][15] Despite the original intention, GHC does perform many of its generic optimizations on C--. As with other compiler IRs, the C-- representation can be dumped for debugging.[16] Target-specific optimizations are performed later by the backend.

Processing systems

As of 2018, most processing systems are not maintained, nor is their source code released.

  • Quick C-- is a compiler developed by The Quick C-- Team. It compiles version 2 of C-- code to Intel x86 Linux machine code. Compilation to machine code for other platforms is available as an experimental feature. Previously, Quick C-- was developed in parallel with the evolution of the C-- language specification, but the project was archived in 2019 on GitHub and development has ceased, though the source code is available there.
  • cmmc is a C-- compiler implemented in the ML programming language by Fermin Reig. It generates machine code for Alpha, Sparc, and x86 architectures.[17]
  • Trampoline C-- Compiler is a C-- to C transpiler developed by Sergei Egorov in May 1999. It translates C-- code into C code, allowing it to be compiled using standard C compilers.
  • The Oregon Graduate Institute's C-- compiler (OGI C-- Compiler) is the earliest prototype C-- compiler, developed in 1997 using the ML programming language. Maintenance of the OGI C-- Compiler was discontinued once development of Quick C-- began.

See also

References

  1. ^ a b Nordin, Thomas; Jones, Simon Peyton; Iglesias, Pablo Nogueira; Oliva, Dino (1998-04-23). "The C– Language Reference Manual". {{cite journal}}: Cite journal requires |journal= (help)
  2. ^ a b Reig, Fermin; Ramsey, Norman; Jones, Simon Peyton (1999-01-01). "C–: a portable assembly language that supports garbage collection": 1–28. {{cite journal}}: Cite journal requires |journal= (help)
  3. ^ a b c d Ramsey, Norman; Jones, Simon Peyton. "The C-- Language Specification, Version 2.0" (PDF). Retrieved 11 December 2019.
  4. ^ a b GHC Commentary: What the hell is a .cmm file?
  5. ^ "An improved LLVM backend". April 2019.
  6. ^ Oliva, Dino; Nordin, T.; Peyton Jones, Simon (1997-01-01). "C-: A Portable Assembly Language". Proceedings of the 1997 Workshop on Implementing Functional Languages – via Microsoft.
  7. ^ Jones, Simon Peyton; Nordin, Thomas; Oliva, Dino (1998). Clack, Chris; Hammond, Kevin; Davie, Tony (eds.). "C--: A portable assembly language". Implementation of Functional Languages. Berlin, Heidelberg: Springer: 1–19. doi:10.1007/BFb0055421. ISBN 978-3-540-68528-9.
  8. ^ "Increment And Decrement Operators In C With Precedence". unstop.com. Retrieved 2024-06-20.
  9. ^ Nordin, Thomas; Jones, Simon Peyton; Iglesias, Pablo Nogueira; Oliva, Dino (1999-05-23). "The C– Language Reference Manual".
  10. ^ Ramsey, Norman; Jones, Simon Peyton; Lindig, Christian (2005-02-23), The C-- Language Specification, version 2.0 (CVS Revision 1.128) (PDF), p. 7, retrieved 2023-06-22
  11. ^ "C-- Downloads". www.cs.tufts.edu. Retrieved 11 December 2019.
  12. ^ "5.10. GHC Backends — Glasgow Haskell Compiler 9.8.1 User's Guide". downloads.haskell.org. Retrieved 2024-06-20.
  13. ^ GHC Backends
  14. ^ "Opinion piece on GHC backends". andreaspk.github.io. August 25, 2019. Retrieved 2024-06-20.
  15. ^ "Using the Glasgow Haskell Compiler (GHC)". ProgDoer. Retrieved 2024-06-20.
  16. ^ Debugging compilers with optimization fuel
  17. ^ "C-- Downloads". www.cs.tufts.edu. Retrieved 2024-06-20.

Read other articles:

American reality television series Cyrus vs. Cyrus: Design and ConquerGenreRealityStarring Tish Cyrus Brandi Cyrus Country of originUnited StatesOriginal languageEnglishNo. of seasons1No. of episodes6ProductionExecutive producersSteve MichaelsJonathan KochTish CyrusRunning time24 minutesProduction companies Asylum Entertainment Hope Town Entertainment Original releaseNetworkBravoReleaseMay 25 (2017-05-25) –June 29, 2017 (2017-06-29) Cyrus vs. Cyrus: Design and Conquer is an A...

 

Telehit Música Eslogan Siempre sonandoToda la música, todo el tiempoTipo de canal Televisión por suscripciónProgramación MúsicaPropietario TelevisaUnivisionOperado por Televisa InternacionalPaís México MéxicoIdioma EspañolFundación 1994Inicio de transmisiones 30 de abril de 1994Personas clave Carlos MurguíaEduardo MurguíaBruno CoronelGuillermo del BosqueRaquel RochaSilvia TortAlexis Núñez OlivaJuan WilliamsReynaldo LópezFormato de imagen 1080i HDTV(reescalado a 16:9 480i/576i ...

 

Coordenadas: 44° 34' N 0° 25' O Landiras   Comuna francesa    Símbolos Brasão de armas Localização LandirasLocalização de Landiras na França Coordenadas 44° 34' N 0° 25' O País  França Região Nova Aquitânia Departamento Gironda Características geográficas Área total 59,08 km² População total (2018) [1] 2 234 hab. Densidade 37,8 hab./km² Código Postal 33720 Código INSEE 33225 Landiras é uma comuna francesa na...

Serie Titel Obi-Wan Kenobi Produktionsland Vereinigte Staaten Originalsprache Englisch Genre Space Western, Drama Erscheinungsjahr 2022 Länge 45–55 Minuten Episoden 6 in 1 Staffel Produktions-unternehmen Lucasfilm, Walt Disney Studios Regie Deborah Chow Drehbuch Joby Harold, Hossein Amini, Stuart Beattie, Andrew Stanton, Hannah Friedman Musik Natalie HoltJohn Williams (nur Hauptthema)William Ross (ergänzende Musikstücke) Kamera Chung Chung-hoon Premiere 27. Mai 2022 auf Disney+...

 

2019 United States attorney general elections ← 2018 November 5, 2019November 16, 2019 (Louisiana) 2020 → 3 attorney general offices3 states[a]   Majority party Minority party   Party Republican Democratic Seats before 20 23 Seats after 22 21 Seat change 2 2 Popular vote 2,167,410[1] 1,390,786 Percentage 60.91% 39.09% Seats up 1 2 Seats won 3 0      Republican gain      Republ...

 

Robert Schumann This list of compositions by Robert Schumann is classified into piano, vocal, orchestral and chamber works. All works are also listed separately, by opus number. Schumann wrote almost exclusively for the piano until 1840, when he burst into song composition around the time of his marriage to Clara Wieck. Piano works See also: List of solo piano compositions by Robert Schumann Op. 1, Variations on the name Abegg (1830) Op. 2, Papillons (1829–1831) Op. 3, Études after Paganin...

Indian financial services company This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) The topic of this article may not meet Wikipedia's notability guidelines for companies and organizations. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If nota...

 

Village development committee in Lumbini Zone, NepalSihokhore SihokhoreVillage development committeeSihokhoreLocation in NepalCoordinates: 27°31′N 82°59′E / 27.51°N 82.99°E / 27.51; 82.99Country   NepalZoneLumbini ZoneDistrictKapilvastu DistrictGovernment • वाडा अध्यक्षसहाबुद्दीन खानPopulation (1991) • Total3,902Time zoneUTC+5:45 (Nepal Time) Sihokhore is a village devel...

 

The topic of this article may not meet Wikipedia's notability guideline for music. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be merged, redirected, or deleted.Find sources: Viva Vigilante – news · newspapers · books · scholar · JSTOR (May 2016) (...

Ten artykuł dotyczy placu. Zobacz też: inne artykuły noszące tę nazwę. Ten artykuł od 2011-05 wymaga zweryfikowania podanych informacji.Należy podać wiarygodne źródła, najlepiej w formie przypisów bibliograficznych.Część lub nawet wszystkie informacje w artykule mogą być nieprawdziwe. Jako pozbawione źródeł mogą zostać zakwestionowane i usunięte.Sprawdź w źródłach: Encyklopedia PWN • Google Books • Google Scholar • Federac...

 

Not to be confused with Bhangarh. Ancient city in Dakshin Dinajpur BangarhAerial view of Bangarh, GangarampurShown within West BengalShow map of West BengalBangarh (India)Show map of IndiaAlternative nameDevkot, Kotivarsha, Devikota, Devakota, Diw-kotLocationGangarampur, West Bengal, IndiaCoordinates25°24′45″N 88°31′50″E / 25.41250°N 88.53056°E / 25.41250; 88.53056TypeHistorical PlaceHistoryFoundedEarlier than 200 BC Bangarh is an ancient city situated...

 

American TV series or program HomecomingBased onHomecoming novel by Cynthia VoigtWritten byChristopher CarlsonDirected byMark JeanStarringAnne BancroftKimberlee PetersonTrever O'BrienHanna HallWilliam GreenblattMusic byW.G. Snuffy WaldenCountry of originUnited StatesOriginal languageEnglishProductionExecutive producerShirō SasakiProducerJack BaranCinematographyToyomichi KuritaEditorNancy RichardsonRunning time105 minutesProduction companiesMerko ProductionShowtime NetworksOriginal relea...

Filipino TV series or program FlorindaTitle CardGenreReality, Drama, Horror, ActionCreated byRico Bello OmagapDirected byRahyan Carlos[1]StarringMaricel SorianoCountry of originPhilippinesOriginal languageFilipinoNo. of episodes20ProductionExecutive producerSusan RocesProduction companyDreamscape Entertainment TelevisionOriginal releaseNetworkABS-CBNReleaseSeptember 7 (2009-09-07) –October 2, 2009 (2009-10-02) Florinda is an ABS-CBN weekly television series forma...

 

У этого термина существуют и другие значения, см. Первомайское сельское поселение. сельское поселениеПервомайское сельское поселение Флаг 46°28′35″ с. ш. 39°34′27″ в. д.HGЯO Страна  Россия Входит в Кущёвский район Включает 8 населённых пунктов Адм. центр посёлок П...

 

Church in United KingdomSt David's Church, Shenley GreenSt David's Church, Shenley Green52°25′34″N 1°58′25″W / 52.4260°N 1.9735°W / 52.4260; -1.9735CountryUnited KingdomDenominationChurch of EnglandChurchmanshipBroad ChurchWebsitestdavidsshenleygreen.comHistoryDedicationSt DavidConsecrated9 May 1970ArchitectureArchitect(s)Selby ClewerGroundbreaking1 March 1969[1]Construction cost£55,000[2] (equivalent to £905,100 in 2021)[3]Spe...

2016 Iranian filmRed Nail PolishFilm posterDirected bySeyyed Jamal Seyyed HatamiScreenplay byAmir AbdiProduced byKamran MajidiStarringPardis Ahmadieh Pantea Panahiha Behnam TashakkorCinematographyMohammad Reza SokootEdited byHamid Najafi RadRelease date 1 December 2016 (2016-12-01) Running time85 minutesCountryIranLanguagePersianBox office1.2 billion toman Red Nail Polish (Persian: لاک قرمز, romanized: Lake Ghermez) is a 2016 Iranian film directed by Seyyed Jamal Seyyed ...

 

Medical conditionPhimosisAn erect penis with a case of phimosisPronunciation/fɪˈmoʊsɪs/ or /faɪˈmoʊsɪs/[1][2] SpecialtyUrologySymptomsUnable to pull the foreskin back past the glans[3]ComplicationsBalanitis,[3] penile cancer[citation needed], urinary retentionUsual onsetNormal at birth[3]DurationTypically resolves by 18 years old[4]CausesNormal, balanitis, balanitis xerotica obliterans[5]Risk factorsDiaper rash, poor...

 

Israeli protest movement Black Panthers הפנתרים השחורים‎Founded1971Merged intoHadash, Left Camp of IsraelIdeologySephardic and Mizrahi interestsSocial justiceMarxismSocialismPolitical positionLeft-wingMost MKs1 (1977–1992)Fewest MKs1 (1977–1992)Election symbolז‎Politics of IsraelPolitical partiesElections The Black Panthers (Hebrew: הפנתרים השחורים, translit. HaPanterim HaShkhorim) were an Israeli protest movement of second-generation Jew...

Scottish businessman SirWilliam Mackinnon, 1st BaronetBtBorn(1823-03-13)13 March 1823Campbeltown, Scotland, United KingdomDied22 June 1893(1893-06-22) (aged 70)London, England, United KingdomNationalityBritishOccupationBusinessmanKnown forBritish India Steam Navigation CompanyImperial British East Africa CompanySpouse Janet Colquhoun ​ ​(m. 1856)​ Sir William Mackinnon, 1st Baronet, CIE, FRSGS (13 March 1823 – 22 June 1893) was a Scottish...

 

Legendary musician of ancient Greece This article is about the Greek poet. For other uses, see Arion (disambiguation). Not to be confused with Orion. A musician riding a dolphin, on a Red-figure stamnos (360–340 BC) from Etruria. In this case the musician is an aulete rather than a kitharode, as he is playing the flute (aulos) rather than a kithara.Arion riding a Dolphin, by Albrecht Dürer (c. 1514)Arion on a Sea Horse, by William-Adolphe Bouguereau (1855)Arion (/əˈraɪən/; Greek: Ἀρ...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!