IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par Jade Emy

7PARTAGES

18  0 
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
1
2
3
1234 
-14 
345
Les flottants sont comme les entiers, mais ils contiennent une décimale, par exemple :
Code : Sélectionner tout
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 : Sélectionner tout
1
2
3
4
hello 
x₂ 
symbol1 
+
Les commentaires commencent par "//" et se terminent à la fin d'une ligne, par exemple :
Code : Sélectionner tout
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

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de walfrat
Membre émérite https://www.developpez.com
Le 31/08/2023 à 13:20
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.
0  0