ANNÉES 1980

Self

David Ungar et Randall Smith lancent Self en 1987, un projet qui va bousculer les idées reçues. Ce nouveau langage refuse délibérément tout ce qui semblait acquis à l'époque. Fini les classes, oubliées les variables. Seuls restent les objets et leurs conversations par messages.

Cette radicalité n'est pas gratuite. Elle naît d'une frustration face à la complexité croissante des systèmes orientés objet. Smalltalk-80, pourtant admiré pour son élégance, traîne le poids de ses méta-classes et de leurs imbrications vertigineuses. Self propose une vision différente, celle de ne pas s'embarrasser de moules quand on peut directement sculpter dans la matière.

Dans cet univers épuré, chaque objet est un conteneur de « slots » nommés. Ces emplacements stockent indifféremment données et comportements. L'héritage s'appuie sur de simples pointeurs « parent » qui créent des chaînes de délégation entre objets. Un système si simple qu'il en est déroutant.

La création d'objets suit une logique naturelle. Au lieu de consulter le plan d'une classe, Self clone directement un prototype existant. Cette approche résout d'un coup la fameuse régression infinie des méta-classes qui donnait des sueurs froides aux concepteurs de Smalltalk. Un objet sert de modèle à d'autres objets, point final.

L'uniformité constitue l'autre pilier de cette architecture. Qu'un objet demande une information stockée ou qu'il déclenche un calcul complexe, la syntaxe est identique : l'envoi d'un message. Cette cohérence gomme la distinction traditionnelle entre propriétés et méthodes. Le programmeur navigue dans un monde homogène où chaque interaction obéit aux mêmes règles.

Les premières implémentations de Self surprennent par leurs performances. Dès 1989, le langage rattrape puis dépasse Smalltalk en vitesse d'exécution. Ce succès cache une innovation technique discrète mais décisive. L'équipe invente les « maps », structures internes qui optimisent l'organisation des objets en mémoire. Ces cartes cachées sont ce qu'on appellera plus tard les « hidden classes ».

La compilation personnalisée pousse l'optimisation encore plus loin. Au lieu de produire du code générique, Self génère du code machine taillé sur mesure pour chaque type de destinataire. Cette spécialisation dynamique transforme les performances du langage.

Les caches d'appels polymorphes voient le jour en 1991. Ces PIC mémorisent plusieurs résolutions de méthodes pour chaque site d'appel. Concrètement, quand un message peut aboutir à différents traitements selon le contexte, le système garde en réserve les solutions déjà trouvées. Les appels polymorphes, traditionnellement coûteux, sont soudain abordables.

La version de 1996 franchit un nouveau cap avec le « type feedback » et l'optimisation adaptative. Le premier mécanisme intègre directement les appels dynamiques dans le code compilé, réduisant de 70% les invocations de méthodes. Le second observe le programme en marche et retravaille à la volée les passages les plus sollicités.

Ces avancées techniques attirent l'attention de Sun Microsystems. En 1991, la société recrute Ungar et Smith pour poursuivre leurs recherches. Mais l'histoire prend une tournure inattendue quand deux figures clés du projet, Urs Hölzle et Lars Bak, quittent Sun en 1994 pour créer Animorphic Systems. Leur mission : développer Strongtalk, un Smalltalk haute performance.

Le rachat d'Animorphic par Sun en 1997 scelle le destin des innovations de Self. Elles migrent vers HotSpot, la machine virtuelle qui va propulser Java vers les sommets. Lars Bak récidive en 2008 avec V8, le moteur JavaScript de Google, qui puise lui aussi dans l'héritage de Self.

Cette filiation technique ne constitue qu'une partie de l'histoire. Self influence aussi la conception des langages. JavaScript adopte les prototypes comme mécanisme d'héritage principal. Lua, Io et d'autres langages modernes s'inspirent de cette approche directe où les objets engendrent d'autres objets sans intermédiaire.

La philosophie du concret de Self se reflète dans son environnement de développement. Les objets y apparaissent comme des entités manipulables, visibles et modifiables en temps réel. Cette interface graphique novatrice transforme la programmation en activité tangible. On touche, on déplace, on transforme. L'abstraction cède le pas à la manipulation directe.

Simplicité, uniformité, caractère concret sont les trois principes qui guident cette vision. Réduire le nombre de concepts, traiter toutes les opérations de façon identique, utiliser des métaphores compréhensibles. Ces idées simples produisent un environnement d'une richesse surprenante.

Self n'a jamais conquis les masses de programmeurs. Trop radical pour certains, trop expérimental pour d'autres, le langage est confiné aux laboratoires de recherche. Pourtant, son influence traverse les décennies. Les techniques d'optimisation qu'il a introduites permettent aujourd'hui aux langages dynamiques de rivaliser avec leurs cousins compilés. Python, Ruby, PHP bénéficient de ses innovations.

Cette histoire singulière montre comment une quête de simplicité peut déclencher une cascade d'innovations durables. Self a démontré qu'il fallait parfois tout remettre à plat pour avancer. Sa conception minimaliste anticipe certaines tendances actuelles où l'épurement des concepts prime sur l'accumulation de fonctionnalités.

L'héritage technique de Self alimente les machines virtuelles les plus performantes du marché. Sa philosophie inspire les concepteurs en quête d'élégance. Quarante ans après sa naissance, Self reste une source d'inspiration pour qui cherche à repenser la programmation orientée objet.