Dernièrement, la version 3.0 bêta 2 de Squirrel (à ne pas confondre avec SquirrelMail, un webmail) a été annoncée. Encore peu connu des développeurs, Squirrel est un langage de programmation dit
impératif et orienté objet.
Un langage impératif, c'est quoi ?
La programmation impérative, tout comme la programmation fonctionnelle, forme un paradigme de programmation très populaire. En effet, les langages C, Java, Python, PHP et bien d'autres sont impératifs. Pour expliquer la dominance de ce paradigme, il faut remonter au début de la programmation où, faute de moyens très évolués, le programmeur devait coder son programme dans un langage de bas niveau, proche du langage machine. Or, les processeurs étant pour la plupart de nature impérative, ce paradigme a donc constitué le premier type de programmation et reste actuellement très utilisé.
Principales instructions
La programmation impérative est caractérisée par des changements d'états effectués par des commandes. Un état contient les couples « emplacement mémoire/valeur » et peut-être modifié par plusieurs instructions dont voici les principales :
- Les affectations de variables et l'assignation du résultat d'une opération mathématique, logique ou fonctionnelle ;
- Les conditions, qui soumettent l'exécution d'une séquence d'instructions à certaines conditions ;
- Les boucles, qui permettent de répéter l'exécution d'instructions un jusqu'à ce qu'une condition soit réalisée ;
- Les sauts, qui s'utilisent pour déplacer le processus d'exécution à un endroit voulu dans le programme.
L'ensemble des changements d'états que l'on peut rencontrer à l'exécution d'un programme constitue un
effet secondaire ou
effet de bord.
Bien que la programmation impérative reste sans doute la plus populaire, il est bon de savoir que d'autres
paradigmes de programmation existent.
Les caractéristiques de Squirrel
Comme dit dans l'introduction, Squirrel est un langage de programmation de haut niveau,
impératif et
orienté objet. Il a été conçu en 2003 par
Alberto Demichelis dans l'optique de créer un langage de programmation léger, que ce soit en terme de taille, d'utilisation de la mémoire et de besoins en « temps réel », comme pour les jeux vidéo.
Inspiré par les langages Python, Javascript et principalement Lua, Squirrel possède une syntaxe proche de celle du C et de Java. Voici quelques-unes de ses caractéristiques et fonctionnalités :
- Gestion dynamique des types ;
- Gestion automatique de la mémoire ;
- Héritage de classe ;
- Récursion terminale ;
- Fonctions d'ordre supérieur et fonctions anonymes (lambda);
- Gestion des exceptions ;
- Support des processus coopératifs (Coroutine) ;
- Implémentation des générateurs (nombres aléatoires, par exemple) ;
- Délégation implicite par le biais des dictionnaires, types fondamentaux dans Squirrel.
Code : Java - Exemple de délégation d'un comportement spécial à un dictionnaire enfant 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | Entity <- {
}
function Entity::DoStuff()
{
::print(_name);
}
local newentity = {
_name="Je suis la nouvelle entité !";
}
newentity.setdelegate(Entity); // délégation de la fonction Entity au dictionnaire enfant newsentity
newentity.DoStuff(); //affiche "Je suis la nouvelle entité !"
|
- Support des méta-méthodes, qui permettent de redéfinir certains aspects sémantiques du langage. Par exemple, la relation entre deux dictionnaires lorsque l'on utilise un opérateur logique autre que « == ».
Code : Java - Exemple de méta-méthode qui redéfinit la relation logique entre deux dictionnaires 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | class Comparable {
constructor(n)
{
name = n;
}
function _cmp(other)
{
if(len(name) < len(other.name)) return -1;
if(len(name) > len(other.name)) return 1;
return 0;
}
name = null;
}
local a = Comparable("Alberto"); //première instance de la classe Comparable
local b = Comparable("Wouter"); //deuxième instance de la classe Comparable
if(a > b) //on cherche à comparer les deux « objets » : c'est en fait leur attribut name qui le seront, grâce à la méthode _cmp
print("A contient plus de caractères que B");
else
print("B contient moins ou autant de caractères que A");
|
Dans cet exemple, la machine virtuelle de Squirrel recherchera une méthode nommée _cmp. Si elle la trouve, c'est cette méthode qui sera appelée lorsque les objets seront comparés. Dans l'exemple ci-dessus, la méta-méthode permet de comparer la taille des chaînes, implicitement.
- et bien d'autres fonctionnalités...
À l'instar du langage Java, Squirrel possède une machine virtuelle qui interprète et exécute le
bytecode produit à la pré-compilation du programme, ce qui fait de lui un langage multiplate-forme.
De plus, Squirrel est distribué sous licence
librezlib/libpng.
Quelques nouveautés de Squirrel 3.0 bêta
En plus des nombreux bugs corrigés dans cette version 3.0, Squirrel se dote de quelques fonctionnalités intéressantes comme la possibilité d'ajouter ou de remplacer des méthodes à une classe après avoir créé une instance de celle-ci.
Code : Java - Exemple d'ajout de méthode après avoir instancié une classe avec Squirrel 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | class Test {
function Increment() { a++; }
function Print() { ::print(a);}
a = 2;
}
local i = Test(); //crée une instance de la classe Test
i.Increment();
//ajoute une méthode à la classe Test
Test.MultiplyBy <- function(amount) {
a *= amount;
}
i.MultiplyBy(5);
i.Print(); //affiche 15
|
D'autre part, le développeur de Squirrel annonce travailler sur une implémentation native de
JSON, un format de données ayant pour but de représenter des données structurées, comme le langage
XML. Actuellement, cette fonctionnalité est expérimentale, mais voici un aperçu avec cette version 3.0 bêta 2 de Squirrel :
Code : Java - Exemple d'utilisation du format JSON avec Squirrel1
2
3
4
5
6
7
8
9 | local jsontest = {
"int" : 1,
"string" : "I'm a string",
"array" : [1,2,3,4]
}
print(jsontest.int + "\n");
print(jsontest.string + "\n");
print(jsontest.array[2]+ "\n");
|
Squirrel a déjà pu faire ses preuves dans le domaine du jeu vidéo en étant utilisé par
MirthKit, un ensemble d'outils permettant de créer et de distribuer des jeux multiplate-forme
Open Source. De plus, il a été utilisé pour développer un jeu Final Fantasy pour la Wii et gère actuellement les événements scriptés du jeu Left 4 Dead 2. Dans un autre domaine, Squirrel est largement utilisé par
Code::Blocks pour les scripts. Par ailleurs, un
shell multiplate-forme a été développé en Squirrel, mais l'auteur indique que son développement a été suspendu pour une durée indéterminée.
Malgré ses quelques références, Squirrel n'est que très peu connu du grand public, malgré une documentation complète.
Liens et sources
35 Participations
Connectez-vous !
Connectez-vous !
Revenir à la liste des news