Question

Je veux faire un langage compilé. J'évalue actuellement backends. Jusqu'à présent, je suis à la recherche C en raison de sa rapidité d'exécution, la compilation et un petit compilateur facile à utiliser appelé TCC.

Après avoir lu les discussions ici à l'utiliser comme langue intermédiaire, je suis en train de réfléchir à la façon de le rendre compatible avec la collecte des ordures et la gestion des exceptions. Je pense Jusqu'à présent, je peux résoudre à la fois, mais avec beaucoup de frais généraux.

Voici quelques-unes de mes réflexions sur les autres backends possibles:

  1. Assemblée:. Et une douleur non portable totale de programmer dans
  2. .NET: Se sent vraiment lent. 5 secondes pour démarrer et 5 secondes pour évaluer 1 + 2 sur IronPython et Boo. Impossible d'exécuter sans grande bibliothèque.
  3. JVM: Se sent un peu lent. Pas d'accès aux bibliothèques binaires. Impossible d'exécuter sans grande bibliothèque.
  4. LLVM: Pas de support de Windows. J'entends que la taille est exécutable compilé 16 mb +
  5. C--: semble sous-développé
  6. .
  7. C ++: peut-être. Vous ne trouvez pas une belle petite libre, je peux regrouper avec.

Quelqu'un peut vous changer d'avis ou avoir plus d'ajouter à cette liste?

Modifier

Je l'ai expérimenté avec LLVM récemment. J'ai découvert qu'ils ont binaires précompilés et qu'il est possible de compiler l'assemblage natif.

http: //www.antlr. org / wiki / affichage / CS652 / Generating + Machine + + exécutable binaires + avec + LLVM

Voici les étapes:

  1. Exécuter LLVM-que sur LLVM Assemblée, ce qui donne un fichier bytecode LLVM.
  2. Exécuter llc sur le fichier bytecode LLVM pour obtenir un fichier d'assemblage.
  3. Exécuter un assembleur sur le fichier d'assemblage pour obtenir un fichier objet. (Ou course llvm-ld qui semble dépendre d'un compilateur C installé à l'extérieur)
  4. Compile à exécutable avec gcc etc.
Était-ce utile?

La solution

Avez-vous pensé à écrire un frontend pour GCC ? Je mentionne cela pour l'amour de complétude - pour autant que je sais que l'interface principale est assez complexe et le code de base est énorme et difficile à comprendre

.

D'autre part, le CCG est un produit mature avec beaucoup de programmeurs experts travaillent. À tout le moins, il fournit probablement la base la plus solide de toutes les alternatives.

Personnellement, je préférerais LLVM (architecture passionnante) ou l'IL de .NET: très, très facile à utiliser, a un grand support d'outil ( réflecteur , Cecil , Reflexil et last but not least, l'API de réflexion .NET) et deux implémentations très efficaces (à savoir la mise en œuvre canonique de Microsoft et Mono ).

Mais je ne peux pas prétendre savoir-faire dans l'une des architectures afin de prendre cette réponse avec un grain de sel.

Autres conseils

Dans ce cas LLVM est probablement un meilleur choix.

LLVM a le support de Windows, il faut juste un peu de temps pour compiler

C ++ ne vous donnera pas beaucoup, utiliser C à la place. Mais si vous voulez vous la langue à utiliser dans le Web, utilisez .NET ou Java, bien sûr qu'ils se chargent de lent, mais quand ils sont, ils aussi vite que C.

SmartEiffel nous utilisons C comme back-end.

Tcc est une très bonne option pour mais pas pour DÉVELOPPEMENT version finale (l'objet produit est équivalent à -O0 gcc)

Un autre à ajouter à la liste: Slava a récemment mis en Smalltalk sur backend Factor . Je ne l'ai pas essayé moi-même, mais j'ai le sentiment qu'il offrirait plus des fonctionnalités que vous voulez de ceux de niveau supérieur avec plus comme la taille / performances de celles de niveau inférieur.

TCC est le meilleur choix. Il est portable et il dispose d'une bibliothèque de sorte qu'il peut facilement être utilisé comme arrière-plan qui est appelé libtcc. Les executables sont plus petits que gcc et il est ANSI C.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top