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 :
- Syntaxe rationalisée
- Interactions simplifiées avec le C
- Taille de représentation des entiers explicite dans le type
- Utilisation directe des entiers comme tableaux de bits
- Mécanisme de namespace simple
- Classes et objets
- Macro Classes : ajout d'opérations sur des types quelconques avec une syntaxe objet
- Pleins d'autres idées bientôt intégrées !
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.