Pike (langage)
Pike est un langage de programmation dynamique de haut niveau interprété générique et multiplate-forme doté d’une syntaxe proche du C. À la différence d’autres langages dynamiques, Pike est typé à la fois statiquement et dynamiquement, et requiert des définitions de type explicite. Il offre un système souple de typage et une rapidité de développement que permettent les langages dynamiquement typés, tout en offrant certains des avantages des langages statiquement typés.
Pike | ||
Date de première version | 1994 | |
---|---|---|
Paradigme | multi-paradigmes : orienté objet, fonctionnel, procédural | |
Auteur | Fredrik HĂĽbinette | |
Développeur | Développement communautaire appuyé par la division Systèmes et Logiciel du département d’informatique et de science de l’information de l’université de Linköping | |
Dernière version | 8.0.1116 ()[1] - [2] | |
Influencé par | LPC, C, C++ | |
Système d'exploitation | Systèmes type Unix, Microsoft Windows | |
Licence | GPL/LGPL/MPL | |
Site web | http://pike.lysator.liu.se/ | |
Pike dispose d’un ramasse-miettes, de types de données évolués et de fonctions anonymes, ce qui autorise de programmer suivant plusieurs paradigmes, au choix du développeur : programmation orientée objet, fonctionnelle ou encore programmation impérative. Pike est un logiciel libre, délivré sous une triple licence : licence publique générale GNU (GPL), licence publique générale limitée GNU (LGPL) et licence publique Mozilla (MPL).
Historique
Pike plonge ses racines dans le langage LPC, un langage conçu à l’origine pour développer des MUD. Des programmeurs réunis au sein du Lysator, le club informatique de l’université suédoise de Linköping, en particulier Fredrik Hübinette et Per Hedbor, séparèrent le langage et la machine virtuelle du reste du pilote MUD, baptisant le résultat obtenu LPC4, et l’utilisèrent comme un langage de prototypage rapide pour diverses applications.
La licence de LPC interdisait d’utiliser le langage à des fins commerciales, ce qui poussa les développeurs à réécrire complètement l’interpréteur et à le publier en 1994 sous licence publique générale GNU, sous le nom de µLPC (micro LPC).
En 1996, µLPC fut renommé Pike, un nom jugé plus vendeur commercialement. Bien que son nom ait souvent changé avec le temps, l’entreprise aujourd’hui connue sous le nom de Roxen Internet Software[3] a employé nombre de développeurs Pike et fourni des ressources pour soutenir le développement de Pike. Roxen est aussi le nom d’un serveur web développé par l’entreprise en Pike. En 2002, l’université de Linköping reprit la maintenance et l’évolution de Pike à Roxen. Plusieurs développeurs Pike se sont alors fait embaucher chez Opera Software, qui dispose de bureaux à Linköping ; Pike joue un rôle central dans la partie serveur/passerelle du logiciel Opera Mini[4].
Syntaxe du langage
Hello World
int main() {
write("Hello world!\n");
return 0;
}
La syntaxe ci-dessus s’explique de la façon suivante :
- La première ligne annonce la fonction main. C’est la première fonction exécutée au lancement d’un programme ; main signifie « principal(e) » en anglais. La mention int qui la précède signale qu’un nombre entier sera retourné à la fin de la fonction.
- La fonction write envoie une chaîne de caractères sur la sortie standard, qui est bien souvent une interface en ligne de commande.
- La troisième ligne retourne un nombre à l’appelant de la fonction, dans ce cas l’interface en ligne de commande, pour laquelle zéro signifie par convention que le programme s’est exécuté sans erreur.
- Les accolades enserrent la fonction et le point-virgule sépare les instructions (ce qui implique que la fonction aurait pu tenir sur une seule ligne int main(){write("Hello world!\n");return 0;})
- Le \n après le « Hello world! » est le caractère symbolisant une fin de ligne.
Types de données
La liste qui suit montre tous les types acceptés en standard par Pike. Des types de données plus complexes comme les séquences, les files, les tas, les piles, etc. sont disponibles dans le module ADT inclus avec Pike.
Types de données basiques :
- entier (int)
- flottant (float)
- chaîne (string)
Types d’ensembles :
- tableau (array)
- mapping
- multiensemble (multiset)
Autres types :
- programme (program, la représentation compilée d’une classe)
- objet (object, l’instance d’une classe)
- fonction (function)
Pike oblige à déclarer explicitement toutes les variables. Il utilise cette information pour avertir sur d’éventuelles erreurs de type au moment de l’interprétation du code. Le code ci-dessous causera une erreur parce que la valeur de la variable « number » doit être un entier mais que le code tente d’y assigner un nombre flottant puis une chaîne de caractères.
int number; // variable integer, n'accepte que des entiers
number = 5.5; // 5.5 est un nombre flottant, ce qui conduit Ă une erreur
number = "5"; // "5" est une chaîne, et non le nombre entier 5, d'où erreur
Ce type de comportement est habituellement considéré comme restrictif et limitant par les tenants des langages dynamiquement typés. Toutefois, à la différence du C, du C++ ou de Java, pour ne citer qu’eux, Pike a recours à un système de typage spécifique qui permet au programmeur de déclarer des variables comme pouvant contenir une valeur de différents types, une chose la plupart du temps impossible ou dangereux dans la plupart des langages apparentés au C.
Le code suivant montre comment une variable peut être déclarée de deux types différents, c’est-à -dire comme pouvant contenir l’un ou l’autre de ces types au cours de l’exécution du programme.
int|float number; // variable de type entier OU flottant
number = 5; // ceci est valable
number = 5.5; // ... et ceci Ă©galement.
Du fait qu’une variable peut être déclarée comme pouvant être de plus d’un type, des fonctions sont fournies pour déterminer quel type de données une telle variable stocke à un instant t. Ces fonctions suivent une convention de nommage : le nom du type accolé à la lettre p ; ainsi trouve-t-on intp, floatp, stringp, etc.
int|float number;
number = 5;
intp(number); // renvoie vrai parce que number stocke un entier
floatp(number); // renvoie faux
number = 5.5;
floatp(number); // renvoie vrai parce que number stocke maintenant un nombre flottant
En outre, il existe un type de données mixed spécial. Sa définition permet à une variable de contenir n’importe quel type de données.
mixed anything;
anything = 5; // anything est maintenant l’entier 5
anything = 5.5; // anything est maintenant le flottant 5,5
anything = "5"; // anything est maintenant la chaîne "5"
Pour convertir une valeur d’un type à un autre, Pike utilise une conversion de type explicite :
mixed anything;
anything = (int)5.5; // anything est maintenant un entier de valeur 5
anything = (string)anything; // anything est maintenant une chaîne qui vaut "5"
Notes et références
- « https://pike.lysator.liu.se/index.xml » (consulté le )
- « News announcements 2020 » (consulté le )
- Site officiel de Roxen Internet Software
- (en) Vincent Lextrait, « The Programming Languages Beacon, v10.0 », (consulté le )