Contexte et objectifs
Le langage fonctionnel Roc, encore en phase pré‑release (version 0.1.0 prévue dans quelques semaines), se positionne comme « Fast, Friendly, Functional ». Son créateur a voulu tester la capacité de Roc à rivaliser avec libdeflate, une bibliothèque de compression DEFLATE écrite en C et reconnue pour son exploitation intensive d’instructions SIMD spécifiques à l’architecture. Le test porte sur roc-deflate, un paquet implémentant la compression DEFLATE mais ne supportant pas encore les flux, et utilise le corpus Silesia (144 fichiers) pour mesurer le débit et la taille de sortie.
Comparaison des performances
Sur un MacBook Pro M1 (2021) et un serveur Ubuntu équipé d’un AMD Ryzen 9 3900X, roc-deflate a affiché un retard moyen par rapport à libdeflate. Le retard médian est de 2,6 % sur le M1 et de 8,9 % sur le Ryzen 3900X. Le benchmark complet comprend 144 cas de test, couvrant différents types de données (texte, binaire, images). En comparaison, une implémentation en Lean 4 a déjà surpassé le paquet Rust miniz_oxide de 15 % en vitesse et a produit des sorties 8,8 % plus petites, mais elle reste largement derrière libdeflate, qui bénéficie d’optimisations SIMD non accessibles aux langages purement fonctionnels.
Analyse des écarts techniques
Le principal facteur de supériorité de libdeflate réside dans son accès direct aux registres SIMD (AVX2, SSE4.2) et dans une gestion manuelle de la mémoire qui minimise les copies et les alignements. Ces optimisations sont possibles parce que le code C peut être écrit « au plus près du métal », en insérant des intrinsics et en contrôlant le layout des structures. Roc, bien qu’il compile en code natif sans ramasse‑miettes, conserve une sémantique fonctionnelle qui impose des abstractions supplémentaires : immutabilité des données, passage de valeurs par copie et génération de code de bordure pour les closures. Même si le compilateur Roc applique des optimisations classiques (inlining, escape analysis), il ne peut pas insérer d’instructions SIMD spécifiques sans extensions explicites du langage.
Perspectives et limites
Les résultats montrent que Roc peut se rapprocher du niveau de performance de libdeflate, surtout sur des architectures où le compilateur optimise efficacement le code natif (ex. Apple Silicon). Toutefois, pour égaler ou dépasser une implémentation C hautement spécialisée, Roc devra intégrer des primitives SIMD ou un backend capable de générer du code vectoriel automatiquement. Le manque actuel de support de streaming dans roc-deflate constitue également une contrainte, car les bibliothèques C tirent parti de la compression en flux pour réduire la latence et la consommation mémoire. En l’état, Roc démontre que le paradigme fonctionnel pur n’est pas un obstacle majeur à la performance, mais que les gains ultimes restent liés à la capacité du compilateur à exploiter le matériel de façon aussi fine que le code C.