37 votes

Langage de type CoffeeScript pour C/C++

Je suis à la recherche d'un langage qui offre les mêmes fonctionnalités que Coffeescript, mais pour C/C++. Je veux dire un langage qui convertit le code en C, mais lisible, tout comme CoffeeScript convertit en Javascript, lisible et tout.

22voto

Trevor Burnham Points 43199

Je pense que c'est possible, et même souhaitable (j'utilise à contrecœur le C++ pour écrire des modules natifs de Node.js), mais plus difficile qu'avec un langage de plus haut niveau comme JavaScript.

Ce que vous demandez, c'est un langage qui fournirait des sucres syntaxiques sans sacrifier les performances ou la flexibilité. Certains sucres syntaxiques (par exemple, l'espacement syntaxique ou le style Ruby def/end au lieu des accolades) serait trivial à ajouter. Mais si l'on ajoute quelque chose de plus avancé, on se heurte à deux obstacles majeurs : le typage statique et le ramassage des déchets.

Par exemple, disons que vous souhaitez ajouter des retours implicites. Cela semble être une petite fonctionnalité, mais réfléchissez-y : Pour que cette fonctionnalité soit utile, vous devriez - au minimum - lancer une erreur de compilation lorsque la valeur de la dernière expression ne correspond pas au type de retour de la fonction. Cela signifie que votre compilateur doit inspecter une ligne telle que

a->b

et déterminer de quel type il s'agit. C'est possible en principe, mais c'est beaucoup plus de travail que ce que fait le compilateur CoffeeScript.

Ou disons que vous avez ajouté des compréhensions de listes. Cela signifie que vous allouez un tableau dont la longueur n'est pas connue au moment de la compilation, ce qui signifie que vous devrez plus tard le désallouer vous-même. Le sucre syntaxique peut donc vous nuire. La règle "Si vous malloc il, vous free cela" ne fonctionne pas si le compilateur ajoute dans le fichier malloc pour vous, à moins qu'il ne puisse trouver où mettre la free (ce qui, encore une fois, est généralement possible mais demanderait beaucoup de travail).

Ainsi, même si j'adorerais que quelqu'un donne à C++ le traitement CoffeeScript, je ne m'attends pas à ce que cela se produise de sitôt, voire jamais. Je pense qu'il est plus probable que le monde finira par passer à quelque chose comme D ou Go pour la programmation au niveau du système.

13voto

maxhawkins Points 400

Je pense que OOC est probablement ce qui se rapproche le plus de Coffeescript pour le C. C'est un langage de programmation avec beaucoup des caractéristiques que l'on attend des langages dynamiques (objets, fonctions de première classe, syntaxe propre) qui se compile directement en C99.

http://ooc-lang.org/

11voto

yangzh Points 116

SugarCpp est un langage qui peut compiler en C++11. Il devrait correspondre à ce que vous recherchez. Visitez https://github.com/curimit/SugarCpp pour plus de détails.

10voto

JanKanis Points 850

Il manque un élément à la liste de Jacinthe que vous devriez connaître : Vala / Génie est un compilateur ciblant le C avec la bibliothèque GObject implémentant des objets, écrit par Gnome. Vala est une syntaxe de type C#, et Genie une syntaxe de type Python, mais pour le reste, il s'agit du même système. Il a été créé parce que le C nu + GObject était devenu trop difficile à utiliser pour les gars de Gnome. Vala fait des objets et de la gestion automatique de la mémoire basée sur le comptage des références ou le suivi de la propriété, et beaucoup d'autres choses que l'on attendrait d'un langage comme C#.

Quant à la propriété de type CoffeeScript, je juste scie qu'il y avait une fonctionnalité expérimentale pour désactiver la dépendance du code généré sur GObject, de sorte qu'il génère juste un simple C sans aucune dépendance d'exécution. Ce faisant, il désactive un certain nombre de fonctionnalités OO plus avancées, mais il vous laisse quand même avec une meilleure syntaxe, un système d'objets de base et une gestion (semi-)automatique de la mémoire.

Je ne sais pas si la sortie est lisible, mais si vous la passez dans une jolie imprimante, elle pourrait être très proche de ce que vous recherchez.

6voto

Jacinda Points 1575

Pour Python spécifiquement, jetez un coup d'œil à cette question : Convertir un programme Python en code C/C++ ?

Ils mentionnent Se débarrasser de la peau qui prendra un sous-ensemble de python pur et le convertira en code C++ autonome.

Cython est typiquement utilisé pour créer des modules d'extension Python, mais peut créer des programmes autonomes si l'interprète Python est incorporé . Cela ne ressemble pas à ce que vous recherchez, cependant.

Cython est basé sur Pyrex et ils sont compatibles l'un avec l'autre à bien des égards.

Pour certaines des autres langues que vous avez mentionnées, il semble y avoir des projets similaires : Ruby et PHP . Toba pour Java (bien qu'il ne soit plus maintenu), Marst pour Algol, BCX pour BASIC, COB2C , PtoC pour le Pascal et je devrais probablement m'arrêter là avant que cela ne se transforme en "Liste de convertisseurs de Foo en C/C++".

J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X