C!

C! (prononcé sibang) est un langage de programmation tournée vers la programmation système et plus particulièrement la programmation noyaux.

Le langage se veut une évolution non-conservative du C : sa syntaxe est relativement proche mais diffère sur quelques détails afin de supprimer certaines ambiguïtés. De plus, il étend le C avec des constructions visant à simplifier la programmation système (sucre syntaxique). Enfin le langage dispose également de constructions orientées objet.

Le dernier point important du projet est son modèle compiler to compiler : le compilateur C! ne produit pas directement du code machine, mais du code C qui pourra, lui, être compilé par GCC ou clang. L'avantage principal d'un tel modèle de compilation est de profiter de l'expérience d'un compilateur éprouvé, notamment pour ses qualités d'optimisation et de production de code sur un large panel de plateformes.

C! en quelques points clefs :

Un petit exemple de syntaxe C! :

// A simple fibonacci function in C!

// int<+32> indicates unsigned 32bits integer
fibo(n : int<+32>) : int<+32>
{
  if (n < 2)
    return n;
  return fibo(n-1) + fibo(n-2);
}

Et maintenant avec des objets :

// Import some external module "lib"
import lib;

class Point
{
  x : float<64>; // size also for float
  y : float<64>;

  getX(): float<64> { return x; }
  getY(): float<64> { return y; }

  setX(z : float<64>) { x = z; }
  setY(z : float<64>) { y = z; }
} // no ';' required !

addPoint(a: Point, b: Point) : Point
{
  // allocation is let to the programmer
  p : Point = Point(lib::alloc(sizeof(Point)));
  // lib::alloc design the symbol alloc in the lib namespace
  p.setX(a.getX() + b.getX());
  p.setY(a.getX() + b.getX());
  return p;
}

Citations

Lionel A.: Je suis jaloux :P.... C! c'est le kooc que j'aurais dû faire...tant pis.