- Un langage évolutif qui hérite de la syntaxe et de la sémantique du C tout en renforçant la sécurité et l’ergonomie, afin de conserver un environnement familier pour les développeurs C existants
- Compatibilité complète avec l’ABI C, ce qui permet une intégration immédiate dans des projets C/C++ ; une partie du code de vkQuake a déjà été convertie en C3 et compilée avec le compilateur c3c
- Système de modules, surcharge d’opérateurs, macros à la compilation, etc., pour améliorer la structure du code et sa capacité d’expression
- Inclut des fonctionnalités modernes comme la programmation par contrat (Gradual Contracts), la gestion des erreurs sans surcoût, ainsi que la réflexion à l’exécution et à la compilation
- En mode debug, fournit automatiquement des vérifications de sécurité et des traces de pile détaillées, utiles pour détecter les bugs et renforcer la stabilité
Aperçu de C3
- C3 est un langage de programmation développé à partir de la syntaxe et de la sémantique du langage C
- Son objectif est de faire évoluer le langage tout en conservant une forme familière pour les programmeurs C existants
- Prend en charge une surcharge d’opérateurs précise et orientée objectif
- Sans la complexité de la surcharge en C++, il permet d’exprimer naturellement les vecteurs, matrices et calculs en virgule fixe
- Prend en charge la programmation par contrat, ce qui permet d’exprimer des contraintes à l’exécution comme à la compilation
- Renforce la stabilité du code et la cohérence des spécifications
- Combine les avantages de la gestion des erreurs basée sur
Result et des exceptions
- Fournit une structure de gestion des erreurs qui s’intègre naturellement au code C
- Prend en charge l’introspection de types aussi bien à la compilation qu’à l’exécution
- Assembleur inline : il est possible d’écrire de l’assembleur comme du code ordinaire, sans chaînes ni contraintes complexes
- En mode debug, le runtime insère automatiquement des vérifications de limites (bound checks) et des vérifications de valeurs (value checks)
- La bibliothèque standard de C3 fournit par défaut des traces de pile détaillées dans les builds de debug
- Elle permet d’identifier l’emplacement précis d’une erreur au lieu d’un simple « segmentation fault »
Ergonomics and Safety
- Les Optionals apportent une gestion sûre des erreurs et des valeurs nulles
- La syntaxe
defer prend en charge l’automatisation du nettoyage des ressources
slices et foreach permettent une itération sûre
- Les contracts basés sur des commentaires permettent d’exprimer les contraintes du code
- Le contexte
@pool prend en charge la libération automatique de la mémoire
Performance by default
- Il est possible d’écrire directement des vecteurs SIMD pour un contrôle au niveau matériel
- Le choix entre différents allocateurs mémoire permet un ajustement fin des performances
- La gestion des erreurs adopte une conception sans surcoût
- Bénéficie de temps de compilation rapides et des optimisations du backend LLVM
- Fournit un assembleur inline facile à utiliser
Batteries included standard library
- Fournit des structures de données standard, y compris des conteneurs dynamiques et des chaînes
- Garantit la portabilité entre plateformes grâce à des abstractions multiplateformes
- Autorise l’accès natif à la plateforme lorsque nécessaire
Leverage existing C or C++ libraries
- C3 est entièrement compatible avec l’ABI C, sans besoin de types « compatibles C » ou de déclarations de fonctions séparées
- Le code C peut être lié depuis C3, et le code C3 peut aussi être lié depuis C
Modules are simple
- Système de modules simple et intuitif
- Les réglages par défaut sont raisonnables et n’entravent pas le flux de développement
- Fournit une gestion des espaces de noms via les modules
- Une commande explicite permet de simplifier la structure d’encapsulation
- Les interfaces permettent de définir des comportements partagés
- Fournit des generic modules qui permettent d’implémenter de manière simple et claire la création de types génériques
- Prend en charge la réutilisation de structures via le sous-typage de structures
Macros without a PhD
- Les macros à la compilation peuvent être écrites sous une forme proche de fonctions ordinaires
- Prend en charge des macros conscientes des types qui comprennent les informations de type du code
- Offre une génération de code plus claire et plus puissante que le préprocesseur du C
Aucun commentaire pour le moment.