dimanche, octobre 30, 2011

Octobre noir


Ces quelques semaines d'octobre témoignent avec acuité de la permanence de la pensée des pionniers de l'informatique et de la vive influence de leurs idées, non seulement dans le design et le développement des systèmes techniques mais dans la soudaine transformation même de notre vie en vie numérique. La tournure planétaire que prend la disparition de Steve Jobs, première star du show mondialisé de la numéréalité, présage l'escamotage imminent du réel sous le numérique. Octobre encore lorsqu'à quelques jours d'intervalle, s'éteignaient deux pionniers discrets de l'informatique, Dennis Ritchie et John McCarthy, les jours mêmes où les annonces de Google, pour le langage de programmation Dart, et de Microsoft, pour le projet Roslyn — pour n'en prendre que deux fortuitement concomitantes — illustrent notablement la rémanence de leurs travaux originaux dans les technologies actuelles.

 



Dans la préface de la première édition de l'indispensable ouvrage The C Programming Language (1978) — un modèle de littérature « technique », clair et bref — on lit : «  C was originally designed for and implemented on the UNIX operating system on the DEC PDP-11, by Dennis Ritchie.  ». Cette modeste attribution à Ritchie de l'invention de C, probablement rédigée par Brian Kernighan, coauteur avec Ritchie de cet incunable moderne, laissait à peine imaginer de la prépondérance que prendrait ce langage de programmation dans les développements ultérieurs de l'informatique. C'est à peine si les auteurs notaient, un peu plus loin, avec détachement (feint ?) : «  The operating system, the C compiler, and essentially all UNIX application programs (including all of the software used to prepare this book) are written in C.  ». Révolutionnaire à la fin des années 1970 ! Aujourd'hui il n'est probablement pas une journée sans que nous ne soyons dans notre vie quotidienne exposé à du logiciel — télécommunications, systèmes ou applications — écrit en C.

 



Au passage, nous rencontrons ici, à prendre ces pionniers au mot, notre première mis en abyme, signe avant-coureur de la dissolution du réel annoncée plus haut. Si le compilateur C est écrit en C, comment a-t-on compilé le (premier) compilateur ? Pas de boucle de rétro-action troublante ici : en fait, Ritchie avait adapté au PDP-11 un compilateur pour le langage de programmation B, lui-même dérivé par Ken Thompson du langage de programmation BCPL (Basic Combined Programming Language) qu'il utilisait — avec Ritchie, toujours lui ! — pour créer et développer le système d'exploitation UNIX. Nous sommes revenus là aux années 1966 et 1967. Thompson avait écrit le compilateur pour son langage B, sur DEC PDP-7, grâce à TMG, l'un des premiers frameworks de développement de compilateurs (en 1965) que Ritchie devait ensuite reprendre pour son compilateur C. La grande innovation de TMG, à l'époque, résidait dans l'utilisation même de la syntaxe du langage source pour diriger la compilation. La structure lexicale et syntaxique du code source y était directement visible et manipulable par une API spécifique. C'est exactement ce qu'on trouve aujourd'hui dans les syntax trees du tout nouveau projet Roslyn annoncé par le géant de Redmond ! Dans le cas de Microsoft, il s'agit d'exposer toute l'analyse du code source Visual Basic et C# — tiens ! un pas si lointain descendant de C, après tout — produite par le compilateur via des API : CaaS, Compiler as a Service, pourrait-on dire. Ces bonnes idées des grands précurseurs ont donc la vie longue...

 



Ken Thompson et Dennis Ritchie inventaient ce qui deviendrait UNIX alors qu'ils travaillaient sur le système d'exploitation en timesharing Multics (Multiplexed Information and Computing Service), dont le développement joint entre le MIT, General Electric et les Bell Labs démarra en 1964. D'évidence, beaucoup des idées exploratoires évaluées dans l'implémentation de Multics inspirèrent les choix techniques retenus dans UNIX. Mais Multics avait lui-même un précurseur pour ce qui concerne le timesharing, CTSS, qui nous ramène directement à l'autre géant de l'informatique disparu ce mois, John McCarthy. Nous sommes encore quelques années plus tôt, en 1962-1963. Le professeur McCarthy, mathématicien-logicien et informaticien de la première heure au MIT, avait écrit en 1959 un papier visionnaire, A Time Sharing Operator Program for Our Projected IBM 709, jetant les bases théoriques et pratiques du timesharing et imaginant, à l'avenir, une ressource informatique utilisée à la demande. Toute ressemblance avec le cloud computing n'est évidemment pas fortuite !

 



Mais peut-être inventeur du cloud, comme en passant, McCarthy est surtout l'un des pères de l'Intelligence Artificielle, ordonnateur des deux événements fondateurs de la discipline : la Conférence de Dartmouth sur l'Intelligence Artificielle en 1956, l'invention du langage de programmation LISP, en 1958 au MIT — qu'il avait rejoint, issu de Princeton où il avait voisiné avec John Nash le futur prix Nobel d'économie, dont la schizophrénie célèbre est décrite dans A Beautiful Mind, le livre de Sylvia Nasar et le film qui en a été tiré. Comme Dennis Ritchie, John McCarthy était un pionnier des langages de programmation et de l'architecture des systèmes d'exploitation dont les idées sont toujours — et plus que jamais — d'actualité. John McCarthy rejoignait l'université de Stanford en 1962 et y fondait, en 1964, SAIL, le Stanford Artificial Intelligence Laboratory, inaugurant l'âge d'or de l'Intelligence Artificielle — la décennie prodigieuse de 1964 à la fin des années 1970 qui vit les grands progrès théoriques que concrétiseraient les implémentations des années 1980 et 1990. John Markoff, dans What The Dormouse Said, écrit que McCarthy déménagea en Californie, séduit par la liberté culturelle et politique — ses parents étaient des communistes notoires dans les années 1930 — qui y régnait, contrastant avec la Côte Est plus collet monté. Au passage note Markoff, il y introduisait les premiers spécimens de hackers, une espèce dont l'habitat s'étendait jusqu'alors plutôt autour de Boston, notamment en la personne de Stephen « Slug » Russell, qui avait largement contribué au premier interpréteur LISP et universellement connu pour avoir créé le premier jeu vidéo instantanément populaire, SpaceWar! en... 1961. Il serait d'ailleurs plaisant d'imaginer la rencontre d'un professeur McCarthy, la quarantaine barbue, et d'un Steve Jobs adolescent rebelle à un sit-in manifestant de la contre-culture californienne des années 1970.

 



Avec LISP, McCarthy, le mathématicien, fut probablement le premier à parler de l'exécution d'un programme en termes « fonctionnels » , i.e d'appels de fonctions et de subroutines. (Ce qui est subtilement différent de l'idée de fonder un langage de programmation sur la notion mathématique de fonction.) C'est cette idée stylistique poursuivie par McCarthy qu'il prouvera féconde entre 1956 et 1959. Elle se trouve aujourd'hui encore dans tous les langages de programmation fonctionnelle, notamment chez le dernier-né de Google, Dart. Fortuit encore le fait que Ken Thompson vive aujourd'hui une retraite active chez le même Google où il a mis au point le langage de programmation procédural, Go, exacerbation radicale des concepts qu'il explorait déjà avec Ritchie il y a près de quarante ans ? L'exégèse des publications de McCarthy pendant cette période montre à quel point les premières recherches qui menèrent à LISP furent exploratoires, expérimentales et soumises à des hésitations et des revirements fréquents. Parmi les trouvailles et les heureuses formulations promises à une généralisation notons les fonctions récursives, les lambda-expressions, la fonction d'ordre deux map qui applique une fonction à chaque élément d'une liste — une nouvelle mise en abyme qui est au coeur de l'algorithme MapReduce dont on fait si grand cas aujourd'hui ! Imagine-t-on objets programmatiques plus délicieux que ceux que McCarthy présentait alors :

 




(defun M (n)
(cond ((<= n 100) (M (M (+ n 11))))
(t (- n 10))))


la fameuse fonction « 91 » qui sera analysée avec une précision d'entomologiste par Knuth — grand contributeur lui-même au projet SAIL à Stanford.

 



Ou encore l'extraordinaire fonction ambiguë, amb, qui choisit l'un de ses deux arguments et conduit à des gouffres conceptuels au fond desquels prolifèrent des fonctions qui ont des valeurs possibles mais indéterminées ! Voyez :

 




(defun less (n)
(amb (- n 1) (less (- n 1))))

(defun ult (n)
(cond
((<= n 0) 0)
(t (ult (less n)))))


et interrogeons-nous sur la valeur de ult(n) pour n positif ou nul... McCarthy espérait que la relation entre la programmation et la logique mathématique, dont ses travaux défrichèrent le champ théorique avec brio, serait aussi féconde en notre siècle que celle entre la physique et l'analyse le fut au siècle dernier. En tout cas, pour prendre un autre exemple récent, le fascinant débat sur le parallélisme et les appels asynchrones dans Javascript pour les applications Web, cf. Node.js, ne fera pas démentir cette prédiction.

 



Pour conclure, il est réconfortant de penser qu'à l'heure où disparaissent les pionniers et les initiateurs de notre nouvelle vie numérique, leurs idées, vêtues des habits modernes du Web, du cloud computing, des langages de programmation évolués, de la numérisation même de la culture, fleurissent et se développent dans des directions inédites. Certes les laboratoires et les centres de recherche changent, mais les bonnes idées restent toujours là, terres d'exploration attendant ceux qui prendront la relève de ces grands explorateurs.

 



ShareThis