Developpez.com - Programmation

Le Club des Développeurs et IT Pro

Crumb : Un nouveau langage de programmation où il n'y a pas de mots-clés et où tout est une fonction

Le 2023-08-29 16:50:37, par Jade Emy, Communiqués de presse
Crumb est un langage de programmation de haut niveau, fonctionnel, interprété, dynamiquement typé, à usage général, avec une syntaxe laconique et une bibliothèque standard verbeuse.

Il présente les caractéristiques suivantes :
  • Strictement aucun effet secondaire pour vous aider à écrire du code fonctionnel
  • La possibilité de localiser les effets des fichiers Crumb importés.
  • Le typage dynamique et le "garbage collection".
  • 0 mot-clé, tout est une fonction.



Syntaxe
Crumb utilise une définition syntaxique particulièrement laconique. La syntaxe entière peut être décrite en 6 lignes d'EBNF. De plus, il n'y a pas de mots réservés, et seulement 7 symboles réservés.

EBNF
Code :
1
2
3
4
5
6
7
program = start, statement, end; 
statement = {return | assignment | value}; 
return = "<-", value; 
assignment = identifier, "=", value; 
value = application | function | int | float | string | identifier; 
application = "(", {value}, ")"; 
function = "{", [{identifier}, "->"], statement, "}";

Tokens
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
"=" 
"(" 
")" 
"{" 
"}" 
"->" 
"<-" 
identifier 
int 
float 
string 
start 
end

Spécificités

Les chaînes de caractères sont des caractères entourés de guillemets, par exemple :
Code :
1
2
3
"hello world" 
"this is\nsplit between new lines" 
"\e[31mthis text is in red\e[0m"
Les codes d'échappement dans crumb sont équivalents à leurs codes d'échappement C respectifs. La liste des codes d'échappement pris en charge est la suivante :
Code :
1
2
3
4
5
6
7
8
9
10
"\a" 
"\b" 
"\f" 
"\n"  
"\r" 
"\t" 
"\v" 
"\e" 
"\\" 
"\""
Les nombres entiers sont des groupes de caractères numériques, qui peuvent être précédés de -, par exemple :
Code :
1
2
3
1234 
-14 
345
Les flottants sont comme les entiers, mais ils contiennent une décimale, par exemple :
Code :
1
2
3
13.45 
-2.3 
745.0
Les identificateurs sont des ensembles de caractères qui ne sont pas séparés par des espaces, qui ne commencent pas par des guillemets ou des chiffres, et qui ne sont pas des symboles réservés, par exemple :
Code :
1
2
3
4
hello 
x₂ 
symbol1 
+
Les commentaires commencent par "//" et se terminent à la fin d'une ligne, par exemple :
Code :
1
2
// this is a program that prints hi 
(print "hi") // this prints hi

Vous pourrez voir plus d'information dans la source.

Source : GitHub

Et vous ?

Pensez-vous que ce langage de programmation soit crédible ou pertinent ?
Pensez-vous que ce langage de programmation soit utile à quelque chose ? Si oui à quoi ?
Que pensez-vous de ce langage de programmation ?
Selon vous, quelle est la différence avec le langage de programmation Lisp ?

Voir aussi :

La version 3.6b d'ARM uLisp, une variante du langage de programmation Lisp conçue pour microcontrôleurs, est disponible. Elle prend en charge la sauvegarde d'images sur toutes les cartes ATSAMD21

Un développeur publie un langage de programmation qui peut être traduit automatiquement en C, C++, C#, Java, JavaScript, etc., avec une traduction rapide et sans machine virtuelle

Le langage fonctionnel et impératif Janet, qui reprend des fonctionnalités de Lua et Clojure, s'apparente à une version légère de Lisp implémentée en C
  Discussion forum
1 commentaire
  • walfrat
    Membre émérite
    Le concept de base est intéressant mais bon :

    (loop 100 {i ->
    i = (add i 1)

    (if (is (remainder i 15) 0) {
    (print "fizzbuzz\n"
    } {
    (if (is (remainder i 3) 0) {
    (print "fizz\n"
    } {
    (if (is (remainder i 5) 0) {
    (print "buzz\n"
    } {
    (print i "\n"
    })
    })
    })
    })
    Ca pique les yeux toutes ces paranthèses.

    En outre je pars du principe que si la syntaxe des langages c'est largement enrichis plutôt que de rajouter toujours des fonctions, c'est justement parce que les fonctions ne sont as toujours l'outil appropriés quand bien même 95% de mon code soit de la définition ou de l'appel à d'autres fonctions.