Rush

Le langage Rush

Une visite courte et honnête de RushScript, écrite à partir de la documentation propre de Rush.

Ce qu'est Rush

Rush est deux choses fusionnées dans un seul binaire : un environnement d'exécution de processus et un langage, RushScript, qui s'y exécute. RushScript est interprété : l'auteur n'a aucune étape de compilation séparée.

Des valeurs, pas des variables

Rush n'a pas de variables. Une liaison associe une étiquette, un nom sans guillemets, à une valeur : port = 8080 lie l'étiquette port au nombre 8080.

port = 8080

Des crochets partout

[ et ] sont les seuls crochets de regroupement. Ils contiennent les arguments d'appel, les littéraux de liste et de table, et les expressions groupées. Les arguments sont séparés par des virgules : add[10, 20]. Les parenthèses sont refusées hors du texte.

add[10, 20]

Chaque ligne fait quelque chose

Une ligne lie, appelle ou aiguille. Une ligne qui ne fait que nommer une valeur, comme 5 ou x, ne fait rien : elle est refusée avec l'erreur RX0065.

x = 5
write[x]

Voir la page de l'erreur RX0065

Écrire une sortie

write['hello world'] écrit sur la sortie standard. write.log et write.debug sont les deux autres sortes de parole : la première pour le système qui parle à l'utilisateur, la seconde pour le développeur, visible seulement avec DEBUG=1.

write['hello world']

Lier et apparier

= lie un nom à une valeur ; : apparie une clé à sa valeur. Ce sont deux actes, donc deux écritures : cfg = [port: 8080].

cfg = [port: 8080]

Des formes qui se font respecter

Déclarez une forme comme une table de règles et attachez-la avec :. Une valeur qui enfreint une règle est refusée à la porte, au lieu d'être découverte plus tard.

Banana = [grams: number.real.ge[120].le[180], length_cm: number.real.ge[12].le[25], id: text.uuid]
good   = [grams: 150, length_cm: 18, id: '…']: Banana
bad    = [grams: 999, length_cm: 18, id: '…']: Banana

Des validateurs, sans import

Ce sont des fonctions intégrées au langage, pas une bibliothèque : email, ipv4, ipv6, uuid, url, iso8601, rfc3339, cpf, cnpj, cep, phone, hex et base64.

État des lieux honnête

La documentation de Rush le dit sans détour : jeune, rapide, pas prêt, volontairement. Lisez cette page comme une visite, et les documents du moteur comme l'autorité.

Sources consultées

Cette page a été écrite à partir des fichiers suivants de l'arborescence de documentation de Rush. Seuls les exemples et règles qui y figurent sont utilisés. Les fichiers sont rédigés en anglais.

  • /f/dev/rush/README.md (What Rush is: Runtime + Language; Why use rush instead of Python)
  • /f/dev/rush/doc/FLOPS/09_language.md (Values, not variables; Brackets everywhere; A line holds an expression; A key-value pair is key: value; The output verb; The Banana)