« Le langage de programmation C existe depuis longtemps et est encore très utilisé de nos jours. Le noyau du langage est très solide, mais d'autres aspects montrent leurs limites avec le temps. C2 tente de moderniser ces parties, tout en gardant l'expérience de C. Il devrait être vu comme une évolution de C », est-il indiqué sur le site officiel du langage C2, en guise de philosophie du projet.
Cette philosophie a conduit l'équipe C2 aux objectifs de conception suivants :
- une vitesse de développement plus grande ;
- une vitesse d'exécution similaire, voire meilleure ;
- de meilleurs temps de compilation ;
- un système de build intégré ;
- une syntaxe plus stricte (plus facile pour le tooling) ;
- un excellent tooling (outil de formatage, outil graphique de refactorisation) ;
- une intégration facile avec les bibliothèques C ;
- un langage qui devrait être facile à apprendre pour les programmeurs en C ;
- un langage qui devrait aider à éviter les erreurs communes.
Essayant de positionner leur langage par rapport aux langages de programmation actuels, l'équipe derrière C2 explique qu'il y a eu une tendance vers davantage d'abstractions de plus haut niveau, dans l'évolution des langages au fil du temps. « Java et C# reflètent particulièrement cette tendance. Pour les langages de niveau système, D et Rust se sont éloignés de cette tendance, pour fournir de meilleures performances et un meilleur contrôle », dit-elle. Avant d'ajouter que « pour un langage de niveau système, les fonctionnalités offertes par C++, D et Rust sont très appropriées. Cependant, ces langages ne semblent pas combler le vide pour les programmes de bas niveau/embarqués, car ils sont souvent encore programmés en C. C'est exactement ce vide que C2 tente de combler. »
C2 vise à être utilisé pour les problèmes où C est actuellement utilisé. Donc, les programmes de bas niveau comme les chargeurs d'amorçage (bootloaders), les noyaux, les pilotes et les outils de niveau système. Puisqu'il se veut une évolution de C, son équipe de développement a explicitement précisé que son objectif n'est pas d'introduire des fonctionnalités de niveau supérieur (comme l'orientation-objet, la récupération de mémoire, etc.) ou créer un langage complètement nouveau. Si C2 se présente comme une évolution de C, quels sont donc les changements par rapport à C ?
Ce qu'il faut savoir parmi les principales différences entre C et C2, c'est qu'il n'y a aucun fichier d'en-tête dans C2. C2 utilise en effet une approche dite moderne pour l'utilisation de symboles externes. Il n'y a qu'un seul type de fichiers, les fichiers source .c2. Pour remplacer #include, il existe une instruction d'importation. Tout le code source est également divisé en modules.
C2 vient en plus avec un système de build intégré. L'intégration du système de build dans le compilateur peut sembler restrictive, mais d'après les développeurs du langage, cela permet en réalité de nombreuses améliorations. L'une des fonctionnalités offertes par le système de build intégré est la compilation par cible (pas par fichier). Traditionnellement, les programmes C sont compilés par fichier, c'est-à-dire que chaque fichier est d'abord transformé en module LLVM. Mais en C2, le développeur peut choisir entre deux modes : le mode multimodule et le mode module unique. En mode multimodule (par défaut), tous les fichiers source d'un même module C2 sont transformés en un seul module LLVM. Le mode module unique quant à lui vise à permettre encore plus d'optimisation, car C2 convertit tous les fichiers source en un seul module LLVM, permettant une LTO (link-time optimization ou optimisation à l'édition des liens) complète.
Compilation (par fichier) avec C
Compilation avec C2 : mode multimodule (par défaut)
Compilation avec C2 : mode module unique
C2 fournit aussi les types primitifs prédéfinis suivants : bool ; i8, i16, i32, i64 ; u8, u16, u32, u64 ; f32, f64 ; et char (égal à i8). Les types int et float par défaut ont été supprimés avec les modificateurs de type short, long, signed ou unsigned. La macro NULL a aussi été remplacée par le mot-clé nil.
Une autre différence entre C et C2 est que C2 introduit une syntaxe de type uniforme. L'équipe derrière C2 estime en effet que les définitions de type en C sont parfois difficiles à lire. Aussi la syntaxe est un peu bizarre avec le typedef. Pour cela, C2 fournit une syntaxe uniforme pour définir de nouveaux types. Entre autres différences entre les deux langages, on peut encore noter des diagnostics plus stricts, les attributs, un tooling et des fonctionnalités spéciales dans C2. Les changements par rapport à C sont plus détaillés dans la documentation officielle de C2.
Cela dit, pourquoi donc choisir C2 par rapport C ? La réponse à cette question, d'après les créateurs de C2, se trouve dans les avantages que présente leur langage :
- un développement plus rapide. Leurs tests auraient en effet montré une diminution d'environ 30 % du temps de développement avec C2 ;
- un accès facile à des fonctionnalités telles que LTO (link-time optimization) ;
- de meilleurs diagnostics (ce qui, encore une fois, accélère le développement) ; et
- un contrôle plus facile de l'architecture avec c2reto.
Source : C2lang
Et vous ?
Que pensez-vous des objectifs du langage C2 ?
Croyez-vous qu'il fera une bonne alternative à C ? Pourquoi ?
Voir aussi :
Pourquoi les langages C et C++ auraient-ils encore de nombreuses années devant eux ? Donnez votre avis
Index TIOBE : C sacré langage de programmation de l'année 2017, Python enregistre encore la plus forte progression annuelle sur PYPL
Quel langage pourrait remplacer C ? Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D