Il est encore peu connu à l'heure actuelle en raison de son anticonformisme, de son esprit innovant et de ses emprunts aux langages fonctionnels de pointe. Promis à un bel avenir. Il s'appelle Goto++.
Le monde de l'informatique industrielle est sclérosé par le manque de créativité. Il suffit qu'une entreprise nous invente un Java à la syntaxe verbeuse, inexpressive pour ne pas dire ennuyeuse, et à
l'exécution totalement inefficace, pour que l'entreprise concurrente s'empresse de créer le même langage
tel que :
Heureusement, il existe des développeurs donnant libre cours à leur créativité. Ainsi un groupe d'esprit éclairés, loin des dogmes informatiques en général et du dogme du paradigme objet en particulier, ont créé un langage innovant qui ne pourra que séduire. Ce langage s'appelle le Goto++. Vous pouvez le télécharger
librement à http://gpp.niacland.net/. Ses concepteurs nous préviennent clairement que sa syntaxe ne sied pas aux esprits bornés formatés par Visual Basic, ou pire Java. http://gpp.sidoine.net/svn/gotopp/tronc/doc/ src/grammaire.txt) tant il est vrai que Goto++ est original. D'abord il est totalement portable tout en étant plus per formant sur système Linux grâce à son type de données intégré: le pingouin. Vraiment géniaux, ses concepteurs ont créé un outil idéal pour les clusters Linux sans même s'en rendre compte. Je l'ai moimême découvert par hasard en manipulant l'agrégat natif du langage: le troupeau de pingouins. Bien sûr tout ce qui fait un langage moderne est là. Ainsi le runtime gère la mémoire avec le ramasse-miettes de Boehm ou la compilation en byte-code à la manière d'Objective Caml. Nous disposons aussi d'une interface graphique. Cependant les innovations ne sont pas tellement dans telle ou telle fonctionnalité particulière mais bien dans le concept même de ce langage qui invente le paradigme de la programmation abject. Du latin ab-jectum, jeter loin devant soi ou Go-To. L'instruction de base, dont dérivent toutes les autres, est donc le GOTO, qui ne fait rien mais sert à délimiter un commentaire. Cette instruction est étendue en l'instruction GOTOGOTO qui provoque un saut d'exécution à la ligne spécifiée. Comme le goto d'un langage classique, mais notez que nous sommes en Goto++, ceci explique cela. En outre, l'instruction GOTOGOTO peut être accompagnée d'un coefficient de probabilité à l'exécution. Goto++ permet ainsi d'écrire du code dont l'exécution n'est jamais certaine. Voici à titre
d'exemple un "Hello World" probabiliste.
Des emprunts aux langages fonctionnels
Goto se démarque par la flexibilité de ses opérateurs. Regardons une ligne de code :
Nous nous intéressons à l'opérateur d'addition +. Dans l'exemple, il reçoit en argument les entiers 3 et 5 car ceux-ci sont regroupés par }{. Dans ce cas, l'opérateur est infixe comme en Haskell. Le code affiche donc 6 d'une part et 8 (= 5+3) d'autre part. (Goto++ pousse les paramètres de la droite vers la gauche sur sa pile, c'est pourquoi l'affichage n'est pas 8 puis 6). En revanche si on supprime }{ alors l'opérateur d'addition devient préfixe, comme en Lisp. Dans ce cas le résultat affiché est 11 (= 5+6) d'une part et 3 d'autre part. On apprécie au passage la belle cohérence du langage qui pousse les arguments sur la pile de la droite vers la gauche, dans un cas comme dans l'autre. Voici maintenant un exemple de code qui démontre que l'on peut écrire une fonction qui se comporte comme le ferait un foreach partiel en C# s'il existait (car pour l'instant C# ne connaît que la classe partielle) ou bien comme un map en Haskell ou même en Python, qui on le sait emprunte lui aussi beaucoup à la programmation fonctionnelle :
Le code, écrit sous Emacs, est clair. Un troupeau de pingouins modélise l'équipe de Programmez! et le troupeau intègre une "machineapingouins" qui est la fonction qui sera appliquée aux membres du troupeau. Cette fonction simule une augmentation de salaire et elle est invoquée dans le code après l'affection d'une valeur de départ à chaque membre. Remarquez que cet appel aurait pu être affublé d'un coefficient probabiliste pour refléter mieux encore la réalité.