Stubx

Le langage de script minimaliste, poétique et puissant.

Nouveautés de la Version 3

La version 3 transforme Stubx d'un simple langage en un écosystème de développement complet. Voici comment tirer parti des nouveaux outils.

1. REPL Interactif (Read-Eval-Print Loop)

Le REPL est votre terrain de jeu. Il permet d'exécuter du code Stubx ligne par ligne, idéal pour tester une fonction, vérifier une syntaxe ou effectuer des calculs rapides sans créer de fichier.

Comment l'utiliser :

python "Current Release (V3)/compiler.py" --repl

Une fois lancé, vous pouvez interagir avec l'interpréteur :

stubx [1]> let x = 10
stubx [2]> x * 2
=> 20
stubx [3]> "hello" |> upper
=> HELLO
stubx [4]> exit

Astuce : La variable ~ fonctionne entre les lignes ! Le résultat de la ligne 2 est accessible à la ligne 3 via ~.

2. Formatteur Automatique

Gardez votre base de code propre et cohérente. Le formatteur réindente votre code, ajoute les espaces nécessaires autour des opérateurs et standardise la syntaxe (par exemple, transformant if x==1 en if x == 1:).

Usage :

python "Current Release (V3)/compiler.py" --format mon_script.stubx

Cela affichera le code formaté dans la console. Pour sauvegarder, redirigez la sortie :

python "Current Release (V3)/compiler.py" --format script.stubx > script_propre.stubx
3. Débogage Intelligent (Source Mapping)

Auparavant, une erreur renvoyait vers le code Python généré, ce qui était difficile à lire. Avec la V3, le compilateur "mappe" les lignes Python vers votre fichier Stubx original.

Exemple : Si vous faites une division par zéro à la ligne 12 de votre .stubx, le message d'erreur vous indiquera précisément :

Error: ZeroDivisionError: division by zero
At Stubx source: script.stubx line 12

Aucune commande spéciale n'est requise, c'est actif par défaut !

Nouveautés de la Version 2

La version 2 de Stubx transforme le langage en un véritable outil de scripting système.

1. Système de Fichiers

Lisez et écrivez des fichiers directement. Combiné aux pipes, c'est extrêmement puissant.

-- Lire un fichier
let content = read "data.txt"

-- Ajouter du contenu (Append)
"Log entry: Success" |> append_to "log.txt"
2. Programmation Fonctionnelle

Manipulez les listes sans boucles verbeuses grâce à map et filter.

-- Filtrer les pairs et les mettre au carré
[1, 2, 3, 4, 5]
  |> filter is_even
  |> map square
  |> say
3. Interaction Système (Shell)

Exécutez des commandes système et récupérez leur sortie.

let files = exec "ls -la"
if files |> contains "README.md":
    say "Projet valide !"
end
4. Gestion d'Erreurs Poétique

Un bloc attempt / recover pour gérer les imprévus sans paniquer.

attempt:
    read "config_missing.json"
recover:
    say "Erreur : fichier introuvable, chargement par défaut."
end

Introduction

Stubx est un langage conçu pour être lu comme de la prose tout en offrant des outils puissants pour le scripting moderne. Il élimine le bruit syntaxique inutile (parenthèses, points-virgules) pour se concentrer sur la logique.

Typage & Variables

Stubx utilise un système visuel optionnel pour les types.

Déclaration Obligatoire avec let

Toute assignation de variable doit utiliser le mot-clé let. Cela garantit la clarté et évite les erreurs d'assignation accidentelle.

let name = "Louis"s    -- string (texte)
let age = 17n          -- number (nombre)
let active = true?     -- boolean (vrai/faux)

-- Erreur :
count = 42         -- Interdit, il faut utiliser 'let'

Entrée / Sortie

Interagissez avec l'utilisateur naturellement.

Le programme demande le nom de l'utilisateur, puis lui dit bonjour.

ask nom              -- Lit une entrée clavier dans 'nom'
say "Bonjour " + nom -- Affiche le message concaténé

Listes et Ranges

Manipulez des collections de données simplement.

Listes

Une collection ordonnée d'éléments entre crochets.

let nums = [1, 2, 3, 4]
let users = ["Alice", "Bob"]
say nums   -- Affiche la liste complète
Ranges (Intervalles)

L'opérateur .. génère une séquence de nombres, très utile pour l'itération ou l'aléatoire.

1..10      -- Représente les nombres de 1 à 10 inclus
1..100 |> random -- Tire un nombre au hasard dans cet intervalle

Pipes & Juxtaposition

La vraie puissance de Stubx. Enchaînez les opérations sans imbriquer de parenthèses.

Opérateur Pipe |>

Passe le résultat de gauche comme premier argument de la fonction à droite. Cela permet de lire le code de gauche à droite.

"bonjour" |> upper |> say
-- 1. Prend "bonjour"
-- 2. Le passe à upper() -> "BONJOUR"
-- 3. Passe le résultat à say() -> Affiche "BONJOUR"
Juxtaposition

Appelez des fonctions simplement en les espaçant de leurs arguments (sur la même ligne), sans parenthèses.

random [1, 2, 3]   -- Appelle la fonction random avec la liste
len "Hello"        -- Calcule la longueur du texte (5)
say len "World"    -- Calcule la longueur (5) puis l'affiche

Structures de Contrôle

Les blocs commencent par : et se terminent par end.

Condition Si (If/Else)

Exécute un bloc de code seulement si la condition est vraie.

if age > 18:
    say "Majeur"   -- Exécuté si age > 18
else:
    say "Mineur"   -- Sinon
end
Boucle For

Répète une action pour chaque élément d'une liste ou d'un intervalle.

for i in 1..5:
    say "Tour " + i  -- Affiche Tour 1, Tour 2... jusqu'à 5
end

for item in [10, 20]:
    say item         -- Affiche 10 puis 20
end
Boucle While

Répète tant que la condition reste vraie.

while x < 10:
    let x = x + 1    -- Incrémente x jusqu'à atteindre 10
end

Fonctions

Fonction Fléchée (Une ligne)

Idéale pour les opérations simples et courtes.

square(x) -> x * x   -- Définit une fonction qui met au carré
say square 5         -- Affiche 25
Fonction Bloc

Pour les logiques plus complexes nécessitant plusieurs étapes.

greet(name):
    let msg = "Hello " + name  -- Crée le message
    return msg                 -- Renvoie le résultat
end

Valeur Implicite (~)

Le symbole ~ contient toujours le résultat de la dernière opération ou assignation. C'est la "mémoire à court terme" du langage.

5 * 5
say "Le carré est " + ~  -- Récupère 25 et l'affiche

Librairie Standard

Fonctions intégrées disponibles immédiatement.

  • len(obj) : Longueur d'une liste ou chaîne.
  • upper(str) : Convertit en majuscule.
  • read(path) V2 : Lit un fichier.
  • append_to(path, content) V2 : Ajoute à un fichier.
  • exec(cmd) V2 : Exécute une commande shell.
  • map(func, list) V2 : Applique une fonction.
  • filter(func, list) V2 : Filtre une liste.
  • random(obj) :
    • Si entier N : retourne aléatoire entre 0 et N.
    • Si liste/range : retourne un élément au hasard.

Commentaires

Le compilateur ignore tout ce qui suit --. Utilisez-les pour documenter votre code.

-- Ceci est un commentaire sur une seule ligne

--[
  Ceci est un bloc de commentaire.
  Il peut s'étendre sur plusieurs lignes.
  Pratique pour désactiver du code temporairement.
]--

Sous le capot

Le compilateur actuel transpille le Stubx en Python 3. Cela signifie que vous bénéficiez de la performance et de la stabilité de l'écosystème Python.