Talk:C--

Wrong, C does support "tail recursion"
Every language that supports "recursion" also supports "tail recursion" by default. You are mixing up "tail recursion optimization" (which replaces a recursive call by a simple jump instruction) with "recursion/tail recursion". 84.56.241.219 (talk) 19:37, 24 September 2014 (UTC)

I've updated the link text from "tail recursion" to "tail call optimization", which is a more popular phrase than the more accurate "tail call frame elimination", or other variations. Dotyoyo (talk) 18:24, 24 January 2017 (UTC)

Made up?
https://en.wikipedia.org/wiki/Wikipedia:Signatures I can't find any information on this "language." Plenty of Google hits, but none for C--. Can anyone provide references for this? &mdash; Frecklefoot | Talk 14:50, Mar 3, 2005 (UTC)

If this turns out to be a hoax,

&mdash;  F REAK OF N URxTURE  ( TALK )  06:37, 29 October 2005 (UTC)


 * I've heard of it, so I'm pretty sure this is no joke. --Saforrest 21:06, 27 January 2006 (UTC)


 * This isn't a joke -- try Googling for CMinusMinus (google doesnt search for the minus (-) sign). Its named so because its ties to the Assembly Language make it a lower-level language than C. I also know for a fact that a port of Sphinx C-- exists on MenuetOS. The REAL hoax is C#!
 * Dustin 20:09, 18 September 2006 (UTC)

There have been several languages named "C--". Quoting from http://www.cminusminus.org/faq.html:
 * C-- is such a good name that others have also used it.
 * Peter Cellik developed Sphinx C-- as a programming language for the x86 only; it is like a mix of C and x86 assembly language. The project was taken over by Michael Sheker. [snip]
 * The Riverside Intermediate Format uses a source language called C--, which is a subset of Gnu C.
 * One of the intermediate codes of the Objective Caml compiler is called C--. Simon has been suspected of stealing the name from this source.
 * David Holdsworth and colleagues are using the name C-- for an emulation platform.

(Note that most of these links are broken.) CWC 16:42, 17 July 2008 (UTC)

Article expanded, July 2008
I've just expanded the article. I guess I rewrote most of it. Mostly I just added info, but I also fixed at least one misstatement: C-- is not really an intermediate language, since it is a general-purpose, target-independent language, not tied to any abstract machine. I also briefly mentioned Sphinx C-- (see above).

Please check my edit and fix my mistakes. I suspect the article is no longer a stub; what do other editors think?

Cheers, CWC 16:47, 17 July 2008 (UTC)


 * When C-- is used, usually "a compiler first translates the source code of a program into [C--], as an intermediate step before generating object or machine code for a target machine.", right?


 * The C programming language represents an "abstract computer":
 * "C, reflecting the genius of Dennis Ritchie, provided a minimal model of the computer that had evolved over 30 years. ... This is the secret of C's portability: it is the best representation of an abstract computer that we have. Of course, the abstraction is done over the set of real computers, not some imaginary computational devices. ..." -- AlexanderStepanov 1995, which I found via.


 * Therefore, C-- seems to technically meet the definition at the beginning of the intermediate language article:
 * "In computer science, an intermediate language is the language of an abstract machine designed to aid in the analysis of computer programs. The term comes from their use in compilers, where a compiler first translates the source code of a program into a form more suitable for code-improving transformations, as an intermediate step before generating object or machine code for a target machine."


 * Is there some other, better term to use for describing things like C-- that are not intended to be written directly by humans, and also cannot be directly executed by machine, but are used as an intermediate step during translation from one to the other?
 * --68.0.124.33 (talk) 15:31, 18 July 2008 (UTC)


 * Hmm. Good questions.
 * Yes, C does present a kind of "abstract computer", but with many target-dependent aspects (sizes of fundamental types, alignments, structure layout, stack growth direction, etc). C-- presents a smaller "abstract computer" with only one target-dependency (sizes of two or three fundamental types), and everything else more tightly defined. Moreover, instead of the front-end having to know about stuff like stack direction, C-- provides (just) enough run-time library functions to let you write a run-time library for a larger and higher-level language without having to know about that stuff.
 * That strikes me as a very helpful way to think about C-- (and, to some extent, related projects such as LLVM). I wonder if the C-- people have made that point in any of their papers? If so, we should use it in the article.
 * Is C-- an intermediate language? Generally, ILs have binary formats (eg., a byte code) and a tightly-defined abstract machine (using the term "abstract machine" in the mathematical sense, which is quite distinct from an "abstract computer"). That's why I didn't like calling C-- an IL. But, although it may not exactly fit the usual definition of an IL, it is a language used as an intermediate between (say) Haskell and machine code.
 * If anyone has come up with a name for this sort of thing, I'm not aware of it. We probably should call C-- a "kind of IL" or "a higher-level IL" or something to that effect. Would anyone who can think of a good way to say this please edit the article accordingly? (That is, please fix my mistake.) As always, comments are welcome here.
 * Cheers, CWC 10:39, 22 July 2008 (UTC)

Nombas ScriptEase
Nombas Scriptease 3.0 (and CEnvi 2.x) also describe themselves as CMM (or c--). It dates from the late 1990's.

It's a kind of C for shell scripting, it is essentially a C intepreter minus Type Declarations and variable names. Type is declared when the variable is declared, being Float, Long and Byte. The program was available for OS/2, DOS, Win16, Win32, and Linux.

--Wendy.krieger (talk) 09:55, 26 July 2009 (UTC)

To be extended
I have read the language specification [], and it appears, C-- has not much in common with C. It merely looks like it. (E.g. "A procedure may return any number of values.") Somebody should read the specification and write something about the differences. --217.6.251.18 (talk) 06:10, 3 June 2011 (UTC)

Website link is dead
If this was real, it may be merely a historical artifact now. Robertwharvey (talk) 00:12, 28 June 2013 (UTC)

From what I can see in the archive and some stackoverflow posts, this actually did exist, however, it now looks like a dead language. Should this be mentioned somewhere on the page? Looking at the Github of the reference compiler, this is archived with last commit at 2014: https://github.com/nrnrnr/qc-- — Preceding unsigned comment added by 91.178.170.189 (talk) 09:35, 3 November 2019 (UTC)

Needs at least a "hello, world"
There doesn't appear to be a canonical one, though, so I don't want to just cut and paste one. If no one gets to it, I'll try to hammer one out. - Richfife (talk) 16:01, 8 April 2015 (UTC)