Programmez! #239 PDF pour nos abonnés papier

Abonnés papier : en raison de la situation due au coronavirus, des retards sont à prévoir en ce qui concerne la distribution de Programmez! #239 par La Poste. C'est pourquoi nous mettons Programmez! #239 PDF à disposition dans votre compte utilisateur sous un onglet dédié en attendant. Pour y accéder, il vous suffit de saisir votre n° d'abonné (ou éventuellement le ressaisir comme pour l'accès aux archives) dans votre compte utilisateur, si ce n'est pas déjà fait. Si vous ne connaissez par votre numéro d'abonné, vous pouvez l'obtenir à cette page.

En cas de difficultés, contactez le webmaster à partir du formulaire de contact de ce site.

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.