- Sème,
Bonjour !
Allez, je me lance. Vu que j’y ai été invité par Situphen, je vous présente mon petit projet du moment. Le soleil brille, la petite a trouvé tous ses œufs, le moment est idéal.
D’abord une petite parenthèse pour préciser que si j’ai choisi "Sème" comme pseudo, ce n’est pas parce que je suis un morphal qui ne veut que présenter son projet. Mon pseudo habituel, c’est "Zéro", et c’est le nom sous lequel je me suis inscrit. Puis en surfant un peu, j’ai fini par comprendre que ZdS était un descendant du SdZ. Du coup, il me semblait inapproprié de garder ce pseudo "Zéro". Comme "Sème" est mon mot du mois, j’ai pris ça. C’est le nom "Sème" d’où découle "sémantique". Bref, on s’en fiche.
Alors c’est quoi-t-y ce projet. D’abord, je m’adresse aux développeurs : non, ce n’est pas un langage de programmation nouveau et génial, que vous pourriez utiliser pour faire des trucs somptueux ou inédits. Maintenant je m’adresse aux noobz : oui, c’est un petit langage de programmation, mais si vous souhaitez devenir développeur de logiciels, commencez plutôt par un vrai langage, Python, C++, Java, Perl, ce que vous voulez. Si vous voulez faire carrière, ce n’est pas une bonne idée de commencer par Sème, parce que ce langage ne vous préparera pas à une quelconque activité professionnelle.
Ok, du coup à qui ça s’adresse ? Eh bien il y a des gens qui apprécient le sudoku, les mots croisés, les jeux de société en général, les puzzles et les casse-têtes chinois, les échecs et le jeu de go. Je pense que ça s’adresse plutôt à eux. J’ai plutôt envie de décrire Sème comme une plateforme permettant à ses utilisateurs de "jouer" avec l’algorithmique. C’est très basé sur "Computer Science Logo Style" de Brian Harvey, dont je suis un gros fan. C’est un livre énorme (j’adore les livres énormes, voyez-le comme le Seigneur des Anneaux des bouquins sur la programmation), dont la progression est lente, agréable, presque (za)zen. Sème, c’est un jeu pour les gens calmes.
Techniquement, c’est un croisement de Logo, le langage qui se cache derrière la célèbre tortue, et de Io, le langage (trop) moderne de Steve Dekorte. Une des caractéristiques de Sème est de ne pas avoir de forme spéciale (dans un langage classique x=x+1 est une forme spéciale, puisque le 1er x n’est pas remplacé par sa valeur).
1 2 | make: 'x 5 print: x |
Ce petit bout de code affecte 5 à la variable nommée "x", puis affiche la valeur de la variable x. Le x de la 1ère ligne est précédé d’une apostrophe : cela indique à l’interpréteur qu’on ne parle pas du contenu de x mais du symbole "x". En anglais, apostrophe se dit "quote", et "quote" veut aussi dire "citer". Ici, on "cite" le nom "x".
Mettre deux points à la fin d’un mot indique à l’interpréteur qu’on souhaite appeler la fonction. Dans notre exemple, on appelle la fonction "make", et on appelle ensuite la fonction "print".
L’interpréteur vous donne les arguments de fonction dans l’ordre où ils arrivent, dans le plus pur style Logo : si la fonction a besoin de trois arguments, les trois tokens suivant la fonction seront pris comme arguments. Dis autrement, c’est de la notation polonaise, dite "préfixée" :
1 | + 5 * 3 6 |
Ceci signifie "la somme de cinq et du produit de 3 par 6".
Toutes les valeurs sont des objets (littéralement), et tous les objets ont des attributs. Un attribut est comme une variable interne, contenue dans l’objet. Imaginons qu’on souhaite représenter un chien. Il pourrait avoir un attribut nom, un attribut race, taille, âge, …etc. Voilà à quoi cela ressemblerait.
1 2 3 4 | new: 'Maxou [ Chien ] Maxou'set: 'âge 4 Maxou'set: 'race 'Charclo Maxou'set: 'taille 40 |
La 1ère ligne crée un objet "Maxou" ayant "Chien" comme prototype, mais on en reparlera plus tard.
Ce que je veux mettre en valeur ici, c’est qu’on vient de définir plusieurs attributs de Maxou, mais que certains de ces attributs mériteraient des précisions. Notamment, on aimerait pouvoir préciser l’unité de mesure de la taille, ainsi qu’une marge d’erreur pour l’âge parce qu’en fait on n’a jamais su exactement l’âge qu’il avait, ce chien. Ben oui, il s’est donné. Fastoche, on peut donner des attributs aux attributs :
1 2 | Maxou'âge'set: 'margeErreur 1.5 Maxou'taille'set: 'unitéMesure 'cm |
Voilà, ce n’est pas compliqué. Bon je sais je vous le fais un peu au lance-pierre, et j’en suis désolé, mais il faut bien commencer quelque part. Je suis preneur de questions, et avide d’y répondre.
Je vais détailler un peu la syntaxe. Une apostrophe qui précède un nom indique qu’on parle du nom lui-même et non de ce qu’il symbolise, comme on l’a vu. Maintenant le nouveau truc : une apostrophe qui suit un nom indique à l’interpréteur qu’il doit ramener l’attribut qu’on va identifier juste après :
1 | Maxou' 'âge |
En écrivant ceci, on dit à l’interpréteur "l’attribut âge de l’objet Maxou". Comme ça passait bien, j’ai mis un peu de sucre syntactique comme on dit, et dans ce genre de situations on peut écrire directement :
1 | Maxou'âge |
Ce qui veut dire la même chose.
Maintenant, que se passe-t-il si je demande à un objet un attribut qu’il ne possède pas ? Vous me voyez venir :
1 | Maxou'aboie: 'wafwaf |
Si l’attribut ne peut être trouvé dans l’objet lui-même, il sera recherché dans ses prototypes (en depth-first). Maxou n’a pas d’attribut "aboie", mais si l’objet "Chien" en a un, c’est cet attribut qui sera utilisé. On fait donc de l’héritage multiple à la "Io".
Allez, un dernier petit mot sur les fonctions. On n’a pas de type "fonction" en Sème. On écrit juste un bloc entre crochets, et on lui colle un attribut "input" contenant la liste des noms de paramètres attendus :
1 2 3 4 5 6 7 8 9 | make: 'fib [ ife: < num 3 [ 1 ] [ + fib: - num 1 fib: - num 2 ] ] fib'set: 'input [ num ] |
Tout ça reste très primitif bien sûr, j’en suis au tout début. Les choses peuvent bouger encore beaucoup. Mais ma petite Fibonacci récursive fonctionne, sur une implémentation en JS pur dans le browser, avec une jolie interface épurée. C’est ultra lent : 6 secondes pour fib(20). Mais bon, je n’ai pas l’objectif d’en faire quelque chose de rapide de toute façon. Pourquoi ? Je répondrais : pourquoi pas ?
Voilà un peu ce que je fais en ce moment. J’espère apprendre à vous connaitre, m’intégrer peut-être petit à petit dans cette communauté qui est la vôtre, et qui m’a l’air sympa.
Bon weekend de Pâques !