Ruby vs Python ?

19May06

Pour répondre à Sébastien au sujet de son dernier billet intitulé Ruby vs Python, je me permettrais dans un premier temps de reprendre une des réponses du fil de discussion provoqué sur Lambda the Ultimate (le recoin des amoureux d’ingéniérie logicielle).
Voici ce qui est cool dans le langage Ruby :

  • en Ruby tout est objet, absolument tout
  • les blocks (permet l’implémentation de fonctions anonymes)
  • la fonction yield est extrêmement bien vue (permet d’invoquer le block passé à une fonction)
  • la fonction eval qui permet d’évaluer (!) une chaine de caractère en tant que code Ruby (évidemment, on peut faire des trucs bien gruik avec, mais ça permet aussi de construire des DSL — Domain Specific Language)
  • duck typing (le type d’un objet provient de ses capacités et non de la classe par laquelle il a été instancié)
  • le principe des mixins, permettant de mixer le code d’un module avec celui d’une classe afin de profiter de code déjà écrit

Mais ce qui me plait le plus dans le langage Ruby, c’est surtout sa dynamicité et tout ce qui y contribue.
Voici ce que propose Ruby dans ce domaine :

  • method_missing : quand un objet implémente cette méthode, cela lui permet d’attrapper les appels à des fonctions qui n’existent pas pour cet objet et faire toute manipulation utile en prenant en compte le nom de la méthode appelée ainsi que ses paramètres. C’est ce qui est utilisé dans ActiveRecord (l’Object Relationnal Mapper de Ruby on Rails) pour que les objets répondent à des requêts du type find_by_firstname_and_lastname alors qu’on a jamais défini nulle part cette méthode.
  • define_method : permet de définir une méthode dynamiquement
  • inherited : cette méthode est appelée lorsqu’une classe fille est instanciée (très pratique pour faire un système de plugin qui trouve automatiquement les plugins actifs)
  • on peut redéfinir ou étendre une classe très simplement

Enfin pour compléter un petit peu ce panorama, on peut aussi rajouter que Ruby intègre un système distribué, DRb (Distributed Ruby), semblable à Corba, mais beaucoup, beaucoup plus simple à mettre en place.

Evidemment, bien que le langage soit très agréable à utiliser, tout n’est pas rose dans le monde Ruby. Parmi les moutons noirs, on peut compter :

  • SOAP4R (toolkit SOAP pour Ruby) est vraiment misérable (et je pèse mes mots) : documentation quasi inexsitante, pas moyen de faire des choses très simples à faire avec d’autres toolkits SOAP (comme SOAP Lite).
  • REXML le parser XML de référence à des performances très mauvaises, notamment avec XPath

Dans ces 2 cas, je pense que c’est la faute à la faible notoriété (jusqu’à présent) du langage Ruby, mais comme dans tout projet Libre, la sélection naturelle va faire son effet. D’autant plus que Rails montre le bon exemple et la voie à suivre en ce qui concerne le développement logiciel : on facilite la vie au développeur pour qu’il puisse se consacrer à des vrais problèmes d’ingéniérie logicielle et plus à des effets de bord induits par un design de mauvaise qualité.



No Responses Yet to “Ruby vs Python ?”

  1. Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: