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.
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 ~.
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
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.
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"
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
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
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.
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.
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
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.
|>
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"
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.
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
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
Répète tant que la condition reste vraie.
while x < 10:
let x = x + 1 -- Incrémente x jusqu'à atteindre 10
end
Fonctions
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
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.
- Si entier
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.
Commentaires
Le compilateur ignore tout ce qui suit
--. Utilisez-les pour documenter votre code.