Modules stdlib
Modules natifs livrés avec Catnip, chargés via import('name'). Implémentés en Rust comme plugins .so, sans
dépendance Python runtime.
À ne pas confondre avec les modules Python chargés via
-m(CLI) ouimport('numpy')(selon la policy). Les stdlib Catnip sont compilées dans le runtime ; les modules Python passent par le loader externe. Voir Module loading pour la distinction.
Modules disponibles
| Module | Description |
|---|---|
http |
Client HTTP et serveur léger : verbes, JSON, streaming, multipart, cookies |
io |
Lecture / écriture fichiers (open, print, write, read) |
sys |
Métadonnées runtime (platform, version, cpu_count, argv, exit) |
Usage
import('http')
response = http.get("https://example.com")
print(response.status, response.body)
import('name') charge le module et le bind dans le scope courant sous le nom name. Variantes :
# Renomme
h = import('http')
h.get("https://example.com")
# Sélectif (extrait des symboles dans le scope)
import('http', 'get', 'post')
get("https://example.com")
Arguments nommés
Les fonctions de module acceptent les arguments nommés que leur équivalent Python accepte : sep, end et flush pour
les quatre fonctions de sortie (io.print, io.eprint, io.write, io.writeln), les huit paramètres du open de
Python pour io.open, code pour sys.exit. Le même appel donne le même résultat quel que soit le backend qui sert le
module.
io = import('io')
io.print("a", "b", sep=", ", end="!\n") # ⇒ a, b!
Un nom qu'une fonction ne connaît pas est une erreur, jamais une valeur ignorée :
TypeError: print() got an unexpected keyword argument 'nope'
Une méthode se lit comme une valeur, et l'appeler ensuite revient au même :
io = import('io')
f = io.open("README.md")
lire = f.read
lire()
La méthode garde le fichier ouvert tant qu'elle vit, même si plus rien d'autre ne le référence. Les méthodes de fichier ne prennent aucun argument nommé, comme en Python.
Un paramètre se donne par position ou par nom, indifféremment : io.open(p, 'r', -1, 'utf-8') et
io.open(p, encoding='utf-8') prennent le même chemin, un neuvième argument ou un nom donné deux fois sont refusés dans
les termes de Python.
Les limites tiennent à ce que le moteur pur n'a ni objets Python ni codecs :
io.print(..., file=...)attend un objet fichier Python, et il est refusé plutôt que redirigé ailleurs en silence ;io.openne sertencodingqu'en UTF-8 (quelle qu'en soit l'orthographe) et les autres options qu'à leur valeur par défaut — c'est alors la valeur qui est refusée, en la nommant, jamais le paramètre : un nom que la spécification publie ne doit pas répondre qu'il n'existe pas ;io.openne connaît que les modes'r','w'et'a': les modes binaires et de mise à jour ('rb','r+') sont servis par le backend Python et refusés par le natif.
Deux implémentations, une seule documentation. Elle décrit maintenant ce qu'elles font toutes les deux.
Convention
Chaque module stdlib expose au minimum :
PROTOCOL = "rust": permet de distinguer les modules natifs des modules PythonVERSION: version semver du module
import('http')
print(http.PROTOCOL) # → "rust"
print(http.VERSION) # → "0.2.0"
Le
PROTOCOLest un signal stable : si un jour Catnip migre certains modules vers du WASM ou du WASI, la valeur changera et le code applicatif peut s'y adapter. Pour l'instant elle est constante.
Étendre
Pour écrire un nouveau module stdlib, voir
catnip_libs/README.md (guide contributeur).
Le manifeste spec.toml reste la source de vérité pour les signatures exportées ; les pages dans docs/libs/
documentent l'usage et les patterns.