Mode standalone
Catnip s'installe via pip install catnip-lang. Le binaire catnip est disponible immédiatement.
Usage
catnip script.cat # Exécuter un script
catnip -c "x = 10; x * 2" # Évaluer une expression
echo "2 + 3" | catnip --stdin # Lire depuis stdin
catnip --version # Version et build info
catnip -v script.cat # Mode verbose (timings pipeline)
Options
catnip -o jit script.cat # Activer le JIT
catnip -o tco:off script.cat # Désactiver le TCO
catnip -o level:2 script.cat # Niveau d'optimisation (0-3)
catnip -m numpy script.cat # Charger un module Python
catnip -m math:m script.cat # Module avec alias
catnip -x ast script.cat # Interpréteur AST (au lieu de VM)
catnip --parsing 1 script.cat # Niveau de parsing (0-3, voir ci-dessous)
Niveaux de parsing
--parsing permet d'inspecter les étapes du pipeline sans exécuter :
| Niveau | Sortie |
|---|---|
| 0 | Parse tree (AST Tree-sitter brut) |
| 1 | IR (après transformation, avant analyse sémantique) |
| 2 | IR exécutable (après analyse sémantique) |
| 3 | Exécution et résultat (défaut) |
Mode benchmark
catnip bench script.cat # 10 itérations par défaut
catnip bench 50 script.cat # 50 itérations
Info runtime
catnip info
Scripts exécutables (shebang)
Ajouter #!/usr/bin/env catnip en première ligne et chmod +x :
#!/usr/bin/env catnip
# process.cat
import('sys')
input_file = sys.argv[1]
print('Processing ' + input_file)
chmod +x process.cat
./process.cat data.json
# => Processing data.json
sys.argv[0] contient le chemin du script, les arguments suivent à partir de sys.argv[1].
Hors mode script, sys.argv prend la forme que lui donne Python : ["-c"] suivi des arguments quand le code vient de
-c, et [""] quand il vient de l'entrée standard ou de la REPL. La même liste est disponible sous le nom argv dans
le scope global, sans importer sys.
Un programme embarqué (Catnip() dans une application Python) reçoit lui aussi [""] tant que l'hôte ne déclare pas
d'argv : le module sys retombait sinon sur la ligne de commande du processus qui l'héberge, ce qui n'est pas une
information que le code exécuté a demandée.
Si le nom du script entre en collision avec une sous-commande (format, lint, etc.), utiliser -- :
catnip -- format arg1 arg2
REPL
La REPL se lance avec catnip sans arguments (ou catnip repl).
Commandes
Toutes les commandes commencent par / :
| Commande | Description |
|---|---|
/help |
Aide complète |
/exit, /quit |
Quitter |
/clear |
Effacer l'écran |
/version |
Version et build |
/history |
Historique (20 dernières entrées) |
/load <file> |
Charger et exécuter un fichier .cat |
/stats |
Statistiques d'exécution (variables, JIT) |
/jit |
Toggle JIT |
/verbose |
Toggle mode verbose (timings) |
/debug |
Toggle mode debug (IR + bytecode) |
/time <expr> |
Benchmarker une expression |
Mode debug
Affiche l'IR optimisé et le bytecode sans exécuter :
▸ /debug
Debug mode: enabled (shows IR and bytecode)
▸ x = 10 + 20
Program(
[
Op {
opcode: SetLocals,
args: [
Tuple(
[
Ref(
"x",
0,
1,
),
],
),
Op {
opcode: Add,
args: [
Int(
10,
),
Int(
20,
),
],
kwargs: {},
tail: false,
start_byte: 4,
end_byte: 11,
},
Bool(
false,
),
],
kwargs: {},
tail: false,
start_byte: 0,
end_byte: 11,
},
],
)
=== Bytecode ===
Instructions:
0: Instruction { op: LoadConst, arg: 0 }
1: Instruction { op: LoadConst, arg: 1 }
2: Instruction { op: Add, arg: 0 }
3: Instruction { op: DupTop, arg: 0 }
4: Instruction { op: DupTop, arg: 0 }
5: Instruction { op: StoreLocal, arg: 0 }
6: Instruction { op: StoreScope, arg: 0 }
7: Instruction { op: Halt, arg: 0 }
Constants: 2 values
Names: ["x"]
Auto-complétion
Tab complète :
- Commandes REPL (
/he->/help) - Keywords (
wh->while) - Builtins (
pri->print) - Variables définies
- Méthodes après
.(string/list/dict)
▸ x = "hello"
▸ x.<Tab>
capitalize casefold center count encode endswith find format
index isalnum isalpha join lower replace split strip upper
Raccourcis clavier
| Raccourci | Action |
|---|---|
| Ctrl+D | Quitter |
| Ctrl+C | Annuler saisie |
| Up/Down | Naviguer historique |
| Tab | Auto-complétion |
Historique persistant dans $XDG_STATE_HOME/catnip/repl_history (1000 entrées max, défaut
~/.local/state/catnip/repl_history).
Syntax highlighting
Coloration live en temps réel :
- Keywords : cyan bold (if, while, for, match)
- Constants : magenta bold (True, False, None)
- Types : teal (dict, list, tuple, set)
- Numbers : vert pâle
- Strings : orange
- Comments : gris
- Operators : gris clair
- Builtins : jaune (print, len, range)
Couverture du langage
Le mode standalone couvre 100% des features du langage Catnip : variables, fonctions, closures, structs, traits, pattern matching, broadcasting, pragmas, imports, mémoïsation, runtime introspection, extensions et module policies.