IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

C3 : un langage de programmation système basé sur le C, permet un accès sécurisé aux tableaux,
Les conteneurs de haut niveau et manipulation des chaînes de caractères

Le , par Bruno

44PARTAGES

25  0 
C3 le langage de type C qui se veut être une évolution du C, plutôt qu'un langage complètement nouveau. En tant qu'alternative dans la niche C/C++, il vise à être rapide et proche du standard.

Grâce à la compatibilité totale de l'ABI avec le C, il est possible de combiner C et C3 dans le même projet sans effort. Comme démonstration, vkQuake, le portage de Quake d'id Software utilisant Vulkan au lieu d'OpenGL pour le rendu, a été compilé avec une petite partie du code converti en C3 et compilé avec le compilateur c3c. vkQuake est basé sur les portages populaires QuakeSpasm et QuakeSpasm-Spiked et fait tourner tous les mods compatibles avec QuakeSpasm comme Arcane Dimensions.


Le C ne dispose que d'un support de bibliothèque très limité : il faut ajouter des chemins de recherche pour les fichiers d'en-tête, inclure certains fichiers d'en-tête et établir des liens avec des bibliothèques statiques ou dynamiques. Ces étapes sont toutes séparées. Si vous appelez des fonctions de bibliothèque sans les lier, vous pouvez avoir des références non définies.

C2 a corrigé ce problème en faisant de l'utilisation de la bibliothèque une chose totalement automatique. Vous utilisez la bibliothèque ou vous ne l'utilisez pas. De plus, C2 supporte les bibliothèques sources. Il s'agit de bibliothèques qui sont utilisées sous forme de source (=C2). Cela permet une meilleure intégration et optimisation, en particulier lors de l'utilisation de nombreuses fonctions "simples" qui ne font que renvoyer un membre d'une structure opaque, par exemple. Cela permet également aux développeurs d'organiser leurs archives de code d'une manière beaucoup plus facile.

C3 est un langage de programmation système basé sur le C. C'est une évolution du C permettant les mêmes paradigmes et conservant la même syntaxe dans la mesure du possible. C3 a commencé comme une extension du langage C2 par Bas van den Berg. Il a évolué de manière significative, non seulement au niveau de la syntaxe mais aussi en ce qui concerne la gestion des erreurs, les macros, les génériques et les chaînes de caractères.

Le code suivant montre des modules génériques

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module stack <Type>;
// Above: the parameterized type is applied to the entire module.

struct Stack
{
    usize capacity;
    usize size;
    Type* elems;
}

// The type methods offers dot syntax calls,
// so this function can either be called 
// Stack.push(&my_stack, ...) or
// my_stack.push(...)
fn void Stack.push(Stack* this, Type element)
{
    if (this.capacity == this.size)
    {
        this.capacity *= 2;
        this.elems = mem::realloc(this.elems, Type.sizeof * this.capacity);
    }
    this.elems[this.size++] = element;
}

fn Type Stack.pop(Stack* this)
{
    assert(this.size > 0);
    return this.elems[--this.size];
}

fn bool Stack.empty(Stack* this)
{
    return !this.size;
}

Principes de conception

Le travail de conception de C3 est terminé, à part la mise au point de certains détails, comme l'asm en ligne. Au fur et à mesure que le travail sur la bibliothèque standard progresse, des modifications et des améliorations du langage seront apportées. L'instruction asm permet d'inclure des instructions d'assemblage directement dans le code C. Cela peut aider à maximiser les performances dans un code sensible au temps ou à accéder à des instructions d'assemblage qui ne sont pas facilement accessibles aux programmes C.

Installation

Installation sur Windows

  • Visual Studio 17 2022 doit être installé ;
  • Installer CMake ;
  • Clonez le dépôt github de C3C : git clone "https://github.com/c3lang/c3c.git" ;
  • Entrez dans le répertoire C3C cd c3c. ;
  • Configurer le build CMake cmake -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release ;
  • Construire : cmake --build build --config Release ;
  • Vous devriez maintenant avoir le c3c.exe.
  • Vous devriez maintenant avoir un exécutable c3c.

Installation sur Ubuntu 20.10

  • Disposer d’un compilateur C qui gère C11 et un compilateur C++, comme GCC ou Clang. Git doit également être installé ;
  • Installez CMake : sudo apt install cmake ;
  • Installez LLVM 12 (ou supérieur : C3C supporte LLVM 12-15) : sudo apt-get install clang-12 zlib1g zlib1g-dev libllvm12 llvm-12 llvm-12-dev llvm-12-runtime liblld-12-dev liblld-12 ;
  • Clonez le dépôt github de C3C : git clone "https://github.com/c3lang/c3c.git" ;
  • Entrez dans le répertoire C3C cd c3c. ;
  • Créez un répertoire de construction mkdir build ;
  • Changez de répertoire pour le répertoire de construction cd build ;
  • Configurer CMake build : cmake ...;
  • Build : cmake --build .
Vous devriez maintenant avoir un exécutable c3c.

Inventé au début des années 1970 pour réécrire Unix, 50 ans après, le monde reste toujours alimenté par la programmation C. Et ce, malgré la prédominance des langages de niveau supérieur. Le langage de programmation C continue de donner du pouvoir au monde et il y a de nombreuses raisons de croire que la programmation en C restera active pendant longtemps.

Le compilateur C3 peut être trouvé ICI

Source : C3 designer

Et vous ?

Avez-vous connu la programmation C ?

Quel langage utilisez-vous aujourd'hui ? Pourquoi ?

Quelle appréciation faites-vous du langage C ?

C2 et C3 se présentent comme des évolutions du C. Que pensez vous de ces langages ?

Selon vous, quel avenir pour la programmation C ?

Voir aussi :

Microsoft célèbre les 20 ans de .NET, son Framework de développement, les dépôts .NET seraient dans le top 30 des projets open source à plus haute vélocité sur GitHub depuis 2017

Microsoft a publié la version stable de Visual Studio 2022 avec une nouvelle expérience de rechargement à chaud pour les applications natives C++, cette version est disponible uniquement en 64 bits

Un développeur publie un langage de programmation qui peut être traduit automatiquement en C, C++, C#, Java, JavaScript, etc., avec une traduction rapide et sans machine virtuelle

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 12/07/2022 à 6:56
Je vais lui faire le même reproche qu'au C2 : il a le cul entre deux chaise. Il y a trop d'incompatibilités syntaxiques et techniques pour que son principal argument, à savoir la proximité avec le C, ne soit vraiment pertinent. Et du coup il se retrouve opposé à des langages comme Rust ou Zig qui proposent bien plus.
17  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 12/07/2022 à 14:56
Citation Envoyé par Sve@r Voir le message
Le C a été conçu pour aller le plus vite possible. C'est son credo, son fondement. Pour atteindre ce but il est obligé de rester très bas niveau (donc une syntaxe peu évoluée nécessitant 150 instructions pour faire des trucs qui en prennent 15 dans d'autres langages comme Python, VB, Ruby, etc) et surtout il ne vérifie rien concernant la logique des instructions. Ce qui autorise le codeur à taper dans tab[100] d'un tableau de 10 éléments s'il en a envie (résultats à ses risques).
C'est quand même un peu plus compliqué que ça : aujourd'hui le Rust peut atteindre des performances similaires au C sans recourir à des fonctionnalités au comportement potentiellement indéfinis (ou alors de manière très cadrée).
Les comportements dangereux du C, c'est surtout la conséquence du fait qu'il a été créé à une époque où les compilateurs ne pouvaient se permettre le niveau d'analyse et d'optimisation actuels, car ils tournaient sur des machines avec au mieux quelques Mo de mémoire et quelques Mhz de fréquence d'horloge. Les compilateurs actuels peuvent optimiser bien mieux sans forcément prendre autant de risque, par exemple en supprimant automatiquement les "bound check" inutiles.

Citation Envoyé par Sve@r Voir le message
C'est la même remarque que Uther à propos du cul entre deux chaises, mais en plus détaillée.

Je vais détailler mon propos car ma vision est quand même quelque peu différente.

Ce que les annonces des projets C2 et C3 laissaient supposer au premier abord, c'est qu'il visent quelque chose de similaire à ce que Microsoft avait esquissé avec le Checked C : une évolution du C qui resterait dans le cadre de la compatibilité ascendante, quitte à déprécier à terme certaines parties du langage. Ça pourrait tout à fait se faire sans impacter lourdement les performances. Je pense qu'il y a une niche intéressante à prendre sur ce segment.

Malheureusement, quand on regarde les détails, on constate qu'ils se sont plutôt positionné comme un langage alternatif, certes proche du C, mais tout de même assez différent pour nécessiter une réécriture du code, ce que le Zig ou le Rust font déjà depuis un moment en proposant bien plus en matière de fonctionnalités et de propreté (particulièrement Rust), et qu'ils sont eux capable de s’intégrer avec du C (particulièrement Zig).
9  0 
Avatar de e-ric
Membre expert https://www.developpez.com
Le 13/07/2022 à 9:31
Hi all

En ce qui concerne les goto, Pascal le permet toujours également, ça peut servir mais avec parcimonie.

La question est : est-il pertinent de sortir un nouveau langage pour si peu de choses qui sont déjà couvertes par d'autres.
La coséquence de tout cela est d'augmenter l'entropie (façon polie e parler du bordel ambiant en informatique) et de disperser les efforts, il vaudrait mieux investir en améliorant les choses existantes.

Cdlt
7  0 
Avatar de abriotde
Membre chevronné https://www.developpez.com
Le 12/07/2022 à 14:10
Je vais lui faire le même reproche qu'au C2 : il a le cul entre deux chaise
Totalement vrai et en plus de ça il arrive après que Rust ait commencé à faire son trou. Pour qu'il perce il lui faudrait un argument enthousiasmant (Comme Rust) ou un soutiens majeur (Comme Go et Swift).

Pour qu'il ait vraiment une chance de percer il faudrait qu'il soit compatible à 99% avec le C existant et qu'il y apporte une sécurité supplémentaire réel pour attirer des grands entreprises à minima.
6  0 
Avatar de Fleur en plastique
Membre extrêmement actif https://www.developpez.com
Le 12/07/2022 à 11:04
Je suis d'accord avec Uther.

Vivement le C-4 pour faire sauter la baraque. Avec des ajouts syntaxiques nécessaires pour faciliter la vie, mais en conservant la totale compatibilité avec le C. Moi, ça me brancherait.
4  0 
Avatar de Pyramidev
Expert confirmé https://www.developpez.com
Le 12/07/2022 à 13:49
Ça m'étonnerait que C3 réussisse face à Rust.

Citation Envoyé par Sve@r Voir le message
Et là donc arrive des gus qui nous disent "écoutez les gars, on a inventé un langage aussi pourri que le C mais qui vous préviendra si vous dépassez la zone ; mais bon en retour il sera moins rapide évidemment puisqu'il doit checker chaque fois que vous tapez dans la zone" hé bien ces gars là ils n'ont rien compris au C ni à ceux qui font du C.
D'après la documentation de C3, si on le compile en mode release, alors l'accès à un tableau avec un indice hors limites est un comportement indéfini. C'est en mode "safe build" qu'il y aura un contrôle à l'exécution. Lis la page : http://www.c3-lang.org/undefinedbehaviour/
4  0 
Avatar de Sve@r
Expert éminent sénior https://www.developpez.com
Le 12/07/2022 à 12:57
Mouais bof. C'est oublier complètement le but du C.

Le C a été conçu pour aller le plus vite possible. C'est son credo, son fondement. Pour atteindre ce but il est obligé de rester très bas niveau (donc une syntaxe peu évoluée nécessitant 150 instructions pour faire des trucs qui en prennent 15 dans d'autres langages comme Python, VB, Ruby, etc) et surtout il ne vérifie rien concernant la logique des instructions. Ce qui autorise le codeur à taper dans tab[100] d'un tableau de 10 éléments s'il en a envie (résultats à ses risques).
Tout ça on l'accepte. On accepte de se taper des trucs à rallonge, de relire 500 fois son code pour être certain qu'on ne dépasse pas, et de rien biter au code du copain parce qu'il n'a pas la même façon de gérer ses pointeurs que moi mais on a en retour un truc qui carbure. Bien entendu il faut savoir gérer et adapter son besoin. Le type qui prend du C pour créer un logiciel de comptabilité il n'a clairement rien compris.

Et là donc arrive des gus qui nous disent "écoutez les gars, on a inventé un langage aussi pourri que le C mais qui vous préviendra si vous dépassez la zone ; mais bon en retour il sera moins rapide évidemment puisqu'il doit checker chaque fois que vous tapez dans la zone" hé bien ces gars là ils n'ont rien compris au C ni à ceux qui font du C.
Si je fais du C c'est pour la vitesse, donc je veux la vitesse max et je suis suffisamment grand pour gérer tout seul mes zones mémoires. Et si la vitesse optimale ne m'intéresse pas plus que ça mais que je veux un langage plus confortable, plus sécuritaire, qui me permette par exemple d'agrandir un tableau en une instruction, d'associer et traiter n tableaux en parallèle ou de créer un T2 par compréhension de T1, avec des structures sympa comme des dictionnaires ou ensembles, etc alors je me tournerai vers un langage dédié à tout ça.

C'est la même remarque que Uther à propos du cul entre deux chaises, mais en plus détaillée.
9  6 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 15/07/2022 à 6:33
Citation Envoyé par Sve@r Voir le message
Le C n'a pas été créé pour apporter de la sécurité mais pour faire de la vitesse. Son credo c'est "le programmeur sait ce qu'il fait". Evidemment s'il ne sait pas ce qu'il fait...
Sauf que dans la pratique ça se traduit par "le programmeur doit être infaillible" et on sait bien que même les meilleurs ne le sont pas quand le code devient un minimum complexe.

Citation Envoyé par Sve@r Voir le message
Les bugs style "attention tu dépasses" ok ils sont repérés. Les bugs style "je modifie la variable X alors que j'aurais dû modifier la variable Y" eux ils ne le sont pas, et aucun langage ne les repèrera jamais. Et ce sont les pires.
Je vois pas en quoi ils seraient pire, la probabilité qu'ils entrainent un mauvais fonctionnement qui sera identifié lors des tests est bien plus élevée et surtout la probabilité qu'ils entrainent une exécution de code arbitraire est quasi nulle.

Citation Envoyé par Sve@r Voir le message
On ne parle pas de vitesse de développement mais de vitesse d'exécution. Je travaille en temps réel, je fais de l'analyse de data lue par des machines diverses, je suis content de pouvoir en analyser 10000/s là où un autre langage n'en analyserait qie 8000/s. Mais comme je l'ai dit, il n'y a que des langages en adéquation ou peu conseillés pour des buts particuliers.
Ta vision du spectre de ce qui est faisable entre le C et le Python est assez limité. Les Langages comme le Rust ou l'Ada peuvent apporter plus de sécurité sans forcément sacrifier les performances.

Citation Envoyé par Sve@r Voir le message
Je pense que tu vois le monde informatique comme ce forum, rempli de gens motivés, doués et altruistes, ne pensant qu'à aider ; alors qu'en réalité elle est pour moitié remplie de pourris qui cherchent toujours à gratter le plus possible en en faisant le moins possible et pour moitié de ce qui reste d'incompétents notoires. Ok les altruistes il y en a aussi, et comme eux ils sont plébiscités ils sortent facilement dans la lumière mais cela n'empêche pas qu'ils sont une minorité. Mais la fiabilité d'un logiciel n'est pas (enfin pas forcément) liée au langage utilisé.
Raison de plus, si on ne peut pas faire confiance à l'humain, d'avoir des outils qui limitent le type d'erreur qu'il peut commettre. Bien sur que le fiabilité d'un programme ne se limite pas au langage utilisé. Mais le langage et clairement un outil de plus en plus important de la chaine, comme les outils d'analyse statique et dynamique, la politique de relecture, les outils de mitigation d'attaque, le fuzzing, le suivi de la supply chain ...
3  0 
Avatar de moldavi
Membre extrêmement actif https://www.developpez.com
Le 15/07/2022 à 22:16
Bonjour.

C'est clair que le problème d'inclusion en C a toujours été une purge pour les débutants, sans parler des histoires d'inclusion circulaire.

Mais bon, un nouveau langage pour ça... Pourquoi ne pas améliorer le langage C directement. Encore des guerres d'égo, et des vas-y que je te réinvente la roue, et que je te complexifie l'écosystème.

Lorsqu'il y aura 50000 langages de programmation, ça va être compliqué pour les universitaires de choisir, mais aussi pour les professionnels.
3  0 
Avatar de Madmac
Membre extrêmement actif https://www.developpez.com
Le 20/07/2022 à 3:24
Citation Envoyé par jbrosset Voir le message
"Aucun langage n'est parfait" : tout à fait d'accord.
Mais ils sont loin d'être tous bons.

Comme on l'a dit plusieurs fois dans cette discussion, C a été conçu avec l'objectif, peut-être oserais-je dire l'obsession de la performance.
Il était avait tout un outil pour assembler des ligne de langage machine. Et créer des pilotes pour des cartes électroniques et des commandes pour les OS. Les types utilisés se limitaient à indiquer le nombre de bits des variables. Et s'ils était signés ou non. Et pour ce type de travail, le langage est parfait. Ce langage n'a jamais été pensé pour faire des applications.

S'imaginer qu'il est possible de faire un langage qui fait tout pour tous le monde est le fond du problème. La seule véritable solution pour simplifier le travail des programmeurs serait de faire évoluer les langages de vers une syntaxe commune avec des nom de fonction standardiser pour les tableaux , les chaines de caractère et les flux.
3  0