• [^] # Re: kat / beagle / lucene

    Posté par (site web personnel) . En réponse à la dépêche Beagle : Un "Desktop Search" sous Linux. Évalué à 5.

    Mono/.NET implémente la CLI (Common Language Infrastructure) définie à l'ECMA, dont le nom veut bien dire ce qu'il veut dire :)

    Un langage qui veut cibler la CLI doit répondre aux CLS (Common Langage Specification) qui défini en gros les règles que doivent définir un langage pour s'intégrer avec la CLI (définition d'un objet, héritage, etc.) et rendre un composant indépendant du langage dans lequel il a été développé pour qu'il puisse être réutiliser facilement.

    Aux CLS est associé le CTS (Common Type System) qui défini les types simples partagés par tous les langages (Int32, Float, etc.), toujours dans le but de permettre l'indépendance du langage et du code produit.

    Dans la pratique avec le framework .NET on a généralement du code généré à partir des langages fournis par Microsoft : C#, VB.NET, J#, C++ managed, JScript. Auquels s'ajoutent de nombreux langages qui ne viennent pas de Microsoft (comme Delphi par exemple).

    Mono propose un compilateur C# abouti, un compilateur VB.NET qui reste à travailler, et un compilateur JScript pas vraiment mature :)

    A côté de cela d'autres projets OpenSource ont fait leur apparition pour développer d'autres langages qui ciblent notamment Mono : Nemerle ou Boo par exemple.

    La plupart des langages qui ciblait initialement le framework .NET produise du code qui tourne sans problème avec Mono, par contre il n'y a pas toujours de compilateur sous Linux. Parfois le compilateur est lui-même écrit pour .NET et tourne donc avec Mono, c'est le cas de IronPython, une implémentation de Python.

    Dans tous les cas, si un compilateur produit du code pour la CLI, il tournera sur Mono et .NET et sera compatible avec tous les autres langages/compilateur puisque l'unité de réutilisation est le code intermédiaire commun à tous les langages.

    La force de la CLI par rapport à d'autres environnement comme Java par exemple (qui peut lui aussi être ciblé par différents langages) est de fournir des spécifications qui garantissent l'interopérabilité et l'indépendance du code produit.