C-- (pronunciado "C menos menos") es un lenguaje de programación de bajo nivel intermedio, con sintaxis similar a C, diseñado principalmente para ser generado por compiladores de lenguajes de alto nivel en lugar de ser escrito directamente por programadores humanos. Fue desarrollado en la década de 1990 por los investigadores en programación funcional Simon Peyton Jones y Norman Ramsey. A diferencia de muchos otros lenguajes intermedios, C-- se representa en texto ASCII plano, no en bytecode ni en otro formato binario.
C-- | ||
---|---|---|
![]() | ||
Simon Peyton Jones y Norman Ramsey http://www.cminusminus.org/ y http://www.cs.tufts.edu/~nr/c-- | ||
Información general | ||
Extensiones comunes | c-- | |
Apareció en | 1997 | |
Diseñado por | Simon Peyton Jones y Norman Ramsey | |
Influido por | C | |
Existen dos variantes principales:
C-- se define como un «lenguaje ensamblador portátil» diseñado para facilitar la generación de código máquina optimizado y la implementación de compiladores de alto nivel.[1]
Su sintaxis se basa en C, pero omite o modifica características que complican la generación de código, como las funciones variádicas y la semántica de punteros de C. Además, C-- introduce:
El nombre «C--» juega con la convención de C++ (incremento) y C-- (decremento), indicando que es una versión reducida de C.[2]
El sistema de tipos de C-- refleja las restricciones del hardware:
No hay comprobación de tipos en tiempo de compilación ni convenciones de llamada estrictas; dichas disciplinas se aplican mediante operadores y convenciones externas. En la versión 2.0, se introdujeron anotaciones de "kind" para diferenciar enteros, flotantes, punteros y tipos nativos.[3]
El siguiente ejemplo muestra una recursión terminal que calcula la suma y el producto de los números de 1 a n:
/* Recursión terminal: suma y producto de 1 a n */
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);
}
}
Las implementaciones más destacadas incluyen: