Neko (langage)

Un article de Wikipédia, l'encyclopédie libre.

Neko est un langage de programmation de haut niveau typé dynamiquement, basé sur les prototypes, et développé par Nicolas Cannasse dans le cadre de la R&D au sein de la société Motion-Twin.

Concept[modifier | modifier le code]

Neko possède un compilateur et une machine virtuelle (NekoVM) avec ramasse-miettes (Boehm GC en l'occurrence). Le compilateur convertit un fichier source .neko en fichier bytecode .n qui peut être exécuté sur la machine virtuelle. Neko étant typé dynamiquement, sans classe fixée (programmation par prototypes), afin d'exécuter correctement un code, il suffit d'utiliser le bon runtime mapping, plutôt que le bon type mapping. Dit plus simplement, un langage qui n'est pas basé sur les classes (par exemple C) ou dont les classes sont modifiables (ajout de champs ou de fonctions à une instance particulière de la classe, par exemple en Python ou JavaScript) est difficilement compilable pour la JVM qui demande une classe fixe pour tous les objets (un type mapping), alors que Neko ne demande que des structures de données et du code sans typage omniprésent. Neko favorise donc l'implémentation de langages sur sa machine virtuelle ; pour reprendre la FAQ du langage : « [...] il est plus facile d'implémenter un langage, nouveau ou préexistant, sur la NekoVM que sur la CLR ou la JVM, étant donné qu'il n'est pas nécessaire de gérer un système de typage de haut niveau. Cela signifie également que différents langages peuvent inter-opérer plus facilement, puisqu'ils partagent uniquement les mêmes structures de données et non pas les mêmes types. »[1].

Contrairement à la plupart des langages de script actuels, Neko nécessite d'être compilé avant exécution. En conséquence, comme il n'est pas interprété, il est souvent relativement rapide pour ce type de langage.

Exemples[modifier | modifier le code]

Hello World[modifier | modifier le code]

$print("Hello World!");

Conversions de type[modifier | modifier le code]

$int("67.87"); // Convertit la chaine "67.87" en l'entier 67
$float(12345); // Convertit l'entier 12345 en le flottant 12345.0000
$string($array(1,2,3)); // Convertit le tableau [1,2,3] en la chaine "[1,2,3]"

Objets[modifier | modifier le code]

o = $new(null); // nouvel objet vide
o2 = $new(o); // crée une copie de o
o2 = $new(33); // si le parametre n'est pas un objet, on lève une exception
o.field = value; // affecte à l'attribut "field" la valeur "value"
o.field; // renvoie la valeur de l'attribut "field" de l'objet o

Méthodes[modifier | modifier le code]

foo = function() {
	$print(this.x);
}
o = $new(null);
o.x = 3;
o.bar = function() { 
	foo(); 
};
o.bar(); // affiche 3

Portée des variables[modifier | modifier le code]

var x = 3;
f = function() {
	$print(x);
}
x = 4;
f(); // affiche 3

Prototypes[modifier | modifier le code]

var proto = $new(null);
proto.foo = function() { 
$print(this.msg) }

var o = $new(null);
o.msg = "hello";
$objsetproto(o,proto);
o.foo(); // affiche "hello"

$objsetproto(o,null); // supprime proto
o.foo(); // exception

Fonctionnalités web[modifier | modifier le code]

Neko inclut un module mod_neko ([1]) pour le serveur web Apache. Il permet notamment d'utiliser les requêtes utilisateurs GET et POST :

get_params = $loader.loadprim("mod_neko@get_params",0);
$print("PARAMS = "+get_params());

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]