Plan d’expansion et feuille de route de Bun-RS
Ce document décrit la feuille de route étape par étape pour étendre bun-rs en un outil d’aide à la compilation et un plugin d’utilitaires de thèmes complet pour le monorepo material-web.
📅 Aperçu de la feuille de route
gantt
title Feuille de route de l'intégration de Bun-RS
dateFormat YYYY-MM-DD
section Phase 1 : FFI Core
Utilitaires de chaînes SIMD :done, p1, 2026-05-20, 2026-05-24
Intégration au Workspace :done, p2, 2026-05-25, 2026-05-28
section Phase 2 : FFI Espace de Couleur
Exposer m3-tokens (HCT) :done, p3, 2026-05-29, 2026-06-03
FFI de Schéma Dynamique :done, p4, after p3, 5d
section Phase 3 : FFI Sass
Intégration de Grass :done, p5, after p4, 7d
Fonction FFI de Compilation Sass :done, p6, after p5, 4d
section Phase 4 : Plugins Bun
Plugin de chargement TS :done, p7, after p6, 5d
Benchmark & Version Finale :done, p8, after p7, 4d
section Phase 5 : WebAssembly (WASM)
Compilation & JS Wrapper Bindings :done, p9, after p8, 5d
Showcase UI integration :done, p10, after p9, 3d
🔍 Détails des phases
🟩 Phase 1 : Utilitaires de chaînes haute performance & SIMD (Terminé)
- Objectif : Établir la frontière FFI, tester la latence aller-retour et implémenter des fonctions de base à haute performance.
- Livrables :
- Configurer
bun-rscomme un package de l’espace de travail (workspace) au sein dematerial-web. - Implémenter le comptage de caractères SIMD et la recherche de sous-chaînes à l’aide de
memchr. - Construire des interfaces C-ABI conformes aux spécifications Rust 2024 (
#[unsafe(no_mangle)]). - Rédiger des benchmarks de vérification pour mesurer le surcoût (~1.5ns à 3ns de latence d’appel).
- Configurer
🟩 Phase 2 : FFI native de l’espace colorimétrique Material Design 3 (Terminé)
- Objectif : Remplacer le package JS
@material/material-color-utilitiespar la bibliothèque native Rustm3-tokens. - Tâches :
- Ajouter une dépendance par chemin/git vers la crate
m3-tokens(située dans/home/ubuntu/aphrody/crates/m3-tokens) dans/home/ubuntu/material-web/packages/bun-rs/Cargo.toml. - Implémenter les fonctions C-ABI pour effectuer :
- Les conversions HCT vers RGB / Hex (
bun_rs_hct_to_argb,bun_rs_argb_to_hct). - La génération de palettes de tons (générer 13 tons pour une teinte/chroma donnée via
bun_rs_hct_tones). - La dérivation complète de schémas dynamiques (génération des 49 couleurs pour les modes clair/sombre via
bun_rs_derive_scheme).
- Les conversions HCT vers RGB / Hex (
- Mapper les entrées/sorties JS via des pointeurs (
*const u8pour les chaînes Hex, buffers de tableaux pour les palettes). - Écrire des wrappers TypeScript FFI pour exposer ces couleurs dans une API Bun native.
- Ajouter une dépendance par chemin/git vers la crate
🟩 Phase 3 : Compilateur Sass en Rust pur via FFI (Terminé)
- Objectif : Éliminer le processus Dart lent de
sass-embeddedet compiler les fichiers Sass entièrement en interne dans le processus à l’aide de Rust. - Tâches :
- Ajouter la crate
grass(compilateur Sass en Rust pur) aux dépendances debun-rs. - Exposer des fonctions thread-safe
bun_rs_compile_sassetbun_rs_compile_sass_fileavec support pour les optionsload_paths(chaîne délimitée par des points-virgules),style(OutputStyle Expanded/Compressed), etquiet(sourdine pour les avertissements). - Implémenter la gestion des erreurs côté Rust (renvoyer des journaux d’erreurs et des chaînes d’erreur formatées via un paramètre de pointeur booléen
error_occurredsans faire planter le processus). - Implémenter des fonctions de libération de mémoire (
bun_rs_free_string) pour éviter les fuites de mémoire des résultats de compilation alloués par Rust. - Sécuriser le processus Bun contre les paniques Rust lors de la compilation Sass en enveloppant
grass::Optionsavecstd::panic::AssertUnwindSafedans un bloccatch_unwind.
- Ajouter la crate
🟩 Phase 4 : Plugins de compilateur Bun (Terminé)
- Objectif : Construire des plugins de compilateur Bun qui interceptent les importations de fichiers
.scsset.csset les résolvent de manière dynamique. - Tâches :
- Écrire un plugin de build TS (
sass-plugin.ts/sassRustPlugindanssrc/index.ts) en utilisant l’API de plugin de Bun, supportant les optionsloadPathsetstyle. - Intégrer ce plugin dans l’exemple
showcaseet dans le pipeline principal de bundling de@material/web(aphrody-build.tsettest/sass-plugin.test.ts). - Écrire un script de benchmark (
packages/bun-rs/benchmark-sass.js) pour comparer la vitesse de compilation de Grass FFI par rapport àsass-embeddedet mesurer les gains de performance. - Valider l’intégration via le typecheck TS et la suite de tests bxc Chromium réelle.
- Écrire un plugin de build TS (
🟩 Phase 5 : WebAssembly (WASM) & Integration clientside (Terminé)
- Objectif : Compiler et partager le code Rust de génération de schémas de couleurs et de validation directement avec le navigateur de l’utilisateur.
- Tâches :
- Ajouter le package
wasm-bindgenà la configuration de la cratebun-rs. - Exposer des wrappers
#[wasm_bindgen]pour toutes les fonctions d’espace de couleurs (wasm_argb_to_hct,wasm_hct_to_argb,wasm_hct_tones,wasm_derive_scheme). - Compiler le package WASM à l’aide de
wasm-pack build --target web. - Exposer des cas d’usage à haute valeur ajoutée comme la validation clientside de code M3 (
wasm_validate_spec) et la compilation Sass en ligne (wasm_compile_sass). - Créer un tableau de bord et benchmark interactif dans la galerie React Showcase (
WasmSection.tsx). - Configurer la distribution et le typage du bundle WASM dans le serveur Bun local et les tests de fumée (smoke tests) d’intégration.
- Ajouter le package