Chaque module, avec ce qu'il fait, ce qui a été mesuré et les limites que nous connaissons. Cliquez sur une carte pour la fiche complète.
57 sur 57 modules · plus FormaUI, en développement
Introspection système : modules, processus, threads, régions et mémoire d'un autre processus, exports, intégrité de l'image, privilèges, informations système et CPU, disques, interfaces réseau et empreinte de la machine. Chaque élément est vérifié face à un oracle indépendant.
Stocke et renvoie le nom et la version de l'application sous forme de chaîne C, de std::string ou de CAString.
std::string
CAString
Dispatch des échecs d'assertion. Les listeners observent l'échec et une politique unique décide de l'action. Aucune allocation sur le chemin d'échec.
Avertissements et erreurs formatés dans le style std::format, et une classe d'exception de la bibliothèque.
std::format
Journalisation vers fichier, console et sortie du débogueur, en mode synchrone ou asynchrone.
Allocateurs arena et pool, et un gestionnaire central qui suit les allocations par tag.
Structures à capacité fixe qui ne touchent jamais l'allocateur après la construction. Templates uniquement.
Manipulation de bits : opérations de base, masques, compactage, balayage, codes de Morton et flux de lecture et d'écriture au niveau du bit.
Chaînes ASCII et larges maison avec optimisation des petites chaînes (jusqu'à 64 caractères), plus des fonctions de comparaison et de formatage.
Génération aléatoire rapide, déterministe à partir d'une graine, ou sécurisée via le générateur du système d'exploitation.
Identifiants 128 bits en tant que valeurs : générer, parser, comparer, trier et hacher.
Description de types à la compilation (structs, enums, flags), header-only, sans RTTI et sans allocation.
Machine à états finis avec table de transitions déclarée et dispatch run-to-completion.
Console, threads et mesure du CPU, de la mémoire et du disque, par processus et par machine.
Utilitaires de fichiers et dossiers, et une API C de fichiers avec mapping mémoire et chemins UTF-8 sur les deux plateformes.
Durées, instants, horloges, chronomètre, échéances, calendrier, formatage et parsing de dates, timers et mise en veille. Un module feuille.
Lance des processus enfants et les attend, et fournit de l'IPC locale : un canal de messages tramés, de la mémoire partagée, un anneau zero-copy et une synchronisation nommée entre processus.
Chargement dynamique de plugins avec un contrat C, et une barrière ABI qui rejette un plugin incompatible sans en exécuter une seule ligne. Remplacement à chaud avec des appels en cours.
Système de jobs avec groupes et modes d'exécution : threads workers persistants ou routines asynchrones détachées.
Mutex récursif avec suivi du propriétaire et garde RAII.
Signaux et bus d'événements sans std::function ni shared_ptr. Un slot est une paire contexte et pointeur de fonction dans un vecteur contigu. La réentrance est gérée.
std::function
shared_ptr
Fibres avec changement de contexte en assembleur et ordonnanceur M:N à vol de tâches, avec groupes, annulation, synchronisation de fibres et canaux.
Calendrier de jobs (par exemple, chaque jour de semaine à 03:00 heure locale) sans thread propre. Il utilise les horloges de time et dispatche sur un exécuteur fourni par l'intégrateur.
time
Politiques qui encapsulent un appel susceptible d'échouer : nouvelles tentatives, disjoncteur, limite de concurrence et limite de débit, composées dans un ordre fixe.
Cache en mémoire avec une table Robin Hood sur un bloc préalloué, et une variante shardée pour plusieurs threads.
Flux binaire portable et versionné avec erreur persistante : après le premier échec, chaque lecture échoue au lieu de renvoyer n'importe quoi.
Compression, décompression et sommes de contrôle des conteneurs. Le format est une valeur (Compress, Decompress, CompressBound), avec détection du format à partir du début du flux.
Compress
Decompress
CompressBound
Convertit des octets en texte et inversement : hex, base64, base32, percent-encoding, quoted-printable et transcodage Unicode. Un module feuille sans dépendance envers aucun autre module.
Charge la configuration depuis de nombreuses sources (TOML v1.0.0, INI, JSON strict et tolérant, environnement, ligne de commande), les fusionne en couches une seule fois, puis lit sans rechercher.
Stockage clé-valeur transactionnel embarqué avec un arbre B+ paginé et un WAL à pages complètes. Un seul écrivain et de nombreux lecteurs qui ne l'attendent jamais. Il ne crée aucun thread et ce n'est pas du SQL.
Tout ce qui exige de savoir ce qu'est chaque caractère dans Unicode 18.0.0 : propriétés, normalisation, casse, segmentation, coupure de lignes, largeur, collation, IDNA et bidi. Les tables sont générées à partir de l'UCD, et aucun chemin n'utilise de mémoire dynamique.
Expressions régulières à base d'automates sans backtracking, toujours linéaires en la longueur de l'entrée. Texte et motifs en UTF-8, avec la sémantique de RE2 et de Perl.
Fait parler un produit en plusieurs langues : pluriels CLDR 48.2, formatage selon la locale, messages ICU MessageFormat et catalogues compilés générés par l'outil etl-i18n.
etl-i18n
TCP, UDP, le protocole fiable maison ETL-RUDP sur UDP, une boucle d'événements à complétion et un canal chiffré.
TLS 1.3 maison (RFC 8446), client et serveur, avec le X.509 dont il a besoin : DER, certificats, chaînes, noms d'hôte, PEM et racines du système. TLS 1.3 uniquement, exprès : la 1.2 doublerait la surface d'attaque.
Client HTTPS synchrone (Ethereal::Web::CWeb). Construit une requête HTTP/1.1, l'envoie sur le TLS 1.3 du module tls et lit toute la réponse. Si votre code ne l'appelle jamais, rien de ce module n'entre dans le binaire.
Ethereal::Web::CWeb
tls
RPC avec une trame binaire fixe de 24 octets protégée par CRC, dispatch par numéro de méthode négocié une fois par connexion, flux fenêtrés, multiplexage et bus de topics. Un identifiant par requête empêche une réponse tardive de devenir la réponse de l'appel suivant.
Sommes de contrôle, condensats, chiffrement authentifié, dérivation de clés, accord de clés, signatures et obfuscation, le tout implémenté dans la bibliothèque.
Les licences d'Ethereal elle-même. Un appel par application débloque la bibliothèque, et un autre renvoie les données de licence.
Primitives de durcissement anti-rétro-ingénierie pour logiciels légitimes. Le module détecte, mesure et protège, et ne décide jamais : il ne termine pas de processus et ne communique pas avec le réseau. Tout est livré désactivé, avec une option CMake par élément.
Kit de licences Ed25519 à intégrer dans votre produit pour licencier vos propres utilisateurs. Le produit vérifie avec la seule clé publique, et l'émetteur signe sur le serveur du vendeur. Il est distinct de bundle, qui gère la licence d'Ethereal elle-même.
bundle
Canal de mises à jour signé : Ed25519 sur un manifeste, plus SHA-256 par artefact et par fichier. Il ne crée aucun thread et n'ouvre aucun socket de lui-même. Le réseau passe par des interfaces, et tout avance via Tick.
Tick
Rapports d'erreur et leur envoi. Le contexte est enregistré dans un bloc préalloué à Init, et l'envoi n'a lieu qu'avec le consentement de l'utilisateur.
Init
Framework de test sans dépendance. Assertions et enregistrement header-only (C++17), plus un runner et un main prêts à l'emploi. Il n'utilise ni exceptions ni RTTI, et les assertions n'allouent pas.
main
Le banc de mesure. Il calibre le lot, chauffe jusqu'à ce que la fréquence se stabilise, rapporte médiane, p90, p99, minimum et MAD, enregistre l'environnement et dispose d'une barrière de régression statistique. Inclut l'outil etl-bench.
etl-bench
Sortie terminal avec son propre buffer, couleur et style avec dégradation progressive, largeur de colonne, barre de progression, éditeur de ligne et un parseur d'arguments qui n'alloue pas.
Scalaires, vecteurs, matrices et primitives géométriques, avec le SIMD concentré dans des fonctions par lots qui transforment, normalisent et multiplient des milliers d'éléments d'un coup.
Entités, composants et systèmes avec stockage par archétypes, en chunks de 16 KB avec un tableau contigu par composant, et entités générationnelles 64 bits.
Chronométrage par section, avec rapport et export CSV.
Statistiques descriptives sur des flux d'échantillons.
Métriques, traces au standard W3C Trace Context et export vers Prometheus, OTLP (protobuf et JSON), StatsD et lignes JSON. Aucun thread, socket ni adresse intégrés : l'export a lieu quand l'intégrateur appelle Tick.
Charge un modèle d'arbres entraîné avec LightGBM ou XGBoost et prédit avec les mêmes chiffres que la bibliothèque d'origine. Le modèle est converti une fois par l'outil etl-trees dans un format mappé en mémoire, sans parsing au chargement.
etl-trees
Reçoit des événements par entité et fournit le vecteur attendu par le modèle, dans l'ordre de la spécification. Il existe pour éviter l'écart entre les features d'entraînement et celles de production.
Détecte anomalies et changements sans étiquettes. Produit un score calibré avec une raison, pour une file de revue. Le module n'agit jamais. Requiert Ml::Trees.
Ml::Trees
Inférence de petits réseaux (MLP, convolutions, LSTM et GRU) dans le binaire, à partir d'un format maison converti depuis ONNX par l'outil etl-neural. Le client ne lit jamais d'ONNX.
etl-neural
Traite le modèle comme un actif protégé. Le signe avec Ed25519, le chiffre au repos avec ChaCha20-Poly1305, le lie à une licence, le marque du filigrane du titulaire, le charge dans une région protégée et vérifie en mémoire les poids chargés.
Recherche des plus proches voisins embarquable : HNSW à la hnswlib, avec la force brute exacte à côté. En dessous d'environ 10,000 vecteurs, le mode automatique choisit la force brute.
Un module d'interface utilisateur, en développement. Il sera livré avec l'édition Full.
Tous les modules sont dans l'édition Standard. Essayez-les tous pendant 30 jours.