Performance
Exemples d'optimisation Catnip : VM mode, JIT compilation et cache.
VM Mode
Le mode VM compile le code en bytecode et l'exécute sur une VM, offrant jusqu'à 192x speedup vs mode AST.
vm_mode_benchmark.py- benchmark VM vs AST modes
python docs/examples/performance/vm_mode_benchmark.py
Utilisation en CLI :
catnip --vm on script.cat # ~190x plus rapide sur boucles
JIT Compilation
Le JIT trace-based utilise Cranelift pour compiler les hot loops et hot functions en code natif x86-64.
Support :
- Loops : ints, floats, bools, nested loops, conditional branches
- Speedup typique : 100-200x sur boucles numériques intensives
- Functions (depuis v0.0.3) : fonctions récursives et non-récursives appelées fréquemment
- Speedup typique : 1.1x sur fonctions simples (overhead boxing/unboxing)
- Support récursion : appels récursifs compilés via CallSelf avec re-boxing NaN automatique
- Protection overflow : depth counter avec MAX_RECURSION_DEPTH = 10000
- Fallback gracieux vers interpréteur si profondeur > 10000 (évite crashes)
- Memoization automatique (Phase 4.3) : cache thread_local pour fonctions à 1 paramètre
- Fibonacci : O(2^n) → O(n) - gain exponentiel
- Factorial : pas d'amélioration (pas de sous-problèmes qui se chevauchent)
- Meilleur speedup pour fonctions contenant des loops (loop compilée séparément)
Exemple :
jit_benchmark.py- benchmark JIT loops + functions vs interpreter
python docs/examples/performance/jit_benchmark.py
Utilisation en CLI :
catnip -o jit script.cat # Active le JIT (loops + functions)
Optimisations
Benchmarks d'analyse et comparaison des différents niveaux et types d'optimisation.
Tail-Call Optimization :
tail_recursion_benchmark.py- impact TCO et transformation tail→loopvm_optimizations_benchmark.py- ForRangeInt et TailRecursionToLoopPass
python docs/examples/performance/tail_recursion_benchmark.py
python docs/examples/performance/vm_optimizations_benchmark.py
Pipeline Comparison :
pipeline_comparison_benchmark.py- comparaison niveaux d'optimisation et modes d'exécution
python docs/examples/performance/pipeline_comparison_benchmark.py
Résultats typiques :
- VM vs AST : 6-19x speedup (moyenne 6x)
- Niveaux d'optimisation : impact 1-4% (overhead négligeable)
Control Flow Graph (CFG) :
cfg_benchmark.py- gains des optimisations CFG structurelles
python docs/examples/performance/cfg_benchmark.py
Gains observés :
- Empty block removal : 20-36% réduction blocs
- Loop detection : analyse pour optimisations futures
- Simplification structurelle du flot de contrôle
Cache
cache_demo.py- tour rapide du cachedocs/examples/performance/cache_memory_example.py- backend memoiredocs/examples/performance/cache_disk_example.py- backend disquedocs/examples/performance/cache_redis_example.py- backend Redisdocs/examples/performance/cache_comparison.py- comparaison des backendsdocs/examples/performance/memoization_build_script.py- build avec cachedocs/examples/performance/memoization_dependencies.py- dependances cachedocs/examples/performance/memoization_python_hooks.py- hooks Python
Prerequis
- Python avec Catnip installe en editable
- Redis requis pour
cache_redis_example.py
Lancer
python docs/examples/performance/cache_demo.py
python docs/examples/performance/cache_memory_example.py
python docs/examples/performance/cache_disk_example.py
python docs/examples/performance/cache_redis_example.py
python docs/examples/performance/cache_comparison.py