IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mono .NET Discussion :

Mono, une platforme de développement ? Un framework ? Un IDE ?


Sujet :

Mono .NET

  1. #1
    Membre régulier Avatar de Olve.OnRollOver
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Mars 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 52
    Points : 92
    Points
    92
    Par défaut Mono, une platforme de développement ? Un framework ? Un IDE ?
    Hello,

    M'étans mis au développement sous Unity (Environnement de développement de jeu vidéo multi-plateforme), je découvre que celui-ci embarque MONO, décrit comme une implémentation du framework .NET opensource.

    J'ai donc rédigé à des fins de " formation personnelle " un fichier PDF tentant de décrire ce qu'est MONO.

    Je vous mets le contenu ici :

    Mono est une platforme de développement conçu pour permettre aux développeurs de créer facilement des applications Cross-Plateform.
    Techniquement parlant, il s’appuie sur une implémentation open source du framework .NET de Microsoft. Basé sur les standard ECMA, son implémentation fonctionne pour C# et donc le CLR. A la base, son but est d’être un standard de l’opensource afin de briser les barrières amenant à la conception d’application pour Linux.

    Mono est composé :
    - d’un compilateur C# pour les versions de C# 1.0, 2.0, 3.0, et 4.0 (ECMA).
    Du Mono Runtime qui gère l’ECMA Common Language Infrastructure (CLI). Le runtime est composé d’un compilateur JIT (Just-i[/INDENT]n-Time), d’un compilateur AOT (Ahead-of-Time), d’un chargeur de bibliothèque, d’un garbage collector, d’un système de gestion des threads et de fonctionnalité d’intéropérabilité.
    - d’un ensemble de classe de base : ensemble de classes qui assurent une fondation solide pour la création d’application. Ces classes sont compatibles avec les classes du framework .NET de Microsoft.
    - d’une bibliothèque de classes Mono : Classes spécifiques en plus des classes de bases proposées par Microsoft. Ces dernières assurent des fonctionnalités utiles, spécialement dans la création d’application Linux : des classes pour Gtk+, les fichiers Zip, LDAP, OpenGL, Cairo, POSIX, etc.
    (à savoir que la majorité de ce descriptif est issus d'une traduction personnelle de cette page : http://mono-framework.com/What_is_Mono)

    Des experts Mono pourraient-t-ils affirmés/infirmés cette description s'il vous plais ? Je ne suis pas sûr dans quelle mesure Mono comporte un framework POMPé/imité/inspiré du framework .NET ou si c'est tout à fait autre chose par exemple...

    En retour, pour ceux que ça intéresse, je partagerais le document PDF multipages que je réalise comme support de cours pour Unity.
    Besoin de gérer différents objectifs/tâches de toutes sortes ? Faîtes un p'tit tour ici ça peut vous intéresser :
    http://www.developpez.net/forums/d14...s/#post8050107

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Initialement j'aurais dit que Mono est une implémentation libre du framework dotnet et de l'infrastructure associée (CLI : compilateur + JIT). Toutefois je crois que tu as eu raison de plutôt le qualifier de plateforme de développement dans la mesure où Mono enrichit le framework pour le support d'autres plateformes et y apporte son propre IDE.

    Pour répondre à ta question Mono s'efforce de reproduire à l'identique, bugs compris, tout le coeur du framework dotnet de MS. Et par coeur j'entends un ensemble très large de plusieurs milliers de classes jusqu'à Winforms inclus (UI à l'ancienne - formulaires).

    L'ambition initiale était surtout de permettre de faire tourner des applis conçues pour Windows sous Linux. Il s'agissait plutôt d'une compatibilité avec Windows que de bâtir une plateforme universelle, d'autant que le design de certaines parties du framework dotnet est très proche des API et concepts spécifiques à Windows et qu'il existait déjà une plateforme universelle (Java). Avec le temps Mono a évolué pour devenir une plateforme de développement multiplateforme. Je ne saurais dire les vraies raisons, à mon avis commerciales (l'open-source ne paie pas : les composants spécifiques à iOS et Android sont payants et je crois que c'est de là que Xamarin tire ses revenus). Quoi qu'il en soit, aujourd'hui la plupart des applis Windows sont développées avec WPF et Mono ne supporte pas WPF, annulant ainsi tout espoir de compatibilité avec les applis Windows.

  3. #3
    Membre régulier Avatar de Olve.OnRollOver
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Mars 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 52
    Points : 92
    Points
    92
    Par défaut
    Hello DonQuiche,

    Tout d'abord merci pour ta réponse !

    implémentation libre du framework dotnet et de l'infrastructure associée (CLI : compilateur + JIT)
    D'après ce que je sais, dans l'environnement .NET, le code .NET (disons C#) est compilé en bytecode interprété par la CLR (Common Langage Runtime) pour être exécuté sur les machines windows. J'en conclus que le CLR, à la différence du JRE, est préinstallé sur les machines windows.

    Mais alors, que fait mono ? Est-ce que son compilateur convertit le C# en autre chose que du byte code qui est interprété par un environnement d'execution propre à Linux ou est-ce que le CLR de Mono (inclu dans le CLI) est codé de manière à s’exécuter sur la plateforme linux (ce qui sous-entend qu'on installe la CLR de mono en installant Mono sur notre poste) ?
    Si c'est la deuxième solution, dois-je comprendre que Mono inclut des composants qui ne m'intéresse pas si je choisis de l'utiliser pour développer uniquement sur Windows ?
    J'avoue avoir du mal à suivre le chemin du code...

    Concernant Xamarin (qui possède Mono), en effet, ce dernier édite et vend le framework du même nom qui permet à la base de créer des app Android en C#. Ils ont probablement saisis l'occasion d'acquérir mono pour avoir plus d'audience.
    Besoin de gérer différents objectifs/tâches de toutes sortes ? Faîtes un p'tit tour ici ça peut vous intéresser :
    http://www.developpez.net/forums/d14...s/#post8050107

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    la CLI est une spec decrivant une machine virtuelle pour le .NET.
    La CLR est l'implémentation de cette CLI par Microsoft pour son environnement Windows.

    edit : c'est comme ça que je l'ai appris en tout cas.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Le bytecode n'est pas interprété, il est compilé à chaud (JIT, juste à temps, à l'exécution).
    * C'est le cas avec Mono comme avec MS.
    * Mono fournit en plus un compilateur à froid (AOT, ahead of time) qui permet si on le désire de livrer directement du code natif. Indispensable pour iOS qui interdit la compilation à l'exécution.
    * MS a également développé une solution identique mais si je ne m'abuse elle ne fonctionne que pour les applis dîtes "universelles" (utilisant les API cross-platform).


    Le CLR est effectivement pré-installé sous Windows et il en va de même sous Linux : l'exécutable débute avec un amorceur natif qui localise le runtime et lui fournit l'adresse du début du bytecode.
    * Les exécutables sont au format Windows et sont exécutables tels quels sous Windows comme sous Linux, qu'ils aient été compilés par Mono ou MS.
    * Il est impossible d'installer les versions les plus récentes du framework MS sur les anciens Windows.
    * Sur les Windows suffisamment récents les mises à jour sont automatiques, via Windows Update.


    Mono fournit :
    * L'infrastructure. Runtime, compilateurs AOT, IDE, etc. Gratuite pour l'essentiel. Une partie payante pour iOS ou Android, ou certains besoins pros.
    * Une ré-implémentation de l'essentiel du framework, compatible avec plusieurs OS. Par exemple lorsque l'utilisateur instancie une fenêtre, Mono appellera soit l'API Windows soit l'API Linux selon l'OS utilisé. Libre.
    * Des bibliothèques spécifiques à iOS ou Android pour créer des applis Android ou iOS. Payantes.
    * Évidemment tu peux te contenter d'installer uniquement les composants Windows, ce n'est en aucun cas un frein. Et dans ce cas tout sera libre et open-source.


    Xamarin a été fondé par le fondateur de Gnome et de Mono, Miguel de Icaza. Il était aussi l'ancien directeur de Mono chez Novell, principal développeur de Mono. Suite au rachat de Novell par Attachmate il s'est trouvé en désaccord avec son employeur et a levé des fonds pour leur proposer de racheter Mono, probablement avec le soutien financier de MS. L'essentiel de l'équipe est partie avec lui chez Xamarin.

  6. #6
    Membre régulier Avatar de Olve.OnRollOver
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Mars 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 52
    Points : 92
    Points
    92
    Par défaut
    Je reviens après avoir chercher un peu à comprendre différentes distinctions. Toutefois, je reviens sur une dernière chose avant que j'ai du mal à suivre, avant d'aller sur un forum plus ciblé :

    Citation Envoyé par DonQuiche Voir le message
    Le bytecode n'est pas interprété, il est compilé à chaud (JIT, juste à temps, à l'exécution).
    Je vois un peu partout que le bytecode est finalement un code binaire intermédiaire (entre le langage de programmation et l'environnement d'execution).
    Je lis sur Wikipédia que il est utilisé par les créateurs de langages de programmation en guise de code intermédiaire réduisant la dépendance vis-à-vis du matériel et facilitant son interprétation sur plusieurs architectures. Il y est aussi écris que certains compilateurs (...) utilisent le bytecode comme représentation intermédiaire avant la transformation en code machine vers l'architecture cible (x86, amd64, ARM, MIPS, PowerPC, etc.).
    Ce à quoi je crois comprendre que le bytecode est un code qui a été compilé depuis un autre langage et qui sera ensuite interprété par un environnement d'exécution. Ou alors il y a quelque chose qui n'est toujours pas clair ?

    Quoiqu'il en soit, je te remercie (ainsi que jopopmk) pour toutes ces informations sur Mono, ça éclaire pas mal la situation.

    EDIT : j'ai passé le sujet en Résolu.
    Besoin de gérer différents objectifs/tâches de toutes sortes ? Faîtes un p'tit tour ici ça peut vous intéresser :
    http://www.developpez.net/forums/d14...s/#post8050107

  7. #7
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Olve.OnRollOver Voir le message
    Ce à quoi je crois comprendre que le bytecode est un code qui a été compilé depuis un autre langage et qui sera ensuite interprété par un environnement d'exécution. Ou alors il y a quelque chose qui n'est toujours pas clair ?
    Un bytecode en général (pas seulement dotnet) est bien le fruit d'une compilation mais il peut ensuite être interprété ou compilé en code machine, au choix de la plateforme d'exécution. Dans le cas de dotnet il est compilé à chaud (ou à froid avec certains compilateurs). Mais c'est un détail d'implémentation.

    Pour te donner d'autres exemples...
    * CLang traduit le code C/C++ en un bytecode (IR) de bas-niveau pour LLVM. LLVM traduit ensuite à froid ce bytecode en code machine (ou à chaud avec certaines options). Ce bytecode permet à LLVM d'être utilisé par plusieurs langages et de cibler plusieurs architectures matérielles.
    * Les navigateurs compilent souvent le JS en un bytecode de haut-niveau à typage dynamique. Ce bytecode est interprété les premières fois, puis compilé passé un certain nombre d'exécutions.


    Plus généralement tous les compilateurs sans exception commencent par traduire le code de haut niveau (pour humains) en représentations intermédiaires (IR, pour compilateur), plus simples à analyser et manipuler, pour lesquelles il est plus simple d'écrire une couche de conversion vers telle ou telle archi matérielle (pour processeur). Un bytecode n'est qu'une forme particulière de ce type de représentation intermédiaire, optimisée pour le stockage (afin de définir un format standardisé ou d'obtenir une représentation compacte et séquentielle en mémoire pour un interpréteur performant).

    code source (humain) -> IR (compilateur) -> code machine (processeur)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/03/2009, 11h02
  2. déploiement d'une WEB application développée par Netbeans
    Par diamonds dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 28/11/2006, 19h42
  3. Réponses: 3
    Dernier message: 21/11/2006, 10h08
  4. Réponses: 7
    Dernier message: 11/09/2006, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo