Developpez.com

Le Club des Développeurs et IT Pro

Microsoft souhaite transpiler le code C# en code C++

Afin d'exécuter les programmes .Net nativement sur les plateformes dépourvues du framework .Net

Le 2016-10-20 19:34:01, par Olivier Famien, Chroniqueur Actualités
Lorsque vous écrivez un programme qui ne s’exécute pas nativement, vous aurez besoin d’installer des outils pour exécuter ce programme. Cela peut être une machine virtuelle, une chaîne de compilation et bien d’autres encore.

Microsoft qui mise beaucoup sur son langage de développement C# souhaite porter ce langage au-delà des limites qu’on lui connaît actuellement. Lorsque vous développez une application .Net, un des avantages liés à ce langage est qu’il bénéficie d’une prise en charge sur les plateformes Linux, Windows, OS X, Android, iOS. Pour que ces programmes puissent s’exécuter sur ces plateformes, ils s’appuient sur un ensemble d’outils .Net disponibles pour ces plateformes.

Dans les faits, cela signifie que le code ne s’exécute pas nativement directement, mais s’appuie sur la machine virtuelle CLR (Common Language Runtime) du framework .Net afin d’exécuter le code intermédiaire généré.

Cela constitue déjà un grand avantage, mais si l’envie vous prenait d’écrire une application en C# pour une plateforme sur laquelle il n'existe pas d'implémentation .Net, vous serez simplement bien obligé de vous tourner vers d’autres langages ou d’autres solutions.

Microsoft souhaite donc lever cette limite afin d’utiliser son langage C# là où les outils .Net ne sont pas disponibles. Pour cela, la firme a annoncé récemment qu’elle travaille ardemment sur son environnement d’exécution CoreRT afin d’offrir une compilation native à 100 % pour les programmes écrits en C#.

Actuellement, CoreRT intègre en son sein le compilateur à la volée RyuJIT qui permet de compiler le bytecode en code natif spécifique à chaque système d’exploitation (Linux, Windows, OS X). C’est sur ce principe que sont basées les applications universelles Windows.

Pour porter C# encore plus loin, c’est-à-dire dans des environnements non équipés d’outils .Net, Microsoft envisage de transpiler le code .Net en code C++ qui pourrait être compilé par la suite avec un compilateur approprié pour cibler une plateforme quelconque. Comme Microsoft le souligne, « ;cette stratégie ouvre des portes pour le développement matériel parce que l’on n’aura plus besoin d’attendre qu’un ingénieur Microsoft étende nos compilateurs pour soutenir un nouveau matériel ou un nouveau système d’exploitation afin de permettre aux développeurs .NET de travailler avec votre produit ;». Ce projet promet donc de grandes choses une fois sorti du laboratoire.

Toutefois, l’on est encore loin du compte, car C++ n’offre pas de correspondance directe pour les outils .Net. Les ingénieurs Microsoft ainsi que la communauté open source devront trouver le moyen de faire correspondre les fonctionnalités .Net à C++.

De même, plusieurs classes .Net peuvent implémenter la même interface, ce qui peut être déroutant pour le transpileur. À ce niveau-là également, les mainteneurs du projet CoreRT doivent permettre au transpileur d’être assez intelligent pour savoir quelle classe doit être instanciée et passée comme interface. Enfin, une classe .Net peut implémenter des méthodes virtuelles qui appartiennent à une autre classe ou superclasse. Il va falloir également trouver le moyen de conserver ces interactions en C++.

Tout comme CoreRT, plusieurs autres projets dont Nuitka (transpileur Python vers C++) ont vu le jour afin d’offrir aux langages de programmation une passerelle vers C++ pour améliorer les performances et aussi pouvoir porter ces langage vers d’autres plateformes. Mais à l'instar de CoreRT, plusieurs difficultés parsèment le chemin menant à la réussite de ces projets.

Source : Blog Microsoft

Et vous ?

Que pensez-vous de ce projet ;?

Voir aussi

Microsoft dévoile la feuille de route de .NET Core, l'entreprise compte apporter des concepts de programmation fonctionnelle aux langages .NET
Microsoft annonce la disponibilité générale de .NET Core 1.0 et ASP.NET Core 1.0 pour Windows, OS X et Linux
ASP.NET 5 devient ASP.NET Core 1 et .Net Core 5 est maintenant appelé .NET Core 1.0 pour mieux se démarquer des anciens frameworks

La Rubrique Dotnet, Forum Dotnet, Cours et tutoriels Dotnet, FAQ Dotnet
  Discussion forum
20 commentaires
  • Pierre Louis Chevalier
    Expert éminent sénior
    Envoyé par jpouly
    J'ai du mal à comprendre pourquoi M$ veut absolument que le .net se transpose en C++.
    Parce que c'est peut être plus simple de créer ce transpileur et avoir accès à un très grand nombre de plateformes que de créer une clr pour toutes les plateformes.
  • tomlev
    Rédacteur/Modérateur
    Envoyé par 23JFK
    Facile, en abandonnant le projet parce que c'est infaisable. Ce ne sera pas le premier grand projet à finir à la poubelle.
    Avec ce genre de raisonnement on en serait encore à taper sur des silex pour faire du feu... Si tu abandonnes un projet dès que tu rencontres une difficulté, tu vas pas aller bien loin .
  • zobal
    Membre confirmé
    Envoyé par MABROUKI
    bonjour

    La transpiration c'est ce qui est fait déjà dans le C++ Cli, ce qui est une véritable usine gaz ,dont la corvée est laissé au programmeur ...!!!
    ça doit être pour cela que ça fait suer
  • tomlev
    Rédacteur/Modérateur
    Bonne idée, je suis curieux de voir ce que ça va donner. Je me demande notamment comment il vont gérer certaines features comme la réflexion, les métadonnées (attributs), la génération dynamique de code, le GC...
  • redcurve
    Membre extrêmement actif
    Je pense que MS devrait déterrer S# et reprendre certains mécanisme de Bartok ils ont utilisés ça pour Singularity
  • MABROUKI
    Expert confirmé
    bonjour

    La transpiration c'est ce qui est fait déjà dans le C++ Cli, ce qui est une véritable usine gaz ,dont la corvée est laissé au programmeur ...!!!
  • ac_wingless
    Membre confirmé
    Envoyé par dorinf
    Cela ne suffit malheureusement pas. Le seul moyen pour un ramasse-miette de savoir si une référence peut ou non être collectée, c'est de vérifier si elle est accessible. Le nombre de pointeurs référençant cette variable donne une information, mais qui n'est pas suffisante. Une référence non référencée est collectable. Une référence référencée peut l'être... ou pas ! Les pointeurs, aussi intelligents soient ils, ne permettent pas de résoudre cette problématique.
    En fait si, c'est le mécanisme proposé par C++ pour résoudre le cas des données circulaires (collectables mais référencées).
  • François DORIN
    Expert éminent sénior
    Envoyé par ac_wingless
    En fait si, c'est le mécanisme proposé par C++ pour résoudre le cas des données circulaires (collectables mais référencées).
    Si c'était réellement aussi simple, je doute fortement qu'il y aurait autant de travaux sur les ramasses-miettes, qu'ils soient encore améliorés et optimisés après des décennies de recherche, qu'ils catégorisent les objets en fonction de leur durée de vie ou de leur taille alors qu'il "suffit" d'utiliser des weak pointeurs... La libération des ressources serait quasi-instantanée et ne bloquerait donc jamais une application pendant plusieurs centaines de ms, voire plus.
  • jostroland
    Futur Membre du Club
    Je pense que Microsoft l'a déjà fait.

    Merci de consulter la video suivante : (précisément à la 39min)
  • captaindj
    Membre régulier
    Ça peut être pas mal! Il est vrai que mricrosoft devra gérer de nombreux problèmes avant que cela puisse fonctionner , Et encore c'est pas dit que ce projet voit le jour !