Article publié dans Linux Magazine 82, avril 2006.
La perle de ce mois d'avril a été rédigée par Stéphane Payrard
(stef@mongueurs.net
), de Paris.pm.
Nous apprenons que Sun Microsystems échantillonne Mehari, un processeur SPARC supportant MiniPerl6 un sous ensemble de Perl6. Mehari est un processeur qui tourne le dos à l'architecture RISC pure : certains de ses opcodes sont de haut niveau. Comme les architectures SPARC traditionnelles, Mehari propose un environnement programmable avec un shell interactif avant de booter le système d'explotation. Mais cet environnement est MiniPerl6 au lieu de Forth. MiniPerl6, c'est aussi un bytecode de haut niveau, il y aura donc des compilateurs pour les langages modernes de script autres que Perl6.
Des analyses ont montré que dans un système Unix, les mêmes structures de données sont réimplantées dans beaucoup de librairies et souvent de manière peu efficiente.
Le processeur Mehari factorise certaines de ces opérations en les implantant dans le hardware. Il gère « en dur » les chaînes Unicode, le moteur de règles Perl6, les tables associatives (connues sous le nom de hash en Perl), et les tableaux creux. Les tableaux creux permettent l'accès par index rapide comme les tableaux normaux et l'insertion rapide comme une liste, proposant ainsi le meilleur des deux mondes.
Mehari peut utiliser les librairies compilées pour du code SPARC traditionnel. Mais pour un programme utilisant ces librairies, l'éditeur de lien remplace certains points d'entrée par l'appel correspondant en microcode miniperl6 résidant en ROM sur la puce.
Les algorithmes décrits ci-dessus sont bien connus et peuvent donc résider en firmware. Mais Perl6 proposera des opérations de haut niveau encore mal spécifiées. Il s'agit du moteur de règles et du système de ventilation des multiméthodes. Ces systèmes sont aussi microprogrammables mais ce microcode là réside en RAM.
Le système de règles est un descendant du système d'expressions régulières de Perl5. Il sera plus propre et plus puissant et supportera la définition de grammaires. Le moteur qui l'implante est une synthèse des moteurs pour grammaire d'opérateurs, d'automates à la Yacc et de moteurs d'analyseur récursif descendant.
De même Perl6 propose un système de ventilation de multiméthodes. En programmation objet classique, la méthode appelée est celle de la classe de l'objet contenu dans le premier paramètre. Les multiméthodes étendent ce système de ventilation à plusieurs paramètres.
En Perl6, l'inférence de type est encore à définir. Elle est trop complexe pour être implantée en hard. Ce sera un système de greffons qui ne modifiera pas la sémantique du langage. Donc MiniPerl6 et Mehari ne sont pas concernés.
Mettre dans le hardware des opérations de haut niveau grâce à la microprogrammation n'est pas nouveau mais contraste avec l'approche qui a conduit aux premiers succès de Sun. Les premières stations Sun à base d'un processeur standard, le 68000 de Motorola avaient balayé les stations Symbolics qui utilisaient du matériel propriétaire.
De plus, Symbolics avait transformé en système propriétaire des logiciels développés au MIT. Cela avait d'ailleurs provoqué l'ire de Richard Stallman.
Quelques années plus tard, Sun, alors leader dans le monde Unix, a provoqué la colère de ses premiers clients, en particulier les universités, en décidant de vendre séparément ses compilateurs. Cela a certainemnt contribué à la popularité de GCC. Notons que c'est Michael Tiemann, maintenant directeur technique de RedHat qui a porté le dorsal de GCC pour supporter l'architecture SPARC.
Ces réflexions historiques et l'actualité récente (et plus spécifiquement la mise à disposition d'un bonne partie des sources de Solaris) amènent à penser que Sun va mettre Mehari en Open Source.
Steve Jobs a failli choisir Mehari mais a renoncé quand Sun a refusé l'inclusion d'un système de gestion des droits (DRM) au sein du processeur, condition indispensable à sa stratégie multimédia.
Le processeur sera multicore mais avec une seule unité de traitement de règles. Sun prépare une autre version avec un processeur asynchrone, car propager le signal d'horloge consomme beaucoup d'énergie sur un processeur de cette complexité. Son nom de code est Ichtyus.
Quelques pistes pour comprendre les techonologies évoquées :
Le système de règles en Perl6 - http://dev.perl.org/perl6/doc/design/syn/S05.html
Les trois types d'analyseur de grammaire dont le moteur de règles de Perl6 est la synthèse
http://en.wikipedia.org/wiki/Operator-precedence_parser, http://en.wikipedia.org/wiki/Recursive_descent_parser, http://en.wikipedia.org/wiki/LALR_parser
L'objet et le multidispatch en Perl6 - http://dev.perl.org/perl6/doc/design/syn/S12.html
Vérification de systèmes de types ou d'inférence de types comme greffons optionnels - http://pico.vub.ac.be/~wdmeuter/RDL04/papers/Bracha.pdf
Précédentes occasions manquées entre Sun et Apple - http://www.theregister.co.uk/2006/01/12/sun_apple_snapple/
Analyse de Gilles Gravier, respnsable Stratégie « Technologies de Sécurité » de la société Sun Microsystems à propos du DRM et de l'Open Source - http://blogs.sun.com/roller/page/gravax?entry=drm_in_an_open_source
Shell interactif en environnement mininal - http://en.wikipedia.org/wiki/Busybox http://fr.wikipedia.org/wiki/Microcode, http://fr.wikipedia.org/wiki/Open_Firmware
Deux présentations des principes des processeurs asynchrones : http://research.sun.com/features/async/, http://user.it.uu.se/~eh/courses/tic/Papers/Lectures5-6/p1.pdf
Douglas Adams - http://en.wikipedia.org/wiki/So_Long,_and_Thanks_for_All_the_Fish
Envoyez vos perles à perles@mongueurs.net
, elles seront peut-être
publiées dans un prochain numéro de Linux Magazine.
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.