# 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.

### Bonjour tout le monde

La ligne de code suivante fera apparaître le message Bonjour tout le monde ! à l'écran.