web-dev-qa-db-fra.com

Langages de programmation qui se compilent en source C / C ++?

J'utilise CoffeeScript pour faciliter le développement JavaScript. C'est un langage avec une syntaxe propre qui se compile en JavaScript.

Alors, quels sont les langages de programmation établis qui se compilent en code source C/C++, pour simplifier la syntaxe et/ou améliorer les fonctionnalités?

58
Jeff

Le langage Haxe peut sortir en C++, C #, Java, JavaScript, Python (expérimental), PHP, Flash et NekoVM.

15
M.Stoffregen

Vala et Genie sont des langages qui utilisent le système de type GObject et se compilent en code C. Je ne les ai jamais utilisés mais ils ont l'air intéressants. GObject est le système de type utilisé par GTK mais je pense qu'il est séparable de GTK.

13
Sean

OOC est très nouveau mais assez agréable.

9
tsg

Il y a HipHop , qui transforme PHP en C++.

8
GWW

GHC (le compilateur Glasgow Haskell) avait une option (-fvia-c) pour compiler en C.

Je crois cependant qu'à partir de la v7, LLVM est utilisé pour générer du code natif au lieu de passer par un compilateur C externe.

8
stusmith

Citant Qt documentation:

Le compilateur de méta-objets, moc, est le programme qui gère les extensions C++ de Qt. L'outil moc lit un fichier d'en-tête C++. S'il trouve une ou plusieurs déclarations de classe qui contiennent la macro Q_OBJECT, il produit un fichier source C++ contenant le code de méta-objet pour ces classes. Entre autres choses, un code de méta-objet est requis pour le mécanisme des signaux et des créneaux horaires, les informations de type à l'exécution et le système de propriétés dynamiques. Le fichier source C++ généré par moc doit être compilé et lié à l'implémentation de la classe.

C'est donc une sorte de C++ qui se transforme en C++, je ne sais pas si cela correspond à ce que vous recherchez.

7
Vinicius Kamakura

Le langage de programmation IBM Informix 4GL passe par une transformation en plusieurs étapes en code C, qui est ensuite compilé et lié avec sa propre bibliothèque d'exécution, les bibliothèques d'exécution ESQL/C (Embedded SQL in C) et les bibliothèques C du système.

  • program.4gl - code source d'origine
  • program.4ec - Code C avec ESQL/C intégré et opérations d'entrée étendues
  • program.ec - Code C avec ESQL/C intégré
  • program.c - code C pur
  • program.o - code objet
  • program - exécutable

Le .4ec la phase est une sorte d'accident historique; à l'origine, le compilateur ESQL/C gérait à la fois les opérations d'entrée étendues et ESQL/C, mais lorsque les opérations étendues étaient supprimées du compilateur ESQL/C (lorsque la bibliothèque et le compilateur ESQL/C étaient considérablement réécrits), les opérations d'entrée étendues ont été gérées en découpant le code qui a géré cela à partir du compilateur ESQL/C d'origine.

Un bon nombre de personnes ont écrit des générateurs de code qui écrivent la source I4GL à partir d'une autre langue, ou qui prétraitent un code source étroitement lié dans I4GL avant qu'il ne soit soumis au compilateur I4GL.

4
Jonathan Leffler

LISP commun embarquable (ECL) peut compiler LISP commun en C.

4
sigjuice

Je suppose que vous pourriez écrire un backend C pour LLVM, alors vous pourriez traduire à peu près n'importe quoi en C, mais la question plus profonde serait "pourquoi?" La raison pour laquelle il n'y a pas d'outils qui le font aujourd'hui est que si vous allez compiler en C, pourquoi ne pas aller jusqu'au bout et cibler un langage de code machine intermédiaire à la place? (Par exemple, LLVM ou JVM)

Maintenant, dans les temps anciens, l'idée de compiler en C était un peu plus défendable, car il y avait un manque de langages vm décents, mais aujourd'hui il n'y a pas trop de bonnes raisons pour le faire. Cela dit, vous pouvez toujours trouver de nombreux projets autour desquels prennent certains langages interprétés et essayez de les compiler en C/C++. Par exemple, voici un python pour le compilateur C++:

http://shed-skin.blogspot.com/

3
Mikola

On pourrait faire valoir que puisque la plupart des principaux langages de programmation sont Turing-complete , ils sont en fait équivalents et les programmes écrits en eux peuvent être traduits les uns dans les autres.

Cela dit, comme d'autres personnes l'ont mentionné, il existe de nombreux langages pour lesquels il existe (ou était, au début de leur développement) des backends qui produisent du code C, car cela a supprimé les complexités impliquées dans la génération de code binaire de la mise en œuvre du langage. . Cela ne signifie nullement (jeu de mots involontaire) que ledit code était réellement lisible - il était juste plus lisible que sa forme compilée.

Quant à ma contribution à la liste, Lex et yacc "programmes" (s'ils peuvent être considérés comme tels) sont généralement transformés en code C - un désordre horrible et emmêlé , mais le code C néanmoins ...

1
thkala

J'entends que clang peut compiler C++ en C. Je doute que cela "simplifie" quoi que ce soit.

0
Kerrek SB

La plupart des langages peuvent être utilisés pour générer du code C, mais cela dépend vraiment de ce que vous essayez de faire. Voulez-vous réellement pouvoir lire le code? Essayez-vous simplement de créer des applications Windows?

Si vous recherchez un langage universellement utile et facile à apprendre, Python est toujours un bon choix, et il peut faire tout ce que C/C++ peut faire.

0
Chriszuma

Le PRO * C/C++ d'Oracle est un langage SQL intégré. Il permet l'inclusion d'instructions SQL dans C/C++ qui sont traitées par un précompilateur qui remplace les instructions SQL intégrées par des appels de fonction aux bibliothèques SQL C/C++ nécessaires. La sortie du précompilateur est du C/C++ standard qui peut ensuite être compilé en un exécutable.

http://en.wikipedia.org/wiki/Pro*C
http://download.Oracle.com/docs/cd/B19306_01/appdev.102/b14407/toc.htm

0
dave

Un sous-ensemble de Matlab (Embedded Matlab) peut être compilé en C. Vous avez besoin de la boîte à outils du codeur intégré.

0
edgar.holleis