simdjson 5.0 : support de la réflexion C++26 et ajout des sélecteurs de clés
lun, 05/10/2026 - 07:35
Actualité de la rédaction de Programmez!
La bibliothèque C++ d'analyse et de génération de JSON simdjson passe en version 5.0. La réflexion statique de C++26, introduite à titre expérimental dans la version 4.0, est désormais officiellement prise en charge par la bibliothèque. Elle est détectée automatiquement lorsque le compilateur l'active. Des annotations permettent notamment de renommer, ignorer ou aplatir des champs lors de la sérialisation des structures.

Autre nouveauté, accessible dès C++20 : les sélecteurs de clés. L'expression doc.get_object().for_each<"name", "city", "age">(name, city, age) permet de récupérer plusieurs champs en un seul parcours de l'objet, quel que soit leur ordre, grâce à une fonction de hachage construite à la compilation. Avec la réflexison, la désérialisation d'une structure utilise désormais ces sélecteurs par défaut ; l'ancien comportement, une recherche par membre, se retrouve avec l'option -DSIMDJSON_DISABLE_KEY_SELECTOR_REFLECTION=1.
Cette version ajoute aussi les séquences JSON de la RFC 7464 et simdjson::slice_at, qui facilite le découpage d'un flux pour une analyse sur plusieurs threads.
Un changement peut affecter le traitement des erreurs : un entier positif supérieur ou égal à 2^64 et strictement inférieur à 10^20 est désormais signalé comme BIGINT_NUMBER, au lieu d'être considéré comme malformé.
Enfin, la sérialisation des flottants adopte Dragonbox et d'autres optimisations. Sur le fichier de test canada, Daniel Lemire mesure un débit de 0,52 Go/s contre 0,31 Go/s avec simdjson 4.0, avec GCC 16.1 sur un Xeon Gold 6548N.
Annonce : https://github.com/simdjson/simdjson/releases/tag/v5.0.0

