Io (langage)
Io est un langage de programmation pur objet basé sur les prototypes et distribué sous licence BSD. Il a été créé en 2002 par Steve Dekorte.
Présentation
Lorsque Steve Dekorte imagina son langage, il le voulait léger, simple, multi-plateforme et facile à embarquer dans un autre programme. C'est ainsi qu'est né Io (dont le nom doit refléter sa simplicité).
Il s'inspire de différents langages tout en tirant parti de leurs qualités respectives :
- Smalltalk : toutes les valeurs sont des objets ;
- Self ;
- NewtonScript ;
- Act1 : héritage différentiel des prototypes, acteurs et promesses de réponse pour la concurrence entre tùches ;
- LISP : le code est un environnement d'exécution basé sur un arbre accessible en lecture et en écriture ;
- LUA : lĂ©ger et pouvant ĂȘtre embarquĂ©.
Io est un langage de script disposant de plusieurs extensions dans divers domaines tels que le chiffrement des données, la programmation réseau, le graphisme ou encore les bases de données.
Machines virtuelles
Io se dĂ©cline sous trois machines virtuelles ce qui lui apporte une grande portabilitĂ© puisque celui-ci (comme tout langage interprĂ©tĂ©) peut ĂȘtre exĂ©cutĂ© sous n'importe quelle architecture pour autant que la machine virtuelle soit disponible pour celle-ci.
IoVM
IoVM est la base du langage ; la plupart des fonctionnalitĂ©s se trouvant dans IoServer et IoDesktop. Elle peut ĂȘtre utilisĂ©e indĂ©pendamment ou en tant que langage embarquĂ© dans un plus grand projet.
IoServer
IoServer apporte de nombreuses fonctionnalités par rapport à la conception d'applications serveurs telles que les applications Web.
IoDesktop
Et enfin, IoDesktop, se veut ĂȘtre une solution de dĂ©veloppement multimĂ©dia. Il est donc possible par son intermĂ©diaire d'exploiter des images, OpenGL et tout ce qui est en rapport avec le multimĂ©dia.
Ces trois machines virtuelles permettent aux scripts Io de fonctionner de maniĂšre identique dans tout systĂšme. Elles sont actuellement disponibles sous Mac OS X, Linux, BSD, Irix, Win32 et Symbian. Cependant, Ă©crites en C ANSI, elles peuvent ĂȘtre facilement portĂ©es sur de nombreuses autres plates-formes.
Caractéristiques
- Basé sur les prototypes : héritage réalisé par le clonage des objets et la maintenance d'un lien dynamique entre le clone et l'original.
- Pur objet : toutes les entitĂ©s manipulĂ©es par Io dĂ©rivent du mĂȘme prototype Object.
- ramasse-miettes : les objets sont automatiquement alloués et supprimés.
- Types dynamiques : Bien que Io possĂšde une notion de type, les variables n'ont pas de type dĂ©fini, de mĂȘme que les opĂ©rations sur les prototypes. Il existe cependant des mĂ©thodes permettant de vĂ©rifier le type d'un objet.
- Fortement typé : toutes les interactions se font à l'aide de messages vers les objets. On n'accÚde jamais à la mémoire directement.
- Interprété : le code source produit n'est pas compilé vers un bytecode mais plutÎt converti vers une représentation dans la mémoire.
- Le code est une donnĂ©e : les blocks de code sont rĂ©injectĂ©s dans les objets et peuvent ĂȘtre modifiĂ©s et crĂ©Ă©s dynamiquement.
- RĂ©flĂ©chi : consĂ©quence de la rĂ©injection du code, il est possible d'investir les propriĂ©tĂ©s de chaque objet (de mĂȘme pour le code source) lors de l'exĂ©cution.
- Dynamique : puisque le code est une donnée, il est possible de changer un programme logique durant son exécution. Il est aussi possible de changer dynamiquement les attributs et les opérations sur un objet durant l'exécution. Combiné avec les prototypes, Io autorise la modification dynamique d'une classe d'objets.
Exemples de code
Io est un langage qui se veut simple et puissant. Voici quelques exemples de code.
Commentaires
//Les commentaires C++ peuvent ĂȘtre utilisĂ©s
# tout comme ceux des scripts bash
/* ou encore les commentaires
sur plusieurs lignes */
Bonjour tout le monde
La ligne de code suivante fera apparaĂźtre le message Bonjour tout le monde ! Ă l'Ă©cran.
"Bonjour tout le monde !" println
Compter les moutons
for(i, 1, 100,
mouton := block(i,
if(i == 1, return "1 mouton")
return "" .. i .. " moutons"
)
)