Bonsoir,
J’ai une impression et je voudrais savoir ce que vous en pensez : il est extrêmement difficile de compiler en langage machine un langage à typage dynamique.
Tous les langages à typage dynamique sont interprétés (Python, PHP, Javascript, ..), et tous les langages compilés sont à typage statique (C, C++, D, Java, Go, ..). Avez-vous un contre-exemple ?
Un autre indice en faveur de cette théorie : Cython propose de compiler des programmes écrits en Python pour les rendre plus performants. Il y a pour cela deux modes d’optimisation : une optimisation légère qui n’accélère en fait pas beaucoup le programme, et une optimisation avancée qui l’accélère bien mais qui requiert de spécifier les types des variables.
Actuellement je suis en train d’écrire un compilateur avec Flex et Bison pour un petit langage que j’ai créé. Pour compiler je transforme mon code en C, en ayant défini d’abord tout un tas de structures et de fonctions pour représenter les classes, les objets, etc. de mon langage. Puis j’appelle gcc pour compiler en machine. Mais en fait mon compilateur ne fait aucune analyse du code autre que syntaxique : tout se fait au runtime. Donc c’est un peu comme si j’avais fait en fait un interpréteur, sauf qu’il est embarqué dans l’exe. En fait je n’interprète pas mon code, mais à part l’analyse syntaxique tout se fait au runtime quand même.
J’aimerais faire un vrai compilateur, qui analyse le code pour trouver les erreurs sémantiques, pour gérer les types, etc. bref tout ce qui permettrait une vraie compilation, avec un code machine correspondant vraiment à mon code, et pas à tout un runtime qui fait qu’un hello world pèse 200ko !
Seulement mon langage est à typage dynamique, pour le moment. J’aimerais pouvoir garder le typage dynamique, mais aller vers une vraie compilation. C’est-à-dire transformer mes 4+3 en 4+3 et pas en (struct Object(4)).call_method("+", vector<struct Object>{struct Object(3)}). D’où ma question : ça me paraît compliqué parce que ça demande une analyse assez poussée. Tellement compliqué que j’ai l’impression que personne ne le fait. D’où ma question… Est-ce possible ?
Allez bonne soirée.