Executive summary : Les pontes de F# viennent à Paris pour nous présenter non pas une introduction à F#, mais l’état de la recherche et développement sur F# : parallélisation par agents dans le langage, accélération par utilisation du GPU, et WebSharper, une utilisation de F# pour unifier les différents langages de développement utilisés sur une application web.
Cette session est présentée par Don Syme, qui est le ponte de F#, ainsi que Robert Pickering et Adam Granicz, et est en anglais (je le mets pour que ceux qui ont du mal en anglais et qui n’ont pas pu venir aient moins de regrets).
Enfin, on sort des sessions tutoriels ou d’introduction, pour avoir une session un plus avancée sur F#. En particulier, la session va parler de la programmation parallèle avec F#. Ensuite, la session mettra en avant les possibilités de placer du code F# sur du GPU, en utilisant des arbres d’expression. Cette technologie sert aussi à WebSharper pour créer des sites web composites en transformant le code en JavaScript.
Array.Parallel.map au lieu de Array.map pour bénéficier de la parallélisation.
Le site fsharp.net est mis en avant pour les ressources sur F#. Pour les livres, il y a Beginning F# et Expert F# chez Apress, Programming F# chez O’Reilly.
F# pour la programmation parallèle
F# est très adapté au traitement de données, et se retrouve donc bien placé pour de la parallélisation. Déjà, le langage force l’immuabilité dans de nombreux cas.
Async.Parallel [ for i in 0 .. 20 –> computeTask i ]
Une utilisation de F# est de gérer des agents, bien plus légers que des threads. La classe est MailboxProcessor.
type Agent<’T> = Microsoft.fsharp.control.MailBoxProcessor<&;rsquo;T>
let Agent = Agent.Start(fun inbox –>
async { while true do
let! msg = inbox.Receive()
printfn “got message %s” msg } )
Note : Managed DirectX pour l’affichage de triangles.
Une démonstration de mouvements dynamiques sur des courbes est menée, avec des agents utilisés pour les calculs dynamiques, tandis que l’affichage prend des résultats sur la simulation à intervalles de temps résultats
Quotations et F# sur GPU
Basé sur Microsoft Accelerator qui compile les programmes vers des cibles DX9 ou 64 bits.
Démonstration sur le jeu de la vie.
[<ReflectedDefinition>] permet de marquer les fonctions pour qu’elles puissent être compilées en mode accéléré.
Dommage que le présentateur n’ait pas développé sur cette notion de quotations dont Don Syme a parlé avant, mais sans préciser ce que ça représentait exactement.
WebSharper
Il s’agit d’un produit commercial, certainement le premier à prendre F# pour faire du développement web. http://intellifactory.com pour plus de détails.
L’idée est de se servir de la puissance du langage pour envoyer plus de traitement sur le client, au lieu de continuer à surcharger le serveur. Un peu comme ce qui était prévu (mais n’a visiblement toujours pas été atteint) par AJAX.
Idéalement, F# serait utilisé pour générer tous les autres langages dont on a besoin, à savoir SQL, MDX, C#, HTML, CSS, JavaScript, etc.
“Write F#, run JavaScript”. Le produit s’installe de manière simple sur IIS, et s’intègre bien à ASP.NET, en mode zero-configuration.
Pour résumer, on permet d’exécuter du JavaScript sur le client, mais en écrivant du F#. Ce qui permet de mieux gérer la robustesse du code, le typage, etc. et d’avoir moins d’erreur à la runtime. Les séquences de feuilles web sont vues par WebSharper comme des “flowlets”. Du coup, un site web complet peut par exemple être représenté par une simple valeur F#.
La démonstration sur les formulaires est assez impressionnante : un simple code F# sous forme d’enchaînement de type pipeline d’actions métier permet d’enrichir au fur et à mesure le comportement visuel et de validation d’un formulaire généré dynamiquement sur le client.
Conclusion
Intéressant pour les résultats obtenus, mais la session ne cherchait pas vraiment à faire voir du code et à l’expliquer, mais plutôt à faire de la démonstration de ce qui est fait en recherche. Par exemple, Accelerator est en version 2, mais c’est toujours sur Microsoft Research.