Le langage Ć et ses caractéristiques
Ć est un langage destiné aux programmeurs ayant une grande expérience dans plusieurs langues. Il suit le principe POLA (principe de la moindre surprise ou "principle of least astonishment"). La syntaxe est proche de celle de C# (langage orienté objet développé Microsoft). En fait, la coloration syntaxique de C# fonctionne très bien pour Ć. Cependant, l'auteur insiste sur le fait que le langage de programmation Ć n'est pas un clone de C# ni un sous-ensemble de celui-ci. Les différences proviennent de la nécessité de disposer d'une traduction entièrement automatisée vers un code C et JavaScript efficace, en particulier.
Selon l'auteur du langage, contrairement à la plupart des langages qui existent, Ć ne prétend pas être le meilleur langage de programmation universel. Au lieu de cela, il résout un problème spécifique : comment écrire du code qui peut être utilisé de manière pratique à partir de C, C++, C#, Java, JavaScript, Python, Swift et OpenCL en même temps. Par exemple, si vous avez inventé un nouveau format de compression, vous pouvez l'implémenter dans Ć et demander au traducteur automatique cito de générer le code source dans les langues mentionnées, afin que les programmeurs de ces langues puissent utiliser votre code.
Ć est conçu comme un langage orienté objet, car la plupart des langages cibles sont orientés objet et vous êtes probablement familier avec ce paradigme. L'auteur note que cela peut être considéré comme une amélioration par rapport à C, néanmoins la sortie C orientée objet est plutôt simple à utiliser pour les programmeurs C. Les dépendances de la bibliothèque d'exécution sont minimes. La sortie C est souvent une paire autonome de fichiers .c/.h contenant du code C99 portable et lisible par l'homme. De même, les sorties dans d'autres langages ne dépendent de rien d'autre que du langage standard. Il y a deux exceptions :
- si le code Ć utilise des expressions régulières - List, Dictionary ou SortedDictionary - la sortie C s'appuie sur les implémentations GLib de ceux-ci ;
- Math.FusedMultiplyAdd est implémenté en Python avec pyfma.
La gestion de la mémoire est native au langage cible. Un ramasse-miettes sera utilisé s'il est disponible dans le langage cible. Sinon (en C et C++), les objets et les tableaux sont alloués sur la pile pour des performances maximales ou sur le tas pour plus de flexibilité. Les allocations sur le tas utilisent des pointeurs intelligents C++.
Quels sont les cas d'utilisation de Ć ?
L'auteur de Ć estime que les programmeurs ont tendance à éviter l'Unicode dans les noms de fichiers. C'est pourquoi les fichiers sources Ć ont l'extension de nom de fichier .ci au lieu de .ć. En polonais, "ci" se prononce de manière identique à "ć". La description de Ć indique le contenu du fichier source doit être encodé en UTF-8 avec une BOM optionnelle. En outre, il indique également que la plupart du temps, les espaces blancs sont insignifiants dans le code source Ć. Il existe des commentaires d'une seule ligne de // jusqu'à la fin de la ligne et des commentaires multilignes encadrés par /* */. Exemple de code Ć :
Code Ć : | Sélectionner tout |
1 2 3 4 5 6 7 8 | public class HelloCi { public static string GetMessage() { return "Hello, world!"; } } |
Traduisez ensuite dans les langues cibles en utilisant cito sur la ligne de commande :
Code Ć : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | cito -o hello.c hello.ci cito -o hello.cpp hello.ci cito -o hello.cs hello.ci cito -o HelloCi.java hello.ci # Java enforces filenames for public classes cito -o hello.js hello.ci cito -o hello.py hello.ci cito -o hello.swift hello.ci cito -o hello.ts hello.ci cito -o hello.d.ts hello.ci # TypeScript declarations only cito -o hello.cl hello.ci |
Selon l'auteur, le code traduit est léger (pas de machine virtuelle, d'émulation, ni de dépendances), lisible par l'homme et s'adapte bien à la langue cible, y compris les conventions de dénomination et les commentaires de documentation. La description ajoute que Ć n'est pas un langage de programmation à usage général. Il est plutôt destiné à l'implémentation de bibliothèques portables et réutilisables.
Les types de données présents dans Ć
Dans Ć, on retrouve les types de données habituels, notamment :
- le type booléen : le type booléen est appelé bool et ses littéraux sont true et false. Les opérateurs booléens sont ! (pas), && (et), || (ou) et l'opérateur ternaire x ? y : z (si x alors y sinon z) ;
- les entiers : la plupart du temps, vous utiliserez le type de nombre entier 32 bits int. Pour les nombres plus importants, utilisez le type long 64 bits. Toutefois, JavaScript ne prend pas en charge les entiers 64 bits, mais uniquement les nombres à virgule flottante 64 bits, de sorte que les opérations sur les long sont sujettes à une perte de précision lorsqu'on utilise JavaScript ;
- les nombres à virgule flottante : il existe deux types de nombres à virgule flottante : float et double ;
- les énumérations : les énumérations ont des valeurs définies par l'utilisateur, comme dans les autres langages de programmation ;
- dans Ć il y a deux types de données de chaîne : "le stockage des chaînes de caractères", écrit comme string() ; et "la référence à une chaîne de caractères", écrite simplement comme string. Cette distinction permet une traduction directe en C et C++, qui n'ont pas de ramasse-miettes. En C++, le stockage des chaînes de caractères est représenté par std::string, tandis que la référence aux chaînes de caractères en C++17 est std::string_view. En C, le stockage des chaînes de caractères est un char* pointant vers une chaîne de caractères allouée et la référence à une chaîne de caractères est const char*. Dans les autres langages, String est utilisé à la fois pour le stockage et la référence des chaînes.
Les tableaux
Les tableaux sont des collections de taille fixe, où chaque élément a le même type et peut être accédé en O(1) temps. Les types de tableaux Ć sont :
- le stockage dans un tableau, écrit comme T[n] où T est le type d'élément et n est la longueur constante de compilation ;
- référence dynamique de tableau, écrite sous la forme T[]# ;
- référence de tableau en lecture seule, écrite sous la forme T[] ;
- référence de tableau en lecture-écriture, écrite sous la forme T[]!.
Les classes
Les classes sont des types composés définis par l'utilisateur.
Code Ć : | Sélectionner tout |
1 2 3 4 5 | classe Animal { // le contenu de la classe (membres) va ici } |
Les classes peuvent être :
- static, ce qui signifie qu'elles ne contiennent que des méthodes et des constantes statiques ;
- abstract, c'est-à-dire qu'elles ne peuvent pas être instanciées et servent uniquement de classes de base ;
- sealed, ce qui signifie qu'elles ne peuvent pas être dérivées. C'est le terme C# pour le terme final de Java.
Les membres d'une classe peuvent être :
- des champs : les données contenues dans chaque objet ;
- des méthodes : code spécifique à la classe ;
- des constructeurs : code à exécuter lors de la création de l'objet ;
- des constantes : valeurs nommées lors de la compilation.
Chaque membre a une visibilité :
- private est la visibilité par défaut, ce qui signifie que le membre n'est visible que par les autres membres de la classe. Il n'y a pas de mot-clé private ;
- protected signifie que le membre est visible pour cette classe et ses sous-classes ;
- internal signifie que le membre est visible pour le code Ć compilé avec lui ;
- public signifie que la visibilité est illimitée.
Les méthodes
Les méthodes sont définies en spécifiant dans l'ordre :
- la visibilité (public, internal, prtected ou private par défaut) ;
- le type d'appel (static, abstract, virtual, override, sealed ou normal par défaut) ;
- le type de retour (ou void si pas de valeur de retour) ;
- le nom de la méthode ;
- un point d'exclamation ( ! ) si la méthode est un mutateur ;
- la liste des paramètres entre parenthèses, séparés par des virgules ;
- le corps de la méthode, sauf si la méthode est abstraite.
Les objets
Une fois qu'une classe est définie, vous pouvez l'instancier, c'est-à-dire créer des objets en utilisant la classe comme modèle. Comme pour les tableaux, il existe quatre types associés à chaque classe C :
- C() est le stockage sous forme d'objet ;
- C# est une référence d'objet dynamique ;
- C est une référence d'objet en lecture seule ;
- C! est une référence d'objet en lecture-écriture.
Source : Ć, Description de Ć
Et vous ?
Quel est votre avis sur le sujet ?
Que pensez-vous du langage de programmation Ć ?
Selon vous, quelle est l'utilité d'un tel langage de programmation ?
Voir aussi
C2Rust : un outil qui permet de faire la traduction et la refactorisation de votre code écrit en langage C vers le langage Rust
Jolie, un langage de programmation orienté services. Il permet d'agréger directement les API de services dans un serveur Web
Prisma : un ORM de nouvelle génération pour Node.js et TypeScript pour concurrencer TypeORM et Sequelize et devenir la norme de l'industrie