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.
Réponses
Trop de publicités?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.
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.
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.
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 !