CoreRT CodeGen : transpiler du code C# en C++ pour générer du code natif

Par:
fredericmazue

lun, 24/10/2016 - 16:07

Actuellement la plate-forme .NET est ainsi faite que du code C# (ou autre langage supporté par la plate-forrme) est compilé en un langage intermédiaire (IL) qui a l'exécution, est évalué par un compilateur JustInTime (RyuJIT), pour générer un code natif qui s'exécutera pourvu que le système d'exploitation hôte dispose d'une implémentation de l'environnement d'exécution CLR.

Tout cela est très bien, mais que faire de son code C# quand on voudrait le voir tourner par exemple sur un objet connecté pour lequel il n'existe pas d'implémentation de CLR ?

Un billet de blog nous apprend que Microsoft travaille à résoudre ce problème. La solution s'appelle CoreRT CodeGen et consiste en un transpileur qui génère du code C++ à partir du code C# qui lui est soumis. Ce code C++ peut ensuite être compilé normalement. On obtient alors un exécutable natif qui peut s'exécuter sur le système cible. Une stratégie, précise Microsoft, qui ouvre les portes aux développements sur du hardware sans attendre que celui-ci dispose d'implémentation de .NET.

Bien sûr cela ne va pas sans difficultés. Ainsi le billet souligne que fonctionnalités de C++ et .NET n'ont pas de correspondance directe et qu'il est nécessaire de mapper correctement les fonctionnalités de .NET vers des appels C++. Autre problème notable (parmi d'autres), quand plusieurs classes .NET implémentent une même interface, le transpileur doit trouver le moyen de savoir quelle classe doit être concrètement instanciée et passée en tant qu'interface.