Blog Haypo

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 21 février 2008

LLVM 2.2, PyPy et Ruby 1.9

J'ai écris ce petit billet pour présenter quelques évolutions dans le monde des compilateurs et des machines virtuelles.

En octobre dernier, je m'intéressais aux compilateurs C libres. Mis à part GCC, il n'y a aucun compilateur qui sort du lot. Et lundi, j'apprend que LLVM 2.2 est sorti. Pour la compilation C, LLVM repose actuellement sur gcc 4.2, mais le projet Clang vise à se débarasser de gcc ! Pour ceux qui ne connaissent pas LLVM, c'est un compilateur qui supporte de nombreux langages, mais c'est également un très bon optimiseur (20% plus rapide que gcc dans certains cas). Il ne contient pas de parseur qui traduit un fichier source en langage intermédiaire : c'est là qu'interviennent gcc/Clang pour le C. Les deux lettres « VM » de LLVM indiquent que c'est également une machine virtuelle. Le programme compilé peut embarquer un optimiseur temps réel qui va recompiler les fonctions les plus demandées pour générer un code plus rapide.

Sachant que PyPy supporte LLVM, je suis allé voir si le projet était encore vivant. Hé bien oui, un blog annonçant les derniers développements est même né fin octobre 2007 : PyPy Status Blog. J'apprend par exemple qu'ils ont écrit une nouvelle implémentation des chaînes de caractères basée sur des cordes. Le but est de limiter les recopies et allocations mémoire : un objet contient des portions des chaînes de caractères qui sont réassemblées à la demande. Concaténer deux chaînes de caractères ou extraire une partie d'une chaîne de caractère a un coût « nul ». C'est lorsqu'on va afficher la chaîne que Python va réassembler les bouts pour afficher la chaîne intégrale. C'est étonnant de voir que PyPy arrive à remettre en question les types de base en testant une nouvelle implémentation pour comparer les performances. C'est impossible de faire ça dans CPython. PyPy l'avait déjà fait pour les différentes implémentations de ramasse miettes : on peut en changer lorsqu'on compile PyPy.

Le langage Ruby n'est pas en reste : la machine virtuelle version 1.9, sortie pour Noël 2007, est trois fois plus rapide que la version 1.8 ! La nouvelle version est basée sur YARV (Yet Another Ruby VM), une nouvelle implémentation écrite en C datant de 2004. La page du projet indique l'unique but : développer la machine virtuelle pour Ruby la plus rapide du monde ! L'ancienne implémentation, MRI (Matz's Ruby Interpreter), est écrite en C et date de 1993. Je n'ai trouvé peu d'informations sur les améliorations de YARV sur MRI : pourquoi est-ce beaucoup plus rapide ? Il semble que MRI soit un interprète, alors que YARV utilise une machine virtuelle avec un bytecode (comme le fait Python depuis toujours).

mercredi 29 août 2007

Crazy Hacks

Il y a quelques mois, un ami m'avait passé le lien crazy-hacks.org. Comme je m'étais bien amusé à le parcourir, je vais vous en faire part. Le site référence les projets de hackers les plus atypiques comme en témoigne ma sélection qui suit.

Hacks matériels

Histoire d'entrer directement en matière, voici quelques projets visant à produire des sons (voir musique selon les auteurs) avec des écrans, disque dur et scanner.

Afrotech's Hard-disk Sound System : Haut parleurs montés à partir de trois disques durs de taille différentes. Visionnez les vidéos pour vous donner une idée de la qualité du son (pas terrible, mais ça fonctionne !). Afrotech semble assez constructif en bidouilles plus ou moins foireuses.

Tempest for Eliza : programme écrit par Erik Thiele jouant sur la fréquence d'un écran cathodique pour transmettre de la musique sur les ondes FM ! Le projet porte le nom de la technique TEMPEST qui permet de visionner un écran à distance.

Alan Parekh's Hard Drive Clock : En contrôlant la vitesse de rotation des plateaux d'un disque dur, Alan Parekh a réussi à créer un montre plutôt chouette.

ScanJet music : Le hacker GanjaTron a réussi à jouer de la musique sur son scanner HP en le programme en Scanner Control Language. Pour cela, il fait varier la vitesse du moteur.

Painstation

Le nom Painstation parodie la marque PlayStation sauf que pain signifie douleur en anglais. L'œuvre montée par les artistes allemands Volker Morawe et Tilman Reiff est un jeu Pong qui afflige des douleurs physiques au perdant. Brûlure, fouet, etc. J'avais déjà vu une démonstation sur la chaîne Arte dans la superbe émission Tracks, et je trouve ça rigolo.

Blinkenlights

Les projets Blinkenlights et Arcade utilisent des lampes derrières les fenêtes d'immeubles pour créer des dessins.

Et les autres

Découvrez de nombreux autres projets tous aussi dingues sur crazy-hacks.org : liste de tous les projets.