L'auto-compilation est un bon test pour l'efficacité de traduction d'un compilateur: combien de temps faut-il à un compilateur donné pour se compiler? Pour C ++, cela prend beaucoup de temps (heures?). Par comparaison, un compilateur Pascal / Modula-2 / Oberon se compilerait en moins d' une seconde sur une machine moderne [1].
Go a été inspiré par ces langues, mais certaines des principales raisons de cette efficacité incluent:
Une syntaxe clairement définie et mathématiquement saine, pour un balayage et une analyse efficaces.
Un langage de type sécurisé et compilé statiquement qui utilise une compilation séparée avec dépendance et vérification de type à travers les limites du module, pour éviter la relecture inutile des fichiers d'en-tête et la recompilation d'autres modules - par opposition à une compilation indépendante comme en C / C ++ où aucune vérification inter-modules de ce type n'est effectuée par le compilateur (d'où la nécessité de relire tous ces fichiers d'en-tête encore et encore, même pour un simple programme "hello world" sur une seule ligne).
Une implémentation efficace du compilateur (par exemple, analyse descendante à passage unique, descente récursive) - ce qui bien sûr est grandement aidé par les points 1 et 2 ci-dessus.
Ces principes ont déjà été connus et pleinement mis en œuvre dans les années 1970 et 1980 dans des langues comme Mesa, Ada, Modula-2 / Oberon et plusieurs autres, et ne font que maintenant (dans les années 2010) leur chemin vers des langues modernes comme Go (Google) , Swift (Apple), C # (Microsoft) et plusieurs autres.
Espérons que ce sera bientôt la norme et non l'exception. Pour y arriver, deux choses doivent se produire:
Premièrement, les fournisseurs de plates-formes logicielles telles que Google, Microsoft et Apple devraient commencer par encourager les développeurs d' applications à utiliser la nouvelle méthodologie de compilation, tout en leur permettant de réutiliser leur base de code existante. C'est ce qu'Apple essaie maintenant de faire avec le langage de programmation Swift, qui peut coexister avec Objective-C (car il utilise le même environnement d'exécution).
Deuxièmement, les plates-formes logicielles sous-jacentes elles-mêmes devraient éventuellement être réécrites au fil du temps en utilisant ces principes, tout en repensant simultanément la hiérarchie des modules dans le processus pour les rendre moins monolithiques. C'est bien sûr une tâche gigantesque et pourrait bien prendre la majeure partie d'une décennie (s'ils sont assez courageux pour le faire - ce que je ne suis pas du tout sûr dans le cas de Google).
Dans tous les cas, c'est la plate-forme qui stimule l'adoption du langage, et non l'inverse.
Références:
[1] http://www.inf.ethz.ch/personal/wirth/ProjectOberon/PO.System.pdf , page 6: "Le compilateur se compile en 3 secondes environ". Cette citation est pour une carte de développement FPGA Xilinx Spartan-3 à faible coût fonctionnant à une fréquence d'horloge de 25 MHz et disposant de 1 Mo de mémoire principale. De celui-ci peut facilement extrapoler à "moins de 1 seconde" pour un processeur moderne fonctionnant à une fréquence d'horloge bien au-dessus de 1 GHz et plusieurs Go de mémoire principale (c'est-à-dire plusieurs ordres de grandeur plus puissants que la carte FPGA Xilinx Spartan-3), même en tenant compte des vitesses d'E / S. Déjà en 1990, quand Oberon était exécuté sur un processeur NS32X32 à 25 MHz avec 2-4 Mo de mémoire principale, le compilateur s'est compilé en quelques secondes. La notion d' attendre réellementpour que le compilateur termine un cycle de compilation était complètement inconnu des programmeurs Oberon même à l'époque. Pour les programmes typiques, il a toujours fallu plus de temps pour retirer le doigt du bouton de la souris qui a déclenché la commande de compilation que d'attendre que le compilateur termine la compilation qui vient d'être déclenchée. C'était une satisfaction vraiment instantanée, avec des temps d'attente presque nuls. Et la qualité du code produit, même si elle n'était pas toujours complètement comparable aux meilleurs compilateurs disponibles à l'époque, était remarquablement bonne pour la plupart des tâches et tout à fait acceptable en général.