This article is within the scope of WikiProject Computing, a collaborative effort to improve the coverage of computers, computing, and information technology on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.ComputingWikipedia:WikiProject ComputingTemplate:WikiProject ComputingComputing articles
This article is within the scope of WikiProject Computer science, a collaborative effort to improve the coverage of Computer science related articles on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.Computer scienceWikipedia:WikiProject Computer scienceTemplate:WikiProject Computer scienceComputer science articles
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)[reply]
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)[reply]
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#!
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]
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?
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 [1], which I found via [2].
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?
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.
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.
I have read the language specification [[3]], 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)[reply]
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)[reply]
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)[reply]