Aller au menu - Aller au contenu

Bêta 3.0 du langage Squirrel disponible

Revenir à la liste des news
Participer à la discussion

Image

Informations

Contributeur(s) : Graphox
Publié : le 21/08/2010 à 05:00:00
Catégorie : Programmation
Visualisations : 9 004

Licence : Creative Commons BY SA

Bêta 3.0 du langage Squirrel disponible

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 ?

Image utilisateur

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

Image utilisateur

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 Squirrel
1
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

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2 
Pseudo Discussion
3 visiteurs sur cette news (0 membre et 3 anonymes)
Page Précédente  1  2 
Hors ligne keke21410 # Posté le 22/08/2010 à 11:13:45
"Belong to web"
Avatar

Ville : Ancey
Pays : France métropolitaine

Sympas comme langage, la syntaxe est aussi bizarre, si je viens à m'y mettre ça m'changera du c ou du php :)
 
Hors ligne patate_violente # Posté le 22/08/2010 à 14:26:52
Avatar

Ville : Triel sur seine
Pays : France métropolitaine
Études : Université de Cergy-Pontoise

Citation : Nadrieril
Je voudrais rappeller que le fait qu'un langage de programmation utilise une machine virtuelle n'est pas forcement synonyme de lenteur d'execution...
Pour certaines taches, le Java peut s'averer tres competitif avec un langage de plus bas niveau comme le C.
Apres, bien sur, il est assez probable que la JVM soit plus complexe et puissante que la machine virtuelle d'un langage plus recent et moins connu.

Il y a quand même une perte de quelques %% on va pas nier
Mais vu le nombre de facilités que ça donne au programmeur c'est quand même négligeable je pense qu'on est tous d'accord (environnement surtout...) :D

quoique pour l'unique cas des jeux vidéos complexes un truc qui tourne tout seul c'est quand même mieux, du moins de ce qu'on m'a appris c'est ça que je voulais dire... ça doit représenter 1% quoi
 
Hors ligne sylvior # Posté le 23/08/2010 à 09:03:52

Ville : Saint marcel
Pays : France métropolitaine
Études : INSA Lyon

Le problème sur un jeu vidéo c'est que quelques % c'est souvent passer de 30 à 25fps et sa peut se retrouver problématique.
Le langage semble intéressant mais j'ai pas le temps d'apprendre encore un autre langage, ou alors faudrait que je sois motivé.
Hors ligne Squirel # Posté le 23/08/2010 à 20:59:48
Avatar

OLOL²
Rien que pour le nom, ça me donne envie de l'apprendre ce langage =D
Hors ligne paratout # Posté le 24/08/2010 à 04:45:08
just be ... you !
Avatar

je trouve ce langage tres intéressant et merci pour la news

Je suis un Zer0 ... du rang 0 :p
 
Pour accéder à cette section
Connectez-vous !
connexion_rpx

Revenir à la liste des news