[Mono] L'heure des annonces *UPDATED*
Et bien ça ne chôme toujours pas, quelques annonces rapides:
- Compilateur C# 4 complet: billet de l'annonce
- Variables dynamiques
- Paramètres optionnels
- Paramètres nommés
- Covariance et contravariance
- Mono Touch 1.4 est sorti: Release Note
- Durée démérage pouvant être réduite jusqu'à moitié
- Taille de binaire réduite de 30%
- Débogage sur Ipod/Iphone plus complet et déteriorant moins les performances
- Nouveaux controlles COCOA liés (AudioToolbox)
- Nombreuses corections de bogues (y compris pour monodevelop)
- etc...
- Mono 2.4.3 est sorti: Release Note
- Meilleur support de MSbuild (SLN...)
- Amélioration de la gestion de la mémoire.
- Amélioration du débogueur, apache mode mono, ASP.NET, Windows Form, ADO.NET...
- De nombreuses corrections de bogues.
- Mono 2.6 qui était anoncé pour le mois dernier devrait sortir d'ici peu... Pour rappel...
*Update*
[Mono] 2.6 revet son plus beau costume, il sort ce mois ci.
Cette version aura pris son temps pour sortir. Elle devrait arriver d'ici la fin de ce mois s'il n'y a pas de contre-temps. Elle embarquera des nouveautés intéressante, mais assez peu par rapport à ce qu'ont pu apporter précédentes versions qui avaient pourtant un cycle de développement plus court. La raison est simple, les employés de Novell qui développent Mono ont eu beaucoup à faire avec Mono-Touch, les outils d'intégration Visual Studio, MonoDevelop... Bref je soupçonne l'équipe d'avoir utilisé pas mal de leur temps sur des produits commerciaux dérivés qui espérons donnera une meilleure visibilité de Mono et lui garantiront un avenir plus sain.
Rassurez vous, il y a tout de même des nouveautés intéressantes à se mettre sous la dent, en voilà une liste non exhaustive.
Linq 2 SQL
C'est un premier pas de Linq vers base de données pour Mono... Mais il reste encore du travail, le but étant d'avoir la même API que System.Data.Linq.dll, mais pour un choix assez large de base de données à savoir:
- Microsoft SQL Server
- SQLite
- Oracle
- MySQL
- PostgreSQL
- Firebird
- Ingres
Pour des raisons de compatibilité le connecteur par défaut de la chaine de connexion est SQL server. Un exemple simple pour utiliser sqlite:
var conn = new SqliteConnection (
"DbLinqProvider=Sqlite;" +
"Data Source=Northwind.db3"
);
var db = new DataContext (conn);
Il manque encore la prise en charge des requêtes compilées, d'appel de certaines méthodes en milieu de requêtes SELECT et globalement des lacunes au niveau de la compatibilité avec le LINQ to SQL de Microsoft.
.NET 4 (ParallelFx, DLR)
Mono 2.6 commence à implémenter C# 4.0 et .NET 4.0, peut être amené à changer significativement si Microsoft en fait de même d'ici leur version finale de .NET 4.0.
Grâce à Jérémie Laval et ses deux saisons de Google Summer of Code, nous avons de ParallelFX le Parallel Linq, Task Parallel Library, Data Structures For Coordination.
Pour l'instant il faut explicitement activer le mode .NET4.0 dans mono. Que ce soit pour faire des compilations de C#4 ou l'exécution en profitant des modifications pour les variables dynamiques.
LLVM
LLVM est un interpréteur poussé par Apple, d'autres boites dont google s'intéressent de prêt à ce projet. Au lieu d'une Machine virtuelle standard, il est plus comme un "Processeur virtuel" qui a un assembleur propre. LLVM une fois que le code dans son assembleur lui est transmis fait des optimisations et génère éventuellement du code Natif.
Citation de Macpuissancedix ( cas du langage C/Objective-C ) http://www.macpuissancedix.com/Sir_06_09.php
Clang/LLVM apportent deux attributs importants que vous êtes en droit d'attendre d'un nouveau compilateur au goût du jour : des délais de compilation plus courts et des exécutables plus rapides. Selon les tests d'Apple avec ses propres applications (ex: iCal, Address Book ou même XCode) et des applications tierces (ex: Adium ou Growl)... Clang compile à peu près trois fois plus vite que GCC 4.2. Quant à la vitesse du produit fini, LLVM en arrière plan, [...] les exécutables sont 5% à 25% plus rapides que ceux créés par GCC 4.2.
Mono peut compiler du langage intermédiaire vers de l'assembleur LLVM. Ça permet au cout d'une première compilation plus longue et plus gourmande et d'un temps de démarrage supérieur d'augmenter significativement les performances de votre solution. Pour les parties de Code que LLVM ne compile pas encore, l'application, à l'exécution saura automatiquement appeler le JIT de mono.

C# Shell
La complétion est arrivée dans le C# shell! C'est vrai qu'on s'habitue vite à ces outils... C'était vraiment le détail qui en faisait un outil plus élitiste que purement pratique.
Xbuild
Xbuild est la réimplémentation de la méthode standard de compilation de Visual Studio.
Des avancées ont été menées autour de Xbuild, l'implémentation de MSBuild. les valeurs ajoutées:
-
Prise en charge des projets ASP.NET à la fois WebApplication et WebSite projects.
-
Des possibilités d'extentions de Xbuild ont été ajoutées.
-
Les assemblies locales sont mieux détectées.
-
Les évènements Pre/PostBuildEvents du projet sont désormais gérés.
-
Et de nombreux bugs de compatibilités qui restaient...
SIMD
Le Namespace SIMD a été revu pour avoir des noms répondant mieux aux conventions de nommage de Mono, quelques instructions SSE ont été ajoutées, et enfin, l'API a été implémentée pour les systèmes installés en 64 bits.
Mono.Tasklet.Continuation
C'est une nouvelle classe qui elle n'est pas portable .NET car requiert des modifications du Runtime, permet de gérer des états, faire des "Rollback" pour revenir à un lieu d'exécution pré-établi...
Autre :
- Possibilité de débogage distant (Utilisé par Mono-Tools for VisualStudio et MonoTouch)
- De nombreuses corrections de bugs notamment dans l'api winform comme à chaque release.
-
Une bien meilleure prise en charge des classes génériques en AOT (compilation complète).
-
System.IO.Packaging qui c'est popularisé dans les projets .NET est passé de la branche Olive de mono à sa distribution principale. C'est un fait rare, la branche Olive est la branche ou le projet mono fait avancer à petite vitesse les librairies compatibles MS qui n'intéresse pas grand monde directement... On trouve encore dans cette branche de délaissés WCF, WPF, les Workflow.
Remarque
Il ne serait pas étonnant que Mono 3.0 qui succèdera à Mono 2.6 et 2.8 se coordonne avec Gnome 3.0 qui lui a une date de sortie fixée en septembre 2010. Le rythme des sorties de mono ayant ralenti, on peut s'attendre à un rythme comparable avec une sortie tous les 6 mois qui est la façon de faire de gnome et Ubuntu. Trêve de spéculations, l'avenir nous en dira bien assez.
[Mono] s'offre un nouveau site
Et oui, Novell a compris le marché potentiel autour de mono et compte bien mettre en avant ses applications commerciales, pour se faire: un nouveau site plus clair, plus professionnel, avec une boutique en ce mois où vas bientôt sortir Mono 2.6.
Sur leur boutique en ligne sont proposés:
- Leur set d'outils d'intégration pour Visual Studio (100 $ pour un développeur indépendant, 249$ pour un développeur en entreprise)
- Mono Touch pour développement Iphone (399$ pour un développeur indépendant, 999$ pour un développeur en entreprise)
- Support pour applications Mono sur serveurs Suse Linux Enterprise Server (200$ / ans)
Pour les simples curieux de la communauté, toutes ces applications sont accessibles en versions d'évalutation d'un mois
J'ai pu découvrir cette page claire sur la compatibilité entre Mono et .NET: http://www.mono-project.com/Compatibility
Vous remarquerez que derière mon tite accrocheur c'est pricipalement un changement de skin et de page d'acceuil...
Voici les deux pages d'accueils côte à côte. Original trois occurrences du mot "Buy" sur un site de projet libre?
Cet investissement de Novell sur des usages Commerciaux de mono garantissent au projet un développement financé plus sereinement et donc certainement une évolution plus pérenne.
[Mono] MonoDevelop 2.2, une grande évolution... Dès à présent et en perspective!
Mono est un projet de Novell. Ce dernier commence à y trouver des moyens de rentrer dans ses frais... Les produits commerciaux de Novell autour de Mono étaient pour l'instant limités au support professionnel des applications Mono sur Suse Linux Enterprise Server.
Désormais, une nouvelle application commerciale leur est venue à l'esprit: MonoTouch. Cette application permet de coder en C# avec Mono une Application pour IPhone. Pour respecter les règles de l'apple-store
le code se compile entièrement (plus d'interpréteur) ce qui ne permet
pas encore d'utiliser toutes les possibilités du langage. MonoTouch est donc un ToolKit commercial qui permet cela.
Pour
Novell c'est une occasion en or pour mettre en avant MonoDevelop qui
est l'EDI C# du projet Mono. Il sera très bientôt multiplateforme.
MacOSX, Windows et Linux officiellement supportés... La version MacOSX
aura une extension pour le développement IPhone. Pour pouvoir créer des applications IPhone avec il faudra certainement se procurer l'outil commercial auprès de Novell.
Maintenant
que cet EDI est un enjeu de promotion important pour le produit
commercial MonoTouch de Novell, on va voir les améliorations qui ont
déjà étés apportés pour la mouture bêta de MonoDevelop 2.2.
- Car il n'est jamais agréable d'avoir un EDI très lourd (Eclipse), il a été fait de nombreuses optimisations de performance...
- Possibilité sous Windows d'utiliser directement les outils .NET de micrsoft y compris le deboguer avec les outils du framework .NET .
- Choix du framework cible (version de .NET ou de Mono) par options de projet, mais aussi "Run With" pour tester directement la rétro compatibilité.
- Formatage et comportement de l'EDI réglable fonction du MIME.
- Possibilité d'ajouter et de gérer des dossier où il ira chercher des assemblies.
- Possibilité lors de la suppression d'un projet de supprimer tout ou parti des fichiers qu'il contient du disque.
- Début de prise en charge de .NET et C# 4.0.
- Sauvegarde Automatique, si vous avez une coupure de courant, à la réouverture de MonoDevelop, il vous proposera de restaurer la version que vous avez éditée ou de garder la version du disque.
- La gestion des Snipets a été revue entièrement pour être comparable à celle de Visual Studio (possibilité de lier des champs de textes et autre dans l'extrait automatique).
- Règles de formatage de code plus avancées et réglable
directement au niveau du projet (pour rester homogène dans le travail
d'équipe) et la possibilité de lancer la mise en forme automatique d'une source ne
respectant pas nos règles.
- Complétion sensible aux acronymes, par exmple BREH pourra proposer dans sa liste de complétion ButtonReleaseEventHandler.
- Mode Vim plus complet.
- Possibilité de compléter à partir des mots du ficher à la manière de Emacs ou Vim.
- Amélioration de la génération de code contextuelle.
- Ajout automatisé de using quand c'est nécessaire, avec proposition du quel importer en cas de classes de mêmes noms.
- Retrait automatisé de using lorsqu'ils ne sont pas utilisés.
- Tri des directives using par ordre Alphabétique.
- Possibilité pour l'EDI de scinder automatiquement un fichier contenant plusieurs classes.
- Raccourci lorsque l'on est sur une expression pour créer une variable locale qui en contiendra le retour.
- Possibilité
d'extraire un bout de code sélectionné dans une méthode, les variables
en arguments et autre seront automatiquement choisi fonction des
besoins de la sélection.
- Intégration du shell C# lors du débogue, pour débogage d'applications multitâche,
cela permet de lancer les méthodes que l'on veut, d'injecter du code
pendant une pause à la ligne que l'on débogue, et de voir les valeurs
de valeurs de ce que l'on veut.
- Débuts du support du débogage de l'ASP.NET
- Extentions T4, MVC et Moonlight.
- Une extension de Monodevelop pour coder en Python avec auto-complétion, recommandations en cas de code non conventionnel...
- Génération de Makefiles
- Améliorations de la complétion en Vala, C/C++, C#.
Et encore cette liste n'est pas exhaustive!
Note détaillée de version officielle
Téléchargements
[Mono] 2.4 packagé pour Jaunty Jackalope. Contraintes du packaging.
Beaucoup de personnes dans la communauté Ubuntu n'aime pas compiler
depuis les sources tous les programmes qu'ils doivent mettre, pour leur
faciliter la vie il y a un gestionnaire de paquet.
Linux
compte un nombre important de distributions, de gestionnaires et de
formats de paquets, d'arborescences différentes ce qui fait que les
projets ont souvent une distribution supporté et la communauté de chaque distribution crée des packages
ce qui peut prendre du temps. Pour l'instant Ubuntu devait installer
Mono 2.4 par compilation et n'as jamais eu de paquets pour mono 2.2 (il
n'y a eu que trois mois d'écart entre les deux).
Mono étant un projet Novell la distribution supportée par le projet est évidemment OpenSuse, La communauté Debian a par la suite créé, adapté, testé un paquet qui a été repris par la communnauté Ubuntu qui est une distribution qui hérite beaucoup de Debian. (Même gestionnaire de paquet)
Cannonical société qui dirige et sponsorise Ubuntu propose les PPA (personal package archive) qui permet aux gens qui en font la demande d'hébergé un dépôt de 1Go gratuitement sur leurs serveurs:
la page de monoxide et leur package
Novell a su faire une chose plus intuitive et plus pratique côté utilisateur car
leur système intègre un moteur de recherche et un format de fichier
particulier qui permet d'indiquer un dépôt à ajouter, éventuellement
des dépôts dépendants, un paquet à installer le tout automatisé en un
clic. (exemple)
Côté développeur ils ont aussi fait un bon
travail, un service qui accède à notre gestionnaire de version et qui
compile régulièrement pour plusieurs processeurs et plusieurs
plateformes notre application (si les fichiers de configurations pour
toutes ces distributions sont adéquats
évidemment) et héberge ces paquets que ce soit pour Mandriva, OpenSuse,
Suse, Debian, Ubuntu, Fedora, RedHat... et permet même en déclinaisons
pour plusieurs versions de ces OS.
Les paquets sont automatiquement compilés en packages, déployés et testés. Dans le cas où tout fonctionne correctement la version obtenue remplace la dernière qui a étés hébergée sur le dépôt.
Côté Packaging MacOS et Windows ont un gros aventage: l'union de leurs communautés respectives sur une unique plateforme logicielle, souvent un unique type de processeur (PPC étant de plus en plus délaissé par Apple).
Plus d'informations sur BuildService de Novell (en)
[Mono] Une première entorse au C#?
Comme tout sur terre est perfectible, y compris les technologies de développement Microsoft, quand une communauté de plusieurs personnes l'utilisent, des suggestions naissent...
Les expressions lambda sont un bon outil, mais parfois, notamment quand on veut indiquer une fonction sans argument... le gain de lisibilité est limité...
Voici la proposition:
// mono/.NET C#
button.Clicked += (o, a) => Console.WriteLine ("ouch!");
Func myFunc = () => "blarg";
// mono C# (nécessite un patch, bientôt dans la branche principale ?)
button.Clicked +=> Console.WriteLine ("ouch!");
Func myFunc => "blarg";
Ainsi, en contexte d'attribution, "=>" peut créer et attribuer une expression lambda et "+=>" permet d'abonner un évènnement à une expression lambda. Rien de bien nouveau en soit, les méthodes anonymes du C#2.0 avec le mot clef delegate permettait aussi de faire sans parenthèses...
Bref un petit opérateur sans prétention risque donc d'enrichir notre compilateur et notre shell C#...
(Je vous l'avais promis et c'est vrai que j'ai tardé, mais le shell C# étant facile à installer sous ubuntu Karmic Koala, j'espère très bientôt pouvoir vous le présenter!)
Microsoft ouvre son standart.
Suite à une annonce faite par Peter Galli de chez Microsoft les normes ECMA du C# et du CLI passent sous les termes de "Microsoft Community Promise"
Les gens trouvant que microsoft était un véritable danger potentiel pour les gens qui développaient en C# pour Linux dans la mesure où ils pouvaient potentiellement faire valoir leurs brevets pour plomber Mono, La partie sur le C# et la CLI s'est éclaircie...
Mono implémentant plus que ces spécifications (ADO.NET, WinForm...) deux versions de mono seront proposés, évidemment une version sans litige avec des brevets Microsoftet une version complète qui a une plus grande compatibilité avec les applications .NET.
[Mono] Un pas en avant vers les développeurs sous windows
Vous aimez bien économiser sur votre hébergement en prenant des serveur linux mais vous voulez faire un site en ASP.NET? Vous aimeriez être sûr que votre application avec mono pourrait tourner sous mac OSX? Vous codez avec Visual Studio et ne comptez pas changer d'IDE?
Le projet mono ne vous oublie pas, vous pouvez simplement depuis Visual
Studio en quelque clics lancer l'application .NET sur votre framework
mono, sur un Mono distant, débugger dans une instance Mono distante ou même faire un contrôle du support des classes appelées grâce à MoMA... Mono n'est pas une pâle copie mais une ré-implémentation de la norme avec des librairies en plus et d'autre en moins, c'est pourquoi il faut rester conscient de la necessité de tests avant de passer sur mono une application qui paraissait fonctionelles sur .NET...
Si vous voulez faire du GTK#, que vous êtes sur Windows et que votre
objectif est une application .NET multiplateforme, peut être qu'une des fonctionnalités de MonoDevelop vous a
tapé dans l'oeil, rassurez vous, une version Windows de MonoDevelop est
aussi en développement et déjà téléchargeable, cette version tourne
avec la plateforme .NET de Microsoft et des bibliothèques Mono
complémentaires. Le travail de portage pour utiliser le débugger de .NET et enlever les dépendances de gnome (pour recentrer vers du GTK)
Au final, l'équipe de Mono travaille à vous amener son travail pour vous aider à faire des applications multiplateforme.
MonoDevelop pour Windows
Plugin VisualStudio
Google Summer Of code: De bonnes perspectives pour Mono
Neuf personnes se sont engagées à contribuer au projet Mono auprès d'un mentor de l'équipe Mono et de Google. Leurs contributions seront financées par le projet Google Summer Of Code.
Ils sont tous venus avec des projets prédéfinis qui seront probablement intégrés à Mono en 2.6 ou 2.8 en fonction de la qualité du rendu. Voici les points pour lesquel les utilisateurs du projet Mono pourront remercier Google très bien tôt:
- Une amélioration et mise à jour de Mono ParallelFX. Éventuellement le développement d'un outil d'annalyse d'applications multi-tâches tel que Chess (utilisé pour répérer les éventuels problèmes de partages de mémoire entre les tâches).
- Un outil d'optimisation du langage intermédiaire (CIL) c'est à dire du .exe ou .dll semi-compilé qui contrairement au compilateur temps réel (JIT) peut affiner ses optimisations quitte à prendre plus de temps.
- Création d'une librairie GIT. GIT est un gestionnaire de versions créé par Linus Torvalds. Git est à SVN ce que bittorent est au Warez.
- Un portage de Mono.SIMD pour processeurs 64 bits. Pour l'instant Mono.SIMD est pour systèmes x86.
- Import de fonctionnalités du Visual Basic 9 dans le compilateur VB du projet Mono
- Un moyen de créer des procédures Postgre en CIL pour permettre d'abstraire encore les développeurs du SQL y compris pour faire des procédures stockées.
Mais pour ceux qui aiment les outils de développement poussés et multi-plateforme, MonoDevelop n'est pas oublié:
- Un générateur de classe Graphique, je suppose UML. L'exécutant du projet commencera par créer un Widget Canevas inter-opérable qui cherchera à rester suffisamment générique pour être intégré à GTK# à l'avenir. Ce contrôle pourait être fait en collaboration avec le projet suivant.
- Un afficheur/éditeur graphique de base de données. remarque: MonoDevelop intègre déjà de quoi se connecter graphiquement à des bases de données et afficher dans des tables des retours de requêtes, mais là il s'agit d'une représentation de structure avec les liens entre les tables et autre.
- Pour les utilisateurs de Mylyn sur eclipse, un plugin MonoDevelop permettra une intégration similaire avec des outils de gestion de projets en ligne ou hors ligne (Bugzilla/Trac).
Remarque: Ubuntu 9.04 jaunty jackalope est sorti: http://releases.ubuntu.com/9.04/
[Mono] Privilégié pour les super-calculateurs.
Effectivement, pour la gestion de grosses tables, de matrices, l'usage
en calculs intensifs sur de super-ordinateurs, Mono présente des
avantages sur .NET et Java.
On peut constater que même si la
norme du .NET permet l'usage de long en index pour des tables, Windows
64 bits lui-même ne gérera pas de tables de plus de 2,147,483,648
entrées contre 9,223,372,036,854,775,808 pour mono (autrement dit plus
de quatre milliards de fois plus grande).
Java lui a une norme qui ne permet pas l'usage de tables aussi grandes, il faudrait modifier le bytecode pour lui permettre d'arriver à la même limite que Mono.
Mono est compatible avec plusieurs architectures dont ARM et MIPS.
On peut voir des serveurs utilisant des processeurs MIPS moins cher et moins gourmands que les processeurs Intel/AMD.
Voici un exemple de constructeur (sicortex.com) dont je traduis la phrase de spécifications sur les processeurs de son serveur haut de gamme:
- " Ces serveurs contiennent 5,832 processeurs MIPS 64 bits d'1.4GFlops, chacun consommant seulement 900 milli-Watts."
Mono permet de bénéficier pour les calculs vectoriels et matriciels
des optimisations SIMD des processeurs modernes. Cette optimisation
permet de rattraper le retard de performance par rapport à du code C si
ce dernier est compilé sans SIMD.
Pour finir on devrait voir
arriver des outils de gestion de tâche intéressants avec Mono 2.6, ces
fonctions étant particulièrement utilisées dans les jeux vidéos et un
peu technique et de plus étant part d'une nouvelle version de Mono, ils seront objets d'un autre article.