On parle souvent de traits pour qualifier les différentes caractéristiques d'un langage. Ces "traits" permettent de facilement catégoriser les langages, et de repérer les similarités entre eux. Ainsi, bien qu'il n'existe pas de nomenclature "standard", j'ai tenté de dégager des traits permettant de "dresser un portrait" du langage Io:

Peu de langages disposent de l'ensemble de ces traits, qui confèrent à Io une flexibilité très importante. On pensera notamment à tous les outils de génie logiciel qui peuvent ainsi manipuler la structure du programme, et au domaine de l'intelligence artificielle (notamment les algos génétiques) qui pourrait tirer profit de l'auto-modification de programmes.

Outre les traits d'un langage, il y a également son modèle de donnée qui le caractérise. Io, étant conçu dans un esprit proche de SmallTalk, il dispose d'un modèle objet pur, dont voici les principales caractéristiques:






En un mot : Io est un langage très flexible, où l'accent a été mis sur le minimalisme des concepts. Dans la continuité des langages "dynamiques" (ou "de script") actuels, Io offre beaucoup de libertés au programmeur pour adapter et modifier le langage lui-même, ce qui en fait donc une très bonne souche pour langages de domaines.

Certains se demanderont donc quel est l'intérêt de cette flexibilité ? Une réponse possible est que cette flexibilité permet aisément d'adapter le langage à des domaines particuliers, et par là de rendre les programmes plus expressifs. Ceci peut paraître simple (l'expressivité d'un programme), mais je crois que beaucoup de gens ne se rendent pas comptes des conséquences néfastes d'un programme peu expressif (maintenabilité, correction de bug, ajout de fonctionnalités).

L'expressivité d'un langage, ou d'une "framework", ou d'une API, permet de diminuer le nombre de lignes (voila qui va satisfaire les gens en manque de chiffre), de rendre le programme plus clair, et généralement de rapprocher l'écriture du programme de la spécification ou du "concept" du programme. Pour moi, c'est clairement ce dernier point qui est l'enjeu le plus important : bien des bugs sont la résultante d'un processus complexe de passage du concept à l'implantation (vous avez déja programmé avec les 'phtreads' ??)

En ce qui me concerne, j'ai notamment utilisé Io dans le cadre de prototypes de plateformes SIP pour Alcatel et Wengo, avec de très bon résultats : il était possible d'écrire de petites "applications SIP" (avec gestion des session, concurrence, etc) en à peine quelques dizaines de lignes... chose qu'il n'est pas encore vraiment possible avec HTTP.

Pour ceux qui veulent en savoir plus :