Le CoreRT de Microsoft transforme C # en C ++ multiplateforme

Microsoft modifie lentement la chaîne d'outils .Net pour permettre la compilation anticipée des applications sur des plates-formes sur lesquelles il n'y a pas de chaîne d'outils .Net.

Le projet Open Source CoreRT supprime l'utilisation du CLR (Command Line Runtime) standard de .Net pour exécuter des applications. Au lieu de cela, il génère du code C ++ à partir du code d'une application .Net C # donnée, qui peut ensuite être compilé et lié sur n'importe quelle plate-forme cible prenant en charge C ++.

Dans un article sur le blog de développement AlphaGeek de Microsoft, Microsoft a brièvement exposé ses plans sur le fonctionnement de CoreRT, ainsi que sa justification pour sa création.

«Si je veux vraiment écrire du code C # et le faire fonctionner sur un nouvel appareil IoT», a écrit Microsoft, «je n'ai pas d'options tant que le RyuJIT n'est pas capable de générer du code machine qui fonctionne avec ce processeur et système opérateur." En recompilant C # vers C ++, les développeurs .Net peuvent ensuite livrer leurs applications sans avoir à attendre que .Net soit déployé sur une plate-forme donnée, explique Microsoft.

Microsoft a noté qu'il avait fait un processus important vers cet objectif au cours de l'année, bien qu'il ait reconnu que la tâche est plus facile à dire qu'à faire. Le problème le plus important est commun aux projets qui impliquent la transposition d'une langue dans une autre. C ++ et .Net n'ont pas de correspondance univoque entre leurs fonctionnalités - la syntaxe, les structures de données, la logique du langage, etc. Par conséquent, CoreRT doit mapper avec élégance certaines fonctionnalités .Net en C ++.

Un autre projet majeur qui transpile un langage en C ++ pour accélérer son exécution est Nuitka, qui convertit les programmes Python en C ++. Nuitka est un projet en cours qui fait face à bon nombre des mêmes problèmes que CoreRT et a peut-être encore plus de mal à les concilier. La nature dynamique de Python rend difficile la conversion en un langage compilé à l'avance, car chaque construction dans le langage est potentiellement un objet avec des propriétés hautement mutables. C # est moins problématique de ce point de vue, car il utilise le typage statique pour les variables, mais comme indiqué ci-dessus, il présente toujours une foule de difficultés.

Il y a beaucoup de choses sur CoreRT qui découlent directement du réalignement en cours de Microsoft autour des technologies open source et non-Microsoft populaires. Mais Microsoft a toujours été pragmatique sur les raisons pour lesquelles il le fait, et ici le pragmatisme consiste à voir comment les applications .Net peuvent fonctionner sur des plates-formes et dans des écosystèmes qui ne les supportaient pas auparavant.

CoreRT peut théoriquement élargir la portée de l'écosystème .Net sans que Microsoft ait à faire des efforts excessifs. Il est plus facile d'écrire un système de transpilation unique de C # vers C ++ que de créer des environnements d'exécution pour un nombre quelconque d'autres plates-formes cibles. Bien sûr, des tiers peuvent créer de tels environnements d'exécution grâce au .Net qui est désormais une préoccupation open source. Mais le plan de Microsoft est de trouver un moyen de les sauver - et lui-même - le problème.