jeudi, mai 29, 2008

Le retour en grâce des langages de programmation dynamiques

L'équipe de développement de Webkit, l'implémentation Open Source du navigateur Web qui est au coeur de Safari sous OS X, vient d'annoncer un moteur Javascript aux performances impressionnantes, SquirrelFish. Il existe déjà depuis quelques années plusieurs variétés d'implémentations complètes d'interpréteurs et de compilateurs du langage : dans le monde .NET, un compilateur vers la machine virtuelle CLI, ailleurs SpiderMonkey, l'interpréteur écrit en C intégré à Mozilla et Firefox, Tamarin, un projet Open Source de moteur Javascript haute performance pour la nouvelle version du standard ECMAScript (4ème édition, ES4) développé à l'origine pour ActionScript par Adobe et maintenant logé à la Fondation Mozilla, ou Rhino une implémentation en java du langage Javascript. Ce renouveau d'intérêt pour les langages « dynamiques » est porté par la vague de l'architecture nouvelles des applications Web dans laquelle — retour de balancier — le client dispose d'une capacité autonome de calcul et de présentation tout en communiquant avec des services Web distants.

Y a-t-il, à proprement parler, une définition formelle et généralement acceptée de ces langages de programmation dynamiques ? Javascript en est aujourd'hui l'exemple emblématique. Pas tout à fait orienté objet, au sens canonique de système de classes avec héritage, mais offrant néanmoins de véritables objets sur le modèle de « prototypes », Javascript présente des types dynamiques, des « closures » et de nombreuses caractéristiques de langages dynamiques antérieurs comme Smalltalk, Lisp voire Prolog et Self. Aujourd'hui on songerait plus naturellement à des langages employés dans l'univers des applications Web comme Ruby, PHP, Perl, Python, Lua, etc.

Depuis longtemps les langages dynamiques souffrent d'une image de marque déplorable, sorte de sceau de l'ostracisme qui les frappe dès qu'ils sont comparés à des langages de programmation comme C/C++ ou Java, pour ne citer qu'eux. La vulgate enseigne que les langages dynamiques sont peu performants et lents à l'exécution d'une part et ne disposent pas de tout l'outillage et l'instrumentation sophistiquée qui existe pour les autres langages et dont il est indéniable qu'elle joue un rôle crucial dans leur succès industriel et commercial.

Mais ce manque de prestige actuel de cette classe de langages de programmation est plutôt le résultat des circonstances historiques que l'expression d'une nature propre, rétive ou trop absconse. Jadis — en tous cas à ceux pour qui les mots comme CLOS, ML, Smalltalk ou Scheme évoquent passagèrement de lointains mais persistants maux de crâne — des langages dynamiques comme Common Lisp disposaient de compilateurs et d'outils très avancés dont les performances avaient finalement peu à envier à leurs jeunes concurrents typés et statiques de l'époque. À peu près contemporains des précédents, les efforts des équipes de Parc Place et de Digitalk visaient, avec un certain succès, à améliorer les performances et l'outillage du langage Smalltalk (Dave Griswold, Gilad Bracha). Ceux du Sun Microsystems Lab (David Ungar, Randall Smith) sur le langage basé sur les objets-prototypes, Self, et les innovations apportées à son compilateur par Urs Hölzle — dont les travaux sont également utilisés dans la machine virtuelle HotSpot — devaient aussi croiser Smalltalk au milieu des années 1990 sur le projet Strongtalk, emporté comme quelques autres sous la déferlante Java à partir de 1995, et survivant aujourd'hui dans le domaine de l'Open Source. Toutes ces explorations avaient mis au jour de nombreuses techniques de représentation et de compilation des langages dynamiques qui rendaient comparable leur usage à celui des langages, devenus depuis classiques, comme C et C++. Elles n'ont pas eu l'écho industriel et commercial qu'elles attendaient, victimes probablement d'un manque de marketing au moment où explosait Internet sur le devant de la scène.

Le passé, pas si lointain, nous enseignerait donc plutôt que les langages dynamiques devraient pouvoir afficher de bonnes performances à l'exécution comme leurs cousins statiques et typés. Et si l'histoire récente est conseillère, il faudrait plutôt chercher à inventer interpréteurs et compilateurs hors des canons généralement convenus et affinés pour ces langages typés et statiques. (Comme le remarque un papier de UCLA Irvine sur ces sujets, un compilateur écrit en suivant scrupuleusement les règles du fameux Dragon Book ne peut que s'étrangler devant un fragment de Javascript comme celui-ci : x = 0; for( i = 0; i < 500000; i++ ){ x = x + i; if( i == 499999 ) x = "oops!"; } dans lequel la gestion des types révèle quelques surprises.) Qu'en est-il des autres outils habituels du programmeur ?

La barre est placée assez haut. Les « Integrated Development Environments » du jour offrent tous pléthore d'assistants, d'auto-completion, de liens vers les définitions et la documentation des objets et des fonctions, de refactoring, de navigateurs, de représentations arborescentes, de compilation au vol ou incrémentale, etc. Les environnement modernes de développement pour Java ou pour C/C++ sont de bons exemples du niveau qu'il faut aujourd'hui atteindre pour prétendre à outiller correctement un langage de programmation. Au point que ces IDE tendent à se détacher des langages de programmation eux-mêmes et se transformer en plates-formes génériques de conception et de développement de programmes utilisables dans la plus grande variété de circonstances et de scénarios de production de code.

La bonne stratégie consiste alors à doter les langages de programmation dynamiques des caractéristiques nécessaire à leur intégration la plus indolore possible dans ces IDE-plates-formes dont l'emploi se généralise. La JSR 223, par exemple, « Scripting for the Java Platform » va dans ce sens. Cette spécification définit comment échanger données et information entre Java et des langages de script comme PHP, Ruby, Javascript, etc. au sein d'une même application hybride Java/script.

De même les innovations découvertes hors des sentiers battus des compilateurs traditionnels constituent probablement la prochaine étape dans l'évolution des outils et des langages de programmation dynamiques. L'équipe de recherche de Michael Franz à UCLA Irvine ont, par exemple, récemment publiés une série de papiers sur la compilation de langages dynamiques et l'optimisation de la performance à l'exécution. D'abord, même si elle est plus laborieuse, l'analyse statique des programmes écrits dans un langage de programmation dynamique reste possible et inférer le type des variables d'après le texte du programme donne de bons résultats dans la grande majorité des cas. Une autre technique — dont le nom savant, Polymorphic Inline Caching, vous permettra de briller dans les foocamps et autres barcamps — permet de contourner le problème difficile de la détermination simultanée des types de la fonction appelante et de la fonction appelée lorsque toutes deux attendent des arguments aux types variables suivant les objets. Une technique similaire dite des « arbres de trace » consiste à utiliser un interpréteur et enregistrer les chemins les plus souvent parcourus à l'exécution en fonction du type des variables sur lesquelles les choix de parcours sont faits (par exemple dans les boucles ou dans les instructions conditionnelles) et compiler chacune des branches de ces arbres de trace en appliquant les optimisations appropriées au type des variables qui figurent dans chaque branche.

Dans ces deux dernières techniques, notons qu'on emploie un tandem formé d'un interpréteur et d'un compilateur pour le langage de programmation dynamique concerné. L'interpréteur exécute le programme et collecte simultanément une information sur la statistique de l'exécution ; ces données sont examinées par le compilateur qui produit des versions optimales (code machine) pour les différents agrégats statistiques identifiés, parfois plusieurs pour le même fragment de code source, en fonction du type des variables employées.

De plus, ces techniques semblent bien adaptées aux générations actuelles et à venir de puces multicoeurs. À l'heure où beaucoup s'interrogent sur les nouveaux usages auxquels consacrer ce surcroît de capacité de calcul des postes clients — c'est un des chevaux de bataille de Craig Mundie, le patron de la recherche à Microsoft — la structure même des nouvelles techniques d'optimisation des compilateurs de langages dynamiques se projette assez bien sur ces architectures matérielles. Pourrait-on imaginer un compilateur JIT qui répartisse au vol le calcul des branches distinctes de l'arbre de trace précédent sur les différents coeurs de la machine ? L'optimisation apparaîtrait alors comme quasi simultanée aux premières exécutions du programme à laquelle elle pourrait se substituer tôt, chaque coeur exécutant une version « optimisée par les types » du même code.

On le voit les perspectives sont assez ouvertes. Alors que les programmeurs s'intéressent de plus en plus aux langages de programmation dynamiques pour leur productivité et leur flexibilité devenues indispensables pour les applications Web, chercheurs, laboratoires industriels et communautés Open Source manifestent un regain d'intérêt pour toutes sortes d'innovations techniques qui faillirent être oubliées dans la brillante génération antérieure délaissée par les haruspices du marketing.

mardi, mai 06, 2008

Le Surplus cognitif : du gin et des sitcoms à Web 2.0 Expo !

Pour Clay Shirky, professeur à NYU et essayiste renommé sur tous les sujets relatifs au Web, qui s'exprimait dans la grande salle du Moscone West à l'occasion de l'exposition Web 2.0 à San Francisco, l'explication de l'état actuel du Web « social » est à chercher dans le gin et les « sitcoms » ! Lors de la révolution industrielle, en Grande Bretagne en particulier, le transformation de la vie rurale en trépidation urbaine fut si soudaine, brusque et traumatisante, argumente Shirky, qu'une génération complète n'a trouvé d'autre issue psychologique que de se noyer dans le gin. Et ce n'est qu'en sortant de cette stupeur sociale massive que la société anglaise de l'époque a su mettre en place les structures économiques et les organisations d'une « société dite industrialisée ». L'argumentation est étayée et développée dans le livre qu'il vient de publier aux Etats-Unis, Here Comes Everybody, dont le thème affiché sur la jaquette est « organiser sans les organisations ».

Quel rapport avec les centres d'intérêt de cette foule juvénile et attentive venue nombreuse à la conférence et exposition Web 2.0, grand-messe annuelle - et bientôt semestrielle - de Tim O'Reilly, notre authentique « beatnik » du Web ? Selon Clay Shirky, les révolutions technologiques du XXe siècle ont provoqué un effet stupéfiant comparable, le temps de loisir massivement libéré trouvant à s'épuiser dans la télévision et le formidable développement - aux Etats-Unis en tout cas - du sitcom. Le « surplus cognitif » gaspillé dans l'absorption passive et béate des heures de sitcoms rappelle sans nul doute le fameux « temps de cerveau », marchandise naguère vantée par certain directeur de chaîne de télévision privée. Comment, continue Shirky, peut-on s'étonner de voir tant de gens consacrer tant de temps et d'énergie à Wikipedia, par exemple, quand on met en perspective les 100 millions d'heures de travail qu'a requis l'élaboration du site dans l'état actuel aux 200 milliards d'heures passées par les américains devant le poste de télévision par an : 2 000 Wikipedia actuels par an ! Ou bien les 100 millions d'heures par week-end à regarder les publicités télévisées : 1 Wikipedia actuel par week-end !

Ce gigantesque surplus cognitif est donc à peine employé dans les balbutiements actuels du Web 2.0, considéré comme amplificateur de communications, auxquels nous assistons depuis quelques années. Le keynote finissait en appel aux bonnes volontés et au « sursaut cognitif » : refuser toute expérience non-participative qui serait malencontreusement proposée sur le Web ! Travailler sans relâche à exploiter le surplus cognitif à enrichir la noosphère !

Voilà qui détonait singulièrement au milieu des effets d'annonces et des présentations commerciales qui émaillaient la conférence plénière. Mais on était plutôt venu pour l'exposition aux proportions encore plus pharaoniques que l'année dernière, baromètre infaillible de l'innovation technologique et de son écosystème dans la Silicon Valley et South-of-Market à San Francisco. Plus d'exposants, plus de monde, plus de couverture presse ainsi que dans les blogs et wikis, plus de meetings, un débordement annoncé de la conférence/exposition sur la Côte Est dès septembre, à Berlin en octobre et à Tokyo au Japon : le moteur innovation tourne à plein régime ! Même si les capitaux-risqueurs se plaisaient à prétendre publiquement voir les signes avant-coureurs d'une « bulle » dans la multiplication des financements de startups Web 2.0, après avoir évidemment contribué avec empressement à ces opérations les années passées, et poursuivre néanmoins comme un seul homme la distribution mimétique de capitaux à tout ce qui affiche une connotation « sociale » dans un rayon de 30 miles autour de Menlo Park, la santé du secteur apparaît florissante. Au point même que d'emblée, à l'entrée même de l'immense halle d'exposition, la différence tranchait avec l'édition 2007 : la présence massive des poids lourds de l'industrie, Microsoft, Yahoo!, Oracle, IBM, Disney (!), Google - mais avec un stand plus petit qui semblait vouloir jouer le jeu des startups - ne veulent d'évidence plus laisser le terrain aux seules jeunes pousses.

À la rubrique cocorico, notons cette année encore la présence des vaillants Yoono, un service de favoris partagés communautaire, et de DreamFace Interactive, le projet Open Source de plateforme de mashups interactifs d'entreprise, accompagné de Twinsoft, spécialiste de l'intégration du SOA, des applications patrimoniales et du Web. Mais il y avait également quelques autres voix européennes dans ce concert essentiellement américain de startups.

À voir l'activité bourdonnante autour des stands des petits et des grands acteurs du Web social, l'idée qui vient à l'esprit est un retour sur l'analogie avec la révolution industrielle évoquée par Shirky. Le plan de l'édition 2008 de l'exposition Web 2.0 semblait désormais distinguer les exploitants du surplus cognitifs, innombrables et proliférantes startups proposant produits et services Web innovants, des candidats opérateurs à venir du surplus cognitifs, les géants comme Google, Microsoft, Yahoo!, Amazon occupés à rendre rapidement publiques les API ouvrant l'accès à leurs immenses datacenters et leurs ressources inépuisables de calcul.

ShareThis