· Tech watch

Javascript et ruby, le retour des langages dynamiques

Les langages Ruby et javascript sont des langages dynamiques. Ils sont ainsi très modulaires, mais également moins structurant que leur homologues non dynamiques.

Dans les années 80-90 le langage Smalltalk a eu son heure de gloire.
C’est un langage orienté objet (tout objet), avec un ramasse miette, une gestion d’exceptions. Ce langage a la particularité d’être dynamique. Cela veut dire que l’on peut modifier la structure des classes de manière programmatique. On peut par exemple ajouter des méthodes à une classe dans un bout de code complètement externe à la classe. Cela va même largement au delà, on peut aussi modifier la syntaxe du langage simplement en écrivant du code.

Entre autres à cause de ses propriétés dynamiques, le langage smalltalk a perdu de la vitesse face à Java. En effet, comment assurer la bonne exécution d’un composant si l’on peut redéfinir les méthodes, le langage et donc la manière dont va être exécuté notre composant. Les éléments de sécurité du modèle objet Java ont beaucoup participé à sa popularité.

Aujourd’hui, les langages javascript et ruby sont deux langages qui
gagnent en popularité. Ces deux langages sont dynamiques, on peut
redéfinir, ajouter des méthodes aux classes de manière externe. Dans le cadre de javascript, un exemple concret des problèmes que cela peut poser est la bibliotèque prototype. Cette bibliotèque est à la base de nombreux frameworks Ajax et ajoute des comportements aux objets de base de Javascript, notamment une nouvelle méthode à la classe Object dont héritent tous les objets du langage. Cela a pour conséquence qu’en ajoutant cette bibliotèque à votre page html, vous faites planter le framework de validation de formulaire de Struts.

Comme exemple de syntaxe, l’ajout de la méthode à la classe objet par prototype se fait comme cela :

Object.extend = function(destination, source) <em>for (property in source) {
destination[property] = source[property] ;
</em>
return destination ;
}

Un langage de programmation est défini entre autres par :

  • une syntaxe
  • des bibliotèques, des fonctions, des classes de base, un SDK
  • un environnement de développement, d’exécution, des outils …

Dans la mesure ou un langage permet au programmeur de modifier ses classes de base, on peut considérer finalement qu’il y a autant de langages que d’applications modifiant les classes de base.

Ceci dit, ce dynamisme offre beaucoup de souplesse et de puissance aux langages, ce qui fait en partie leur attrait. L’idée n’est pas de dire ruby et javascript sont de mauvais langages (loin de moi cette idée) mais de pointer du doigt des problématiques que l’on a déjà rencontré dans le passé et que l’on va certainement croiser à nouveau.

Un commentaire

  1. Tristan Rivoallan

    Et la communauté Ruby commence à se dire la même chose…

    http://avdi.org/devblog/2008/02/23/why-monkeypatching-is-destroying-ruby/

Les commentaires sont désormais fermés.