C--

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

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.

Existen dos variantes principales:

Diseño y características

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.

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.

Sistema de tipos

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.

Ejemplo de código

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);
    }
}

Implementaciones

Las implementaciones más destacadas incluyen:

Véase también

Referencias

  1. ↑ Oliva, Dino; Nordin, Thomas (1 de enero de 1997). «C-: A Portable Assembly Language». Proceedings of the 1997 Workshop on Implementing Functional Languages (en inglés estadounidense).
  2. ↑ «Increment And Decrement Operators In C With Precedence». Consultado el 20 de junio de 2024.
  3. ↑ Ramsey, Norman (23 de febrero de 2005), The C-- Language Specification, version 2.0 (CVS Revision 1.128), p. 7.

Enlaces externos