3 points par GN⁺ 2024-10-25 | 1 commentaires | Partager sur WhatsApp
  • Pretty C est un nouveau langage de script compatible avec C, qui fournit des fonctionnalités comme le typage dynamique, l’itération générique et le suivi des ressources
  • Il conserve une compatibilité descendante avec C ainsi qu’avec toutes ses bibliothèques
  • Il s’inspire de Lua, Python, JavaScript et Lisp.

Objectifs

  • Offrir aux développeurs C beaucoup de sucre syntaxique pour rendre C plus simple à utiliser.
  • Se positionner comme le langage de script ultime capable de remplacer plusieurs langages comme Lua, Python, JavaScript ou Ruby.
  • Transformer n’importe quelle base de code en environnement plus accueillant pour les débutants en n’incluant qu’un seul fichier d’en-tête.

Pour commencer

  • Vous pouvez cloner le dépôt GitHub ou copier le fichier pretty.h pour l’utiliser.

Fonctionnalités de confort proposées

En-têtes standard inclus

  • stdbool.h fournit true, false et bool
  • stdint.h fournit des types entiers à largeur fixe
  • iso646.h fournit des alternatives d’opérateurs plus lisibles

Macros simples

  • Fournit des macros comme max, min, len, default, limit, between, divisible, etc.

Nouveaux types

  • Fournit des alias de type comme string, byte, bytes, any, etc.
  • Fournit des raccourcis entiers comme uchar, ushort, uint, ulong, etc.

Nouveaux alias

  • Fournit des alias d’opérateurs comme eq, is, bitnot, bitxor, etc.
  • Fournit des opérateurs de comparaison comme below, above, upto, downto, etc.
  • Fournit des prédicats numériques/de données comme even, odd, positive, negative, zero, empty, etc.
  • Fournit des alias comme nil, until, elif, ifnt, repeat, done~/~finish, pass, etc.

Inférence de type (GCC, Clang ou C23+)

  • L’inférence de type est possible avec les mots-clés var, let, local

Sortie générique (C11+)

  • print et println permettent d’afficher des données de types variés

Égalité générique (C11+)

  • equal permet de comparer des données de types variés

Opérateur ternaire plus élégant

  • Des mots-clés comme when, then, other, otherwise, only, otherwhen permettent d’utiliser un opérateur ternaire plus lisible

Macro for

  • Des macros comme foreach, forthese, fortimes, forrange, forrangeby fournissent différents schémas d’itération

Macros d’allocation

  • Des macros comme new, vector, delete permettent d’allouer et de libérer simplement la mémoire

Utilitaires de bloc

  • Fournit des utilitaires de bloc comme lambda, with, defer, try, catch, etc.

Le résumé de GN⁺

Pretty C est un projet qui ajoute diverses formes de sucre syntaxique au langage C afin d’aider les développeurs à écrire du code plus facilement. En particulier, il conserve la rétrocompatibilité avec C tout en proposant de nombreuses fonctionnalités inspirées de langages comme Lua, Python et JavaScript. Ces fonctionnalités peuvent aider les développeurs C à écrire un code plus concis et plus lisible. Parmi les projets offrant des capacités similaires, on peut citer Zig et Nim.

1 commentaires

 
GN⁺ 2024-10-25
Avis Hacker News
  • La tradition de créer des DSL dans C est ancienne. Stephen Bourne voulait écrire un shell ressemblant à ALGOL en utilisant le préprocesseur de C
  • On ne sait pas clairement s’il s’agit d’une blague ou si l’auteur est confus. Ce n’est pas du scripting, et le texte prétend introduire un typage fort alors qu’en réalité il ne fait rien concernant les types. Il introduit des alias d’opérateurs prétendument inspirés de Lua et Lisp, mais ils n’existent dans aucun des deux langages
  • Le projet se présente comme un langage de scripting, mais il faut compiler les programmes. En y ajoutant CINT, on pourrait avoir une exécution immédiate et un REPL
  • Cela ajoute assez de sucre syntaxique à C pour provoquer chez les développeurs C une crise cardiaque diabétique. C’est amusant
  • Cela refait les mêmes erreurs que Python 2. Les chaînes de caractères et les octets ne sont pas le même type et ne devraient pas être traités comme tels
  • Si cela vous intéresse, vous aimerez aussi libcello.h
  • Je me souviens avoir inspecté une base de code C++ qui ressemblait à du Java écrit en C++. Tout était nommé en camelCase, il y avait des getters et des setters pour toutes les variables de classe, et des interfaces partout
  • Il y a quelques éléments à ajouter à CNoEvil et ogw. J’ai l’impression qu’il y en a toujours plus chaque fois que ce projet réapparaît tous les quelques mois
  • unless est plus lisible que ifnt
  • Je me demande s’il est possible de tisser le Readme dans pretty.h. Et si les blocs de code du fichier org sont exhaustifs. J’aime la manière dont le Readme explique la démarche intellectuelle