Il est maintenant possible de découvrir F# dans votre navigateur, sans rien installer (à condition d'avoir Silverlight). C'est le projet sur lequel j'ai travaillé dernièrement avec des personnes de Microsoft et il vient d'être mis en ligne. Ça se trouve à l'adresse suivante : tryfsharp.org

Vous êtes plus ou moins intéressés par F#, mais vous n'avez jamais eu l'occasion de l'installer ? C'est l'occasion de découvrir ! Le site est accompagné de tutoriels et d'exemples, je pense que c'est un bon moyen d'apprendre.

Même si ça peut faire penser à un gadget, on peut faire beaucoup de choses avec. Comme c'est en Silverlight, cela tourne sur votre navigateur (côté client) ; il n'y a donc aucun souci pour lancer toutes sortes de boucles et même lancer des threads. Presque tous les exemples de mon site devraient fonctionner. La principale limitation est évidente : pour des raisons de sécurité, Silverlight ne permet pas d'accéder aux fichiers du disque, ni d'ouvrir des connexions réseau. Il est aussi possible d'utiliser le canvas de Silverlight et de faire du graphisme. Pour preuve, essayez donc l'exemple suivant, une simulation simpliste de système solaire : http://pastebin.com/v6ZGsRxC

D'un point de vue technique, c'est assez intéressant. C'était la première fois que j'utilisais Silverlight et j'ai été très agréablement surpris. C'est la magie de .NET et des machines virtuelles : on écrit son code simplement, sans trop se poser de questions, et il tournera aussi bien en natif sous Windows, Linux, Mac, Silverlight, XBox 360, Windows Phone 7... J'exagère un peu, car il existe quelques différences et toutes les fonctions ne sont pas toujours disponibles, mais c'est vraiment agréable, on reste dans Visual Studio, on a le débogueur et tout le reste comme d'habitude.

Le compilateur F# est écrit en F#. Lors du développement, jamais les concepteurs ne pensaient à Silverlight. Et pourtant, compiler F# pour Silverlight s'est révélé être assez simple, comparé au nombre de lignes de code que cela représente. Le code entré par l'utilisateur est analysé par F#, qui génère du bytecode .NET (avec Reflection.Emit), puis le JIT le convertit en code natif et l'exécute. Et tout cela, dans un bête navigateur Internet !

J'ai quand même dû recoder certaines parties du compilateur pour contourner des limitations. Un exemple : Thread.Abort n'existe pas dans Silverlight (pour une raison de sécurité ?) ; or il est utilisé dans F# pour interrompre le calcul en cours. J'ai modifié la génération de code pour que le code exécuté vérifie régulièrement l'état d'un booléen (et lance une exception).