Clause
← Toute la documentation

L'original anglais a changé depuis cette traduction ; certaines parties peuvent donc être obsolètes. Lire en anglais

Traduit de l'original anglais · 1e3a39c8-dirty · 2026-10-26

Modules de bibliothèque

Clause livre ses propres versions des modules d'OTP qu'appellent les programmes, écrites en Erlang d'après le comportement documenté d'OTP (et non copiées depuis les sources d'OTP) au-dessus des builtins du runtime, et les compile avec les programmes qui les utilisent.

Contenu

Chaque module fourni exporte la liste complète d'OTP 29 pour son nom ; son inventaire <module>.terms (fichiers) consigne quelles fonctions sont implémentées et lesquelles sont des bouchons (stubs).

ModuleContenu
listsLes fonctions courantes ; les fonctions sur les données comme sublist/2,3, flatten/1,2, sort/1, usort/1, keymember/3, zip/2,3, merge/2 sont des builtins du runtime ; chaque fonction documentée est implémentée (module lists)
mapsChaque fonction documentée ; get/3, merge/2, intersect/2, with/2, ... sont des builtins du runtime, les fonctions prenant des funs sont en Erlang (module maps)
ordsets, orddict, proplistsChaque fonction documentée ; les parcours de listes sont des builtins du runtime, les fonctions prenant des funs sont en Erlang (collections)
calendarChaque fonction documentée ; l'arithmétique grégorienne sous forme de builtins du runtime, l'heure locale et RFC 3339 en Erlang (calendar)
proc_lib, sysChaque fonction documentée : création de processus avec ancêtres et appels initiaux, démarrages synchrones (init_ack, init_fail), étiquettes, stop/1,3, rapports de plantage et leur texte ; protocole des messages système et options de débogage (trace, log, statistics, log_to_file, funs installées) avec les formes de listes de débogage d'OTP
gen_server, gen_statem, gen_event, gen_fsm, genChaque fonction documentée en Erlang au-dessus de proc_lib et sys, avec les messages d'OTP ('$gen_call' avec étiquettes d'alias, '$gen_cast', ...), les résultats et actions des rappels, les collections d'identifiants de requêtes, les termes d'erreur et les textes des rapports ; gen contient ce qu'elles partagent
supervisor, supervisor_bridgeChaque fonction documentée : spécifications et erreurs des enfants, stratégies, intensité de redémarrage, règles d'arrêt, enfants simple_one_for_one et arrêt automatique d'OTP, sous forme de gen_server
logger, logger_formatter, logger_std_h, logger_filters, logger_handlerChaque fonction documentée en Erlang : configuration primaire, des gestionnaires et du proxy avec les vérifications et termes d'erreur d'OTP, niveaux par module, métadonnées de processus, filtres, macros ?LOG_* de kernel/include/logger.hrl, modèles de formatage et en-tête historique, logger_std_h sur périphériques et fichiers avec rotation, compression et filesync/1, logger_disk_log_h sur journaux disque halt et wrap (tous deux au-dessus de clause_logger_h, options et vérifications communes des gestionnaires d'OTP). Le serveur logger est le clause_logger de Clause, démarré à la première utilisation avec le gestionnaire par défaut d'OTP sur standard_io (la variable d'environnement CLAUSE_LOGGER_TYPE=standard_error le déplace vers la sortie d'erreur standard, comme le fait l'exécuteur de références pour correspondre aux références produites avec le gestionnaire d'OTP sur celle-ci) ; les niveaux par application nécessitent application
disk_log, wrap_log_reader, clause_disk_log, clause_disk_log_serverChaque fonction documentée en Erlang : journaux halt, wrap et rotate, internes et externes, avec les formats de fichiers d'OTP (en-têtes de journaux, trames d'éléments avec MD5 des grands éléments, fichiers d'index et de taille wrap, archives rotate), pour des fichiers identiques à ceux d'OTP octet par octet ; un processus par journal avec propriétaires, utilisateurs, notifications, blocage avec requêtes en attente, journalisation anticipée, cache d'écriture vidé selon la taille et par minuterie, réparation, blocs en lecture seule comptant les octets incorrects ; serveur de registre disk_log_server avec les tables nommées disk_log_names et disk_log_pids ; wrap_log_reader au-dessus du même lecteur de blocs
error_logger, error_logger_file_h, log_mf_hChaque fonction documentée : messages et rapports comme événements de journal avec les métadonnées error_logger d'OTP, gestionnaires de rapports sur le gestionnaire d'événements error_logger alimenté par le gestionnaire de journalisation error_logger, logfile/1 dans l'ancien texte des rapports, fichiers wrap avec l'index et le format d'enregistrement d'OTP
pg, data_publisherChaque fonction documentée : portées sous forme de serveurs data_publisher avec les tables ETS d'OTP, adhésions, départs, membres qui se terminent, moniteurs de portées et de groupes ; la portée n'a aucun pair
global, global_groupChaque fonction documentée comme sur un nœud non distribué : noms (aussi {global, Name} dans les comportements), verrous et transactions au-dessus d'un global_name_server démarré à la première utilisation ; global_group sans groupes ; le gestionnaire de verrous et les mécanismes internes distribués sont déclinés
rpc, erpcChaque fonction documentée : les appels à ce nœud s'exécutent dans des processus créés à cet effet (rex démarre à la première utilisation) avec les résultats et erreurs d'OTP ; les autres nœuds sont indisponibles ({badrpc, nodedown}, {erpc, noconnection})
net_adm, net_kernel, auth, seq_traceLes réponses d'OTP pour un nœud qui n'est pas actif (pang, ignored, #{started => no}, nocookie) ; net_kernel:start/1,2 et les mécanismes internes de distribution sont déclinés ; seq_trace conserve le jeton de chaque processus sans traçage
trace, erl_tracerLe traçage n'est pas pris en charge : chaque fonction de trace et le traceur par défaut d'erl_tracer (enabled/3, trace/5) lèvent notsup, comme les fonctions de traçage d'erlang (module erlang) ; erl_tracer:behaviour_info/1 liste les rappels d'OTP
error_handlerLes fonctions d'appels non définis, appelables directement ; le runtime lève lui-même undef et ne les appelle jamais ; breakpoint/3 décliné (aucun interpréteur)
timerChaque fonction documentée sans le serveur de minuteries d'OTP : les envois différés à des pid locaux utilisent erlang:send_after/3, toute autre minuterie a son propre processus atteint via un alias dans son TRef ; les conversions et now_diff/2 sont des builtins du runtime (timer)
filelib, clause_filelibChaque fonction documentée : motifs génériques compilés et comparés par des builtins du runtime avec les règles, bizarreries et erreurs d'OTP, parcours des répertoires, requêtes, ensure_dir/1, ensure_path/1, fold_files/5,6, find_file/2,3, find_source/1,2,3 (source_search_rules de kernel ou valeurs par défaut d'OTP) et safe_relative_path/2 en Erlang ; également les formes non documentées prenant un module (file, erl_prim_loader ou autre), compile_wildcard/1 (aide au débogage d'OTP) est un bouchon (filelib)
file_sorterChaque fonction documentée en Erlang : séquences (size octets triés en mémoire), fusions (no_files fichiers temporaires à la fois, blocs de 16 KiB, flux ordonnés selon leurs objets en tampon et numéros de fichiers) et vérifications d'OTP suivis pas à pas, pour que les termes comparés égaux sortent et survivent à unique comme dans OTP ; formats binary_term, binary, term et fun, header, compressed (via la couche gzip de file), tmpdir, funs d'entrée et de sortie, termes d'erreur d'OTP
zipChaque fonction documentée en Erlang, suivant la structure des archives d'OTP octet par octet (en-têtes locaux et centraux créés par UNIX 6.1, champs supplémentaires d'horodatage étendu et d'uid/gid UNIX, zip64 au-delà de 4 GiB, blocs deflate de 8 KiB avec vidages complets via zlib), pour des archives identiques à celles d'OTP ; fichiers ou binaries en entrée et en sortie via les funs d'entrée et de sortie d'OTP, filtres, cwd, keep_old_files, skip_directories, foldl/3, archives zip_open/1,2 servies par un processus lié, t/1, tt/1, termes d'erreur d'OTP ; records de stdlib/include/zip.hrl
erl_tarChaque fonction documentée en Erlang, suivant les règles de format d'OTP octet par octet : en-têtes USTAR, noms longs séparés en préfixe ou déplacés vers des en-têtes étendus pax (comme les noms longs ou non ASCII, les liens et noms de propriétaires, et les nombres trop larges pour l'octal), lecture des archives v7, GNU (noms et liens longs, fichiers creux), STAR, USTAR et pax avec les bizarreries d'OTP (champs en base 256, dates pax), compressed via la couche gzip de file, binaries lus comme fichiers ram, périphériques, funs d'E/S utilisateur init/3, max_size, keep_old_files, files, cwd, verbose, vérifications des chemins dangereux, termes d'erreur d'OTP et format_error/1
zstd, clause_zstdChaque fonction documentée : compression et décompression en une fois et en flux, paramètres, dictionnaires (bruts ou référencés), en-têtes de trames et identifiants de dictionnaires, en Erlang au-dessus de builtins du runtime qui détiennent des contextes libzstd 1.5.7 comme la NIF d'OTP (zstd) ; file:open/2 accepte {zstd, Options}
beam_lib, erl_abstract_codeChaque fonction documentée en Erlang, suivant le traitement des blocs d'OTP : parcours IFF avec les erreurs d'OTP, tables d'atomes dans les deux encodages, tables de symboles, attributs, informations de compilation, littéraux, informations de débogage et code abstrait via le backend erl_abstract_code, documentation (records de kernel/include/eep48.hrl), MD5 des blocs significatifs, comparaison et suppression de blocs dans les fichiers, répertoires et releases, beams compressés en gzip, build_module/1, et serveur de clés cryptographiques avec déchiffrement des informations de débogage (via crypto, appelé dynamiquement : le lier avec --with-crypto)
io_ansiChaque fonction documentée en Erlang : séquences de terminal virtuel d'OTP 29 sous forme de séquences ANSI intégrées utilisées par OTP sans terminfo (les requêtes terminfo répondent {error, enotsup}), format/1,2,3 et render/1,2 au-dessus d'io_lib, fwrite/1,2,3,4 comme requêtes put_ansi rendues par le serveur d'entrée standard, scan/1, et enabled/0,1 selon l'indicateur de terminal du périphérique (module io)
win32regChaque fonction documentée : analyse des clés d'OTP (racines, chemins absolus, relatifs et ..), clé courante, valeurs entières, chaînes et binaries, listes et suppressions via le pilote du registre Windows (le registre) ; {error, enotsup} ailleurs, comme OTP
argparse, clause_argparseChaque fonction : validation avec les erreurs d'OTP, analyse (options, indicateurs, nargs, actions, types avec choix, limites et expressions régulières, types personnalisés, sous-commandes, préfixes, valeurs par défaut) avec les maps d'arguments et erreurs d'OTP, help/1,2 avec la mise en page et les modèles d'OTP, run/3 avec chaque forme de gestionnaire, sous forme de builtins du runtime qui demandent à Erlang d'appeler les funs (argparse) ; sans progname, le nom du programme lui-même
escriptcreate/2 et extract/2 suivant la structure des sections et la lecture des en-têtes d'OTP (lignes de shebang, de commentaire et d'arguments de l'émulateur ; corps source, beam et archive via zip) ; script_name/0 est le chemin de l'exécutable ; l'exécution d'escripts (start/0,1, parse_file/1) est déclinée
filenameChaque fonction documentée selon les règles Unix et Windows d'OTP pour l'hôte ; les parcours de noms sont des builtins du runtime, absname/1,2 et basedir/2,3 (à partir de HOME, des variables XDG et d'APPDATA) en Erlang (filename)
uri_stringChaque fonction documentée sous forme de builtin du runtime : analyse RFC 3986 avec les fragments d'erreur d'OTP, recomposition, normalisation, résolution, codage pourcent et requêtes form-urlencoded (uri_string)
jsonChaque fonction documentée avec les iodata, les erreurs et l'ordre des rappels d'OTP ; decode/1, encode/1, format/1,2 et les fonctions d'échappement de binaries sont des builtins du runtime, les encodeurs et formateurs prenant des funs et les décodeurs à rappels sont en Erlang (encodages)
rand, randomChaque fonction documentée avec les états et séquences d'OTP ; les algorithmes d'OTP s'exécutent sous forme de builtins du runtime, les générateurs greffons en Erlang (nombres aléatoires)
stringChaque fonction documentée sous forme de builtin du runtime, parcourant chardata comme string.erl d'OTP pour conserver les formes de résultats d'OTP (string)
base64Chaque fonction documentée sous forme de builtin du runtime (encodages)
arrayChaque fonction documentée au-dessus du record d'OTP 29 ; les opérations sur le record sont des builtins du runtime, les folds et mapfolds sont en Erlang (collections)
gb_trees, gb_sets, queueChaque fonction documentée au-dessus des formes d'arbres et de files d'OTP ; les opérations sans funs sont des builtins du runtime (collections)
dict, setsChaque fonction documentée au-dessus des records d'OTP (ensembles de version 1) et des maps (version 2) ; les opérations sans funs sont des builtins du runtime (collections)
ioget_line/1,2, get_chars/2,3 (serveur d'entrée standard ou fichier ouvert), fread/2,3 (requête get_until au-dessus d'io_lib:fread/3), read/1..4, scan_erl_exprs/1..4, scan_erl_form/1..4, parse_erl_exprs/1..4, parse_erl_form/1..4 (requêtes get_until au-dessus d'erl_scan:tokens/3,4, analysées par erl_parse), request/1,2, requests/1,2 (protocole d'E/S d'OTP, fichiers), getopts/0,1, setopts/1,2, columns/0,1, rows/0,1 (taille du terminal via les builtins de clause_io), get_password/0,1, write/1,2 ; format/1,2,3, fwrite/1,2,3, put_chars/1,2 et nl/0,1 sont des builtins du runtime (io)
io_libFonctions d'écriture, vérifications, fonctions de collecte, moteur de formatage, affichage formaté (print/1,4, ~p, chars_limit) et analyseur (fread/2,3) sous forme de builtins du runtime avec les formes de listes imbriquées d'OTP, funs maps_order triant les clés dans clause_io_lib ; get_until, format_prompt et write/3 en Erlang (io_lib)
sofs, clause_sofsChaque fonction ; les opérations sur les données sont des builtins du runtime, les fonctions prenant des funs et les conversions de digraphes sont en Erlang (ensembles d'ensembles)
etsTables, lectures, écritures, parcours et mises à jour sous forme de builtins du runtime au-dessus des tables du runtime ; foldl/3, foldr/3, i/0..3 et fun2ms/1 en Erlang ; spécifications de correspondance (familles select, match, match_spec) comme builtins au-dessus de l'interpréteur du runtime, match_spec_run/2, test_ms/2, repair_continuation/2, match_delete/2 et init_table/2 en Erlang ; fichiers de tables (tab2file/2,3, file2tab/1,2, tabfile_info/1) en Erlang au-dessus de file et clause_disk_log ; to_dets/2 et from_dets/2 en Erlang au-dessus de dets ; table/1,2 en Erlang au-dessus de qlc:table/2 (ets)
graphChaque fonction au-dessus du record d'OTP ; les requêtes et parcours sont des builtins du runtime, les mises à jour sont en Erlang (graph)
digraph, digraph_utilsChaque fonction au-dessus du record à trois tables d'OTP ; les mises à jour et lectures sont en Erlang au-dessus d'ets, les recherches de chemins et les parcours de digraph_utils sont des builtins du runtime lisant les tables, subgraph/2,3 et condensation/1 en Erlang (digraph)
dets, clause_detsChaque fonction documentée : processus de serveur et de tables d'OTP en Erlang au-dessus d'un moteur C++ du format de fichier version 9 d'OTP, fichiers identiques octet par octet à ceux écrits par OTP ; table/1,2 en Erlang au-dessus de qlc:table/2 (dets)
ms_transformChaque fonction en Erlang au-dessus du format abstrait : parse_transform/2 traduit les funs littérales données à ets:fun2ms/1 et dbg:fun2ms/1 dans les formes d'un module, transform_from_shell/3 les clauses d'une fun du shell, avec les spécifications de correspondance, avertissements de masquage et codes d'erreur d'OTP. Un module utilisant la transformation à la compilation exécute toujours le ms_transform de l'OTP de l'hôte (transformations syntaxiques)
qlc_pt, clause_qlc_ptLa transformation syntaxique qlc à l'exécution (non documentée dans OTP) : transform_expression/2, transform_from_evaluator/2 et parse_transform/2 comme builtins du runtime avec le code de requête généré, les messages et annotations d'OTP ; ms_transform s'exécute en Erlang sur demande (qlc_pt). Les modules compilés incluant qlc.hrl utilisent toujours la transformation de l'OTP de l'hôte (transformations syntaxiques)
qlcChaque fonction en Erlang, écrite d'après la documentation d'OTP : descripteurs de requêtes compilées (descripteurs qlc_lc d'OTP issus de la transformation), listes, tables table/2, append/1,2, sort/1,2 et keysort/2,3 ; évaluation avec recherches constantes, spécifications de correspondance, jointures par fusion et par recherche, cache (ets, list débordant vers des fichiers temporaires), unique, tris file_sorter, curseurs sous forme de processus, info/1,2 au-dessus d'erl_pp, string_to_handle/1,2,3 au-dessus de qlc_pt, termes d'erreur d'OTP et format_error/1. Descripteurs, tables, clés du dictionnaire de processus et noms de fichiers temporaires sont ceux d'OTP. stdlib/include/qlc.hrl nomme la transformation qlc, qui s'exécute sur l'OTP de l'hôte (qlc)
shell, clause_shell, clause_shell_eval, clause_shell_commands, clause_shell_recordsChaque fonction documentée en Erlang, écrite d'après la documentation d'OTP : shell interactif sur l'entrée standard (shell interactif) : invites, bannière, historique (e/1, v/1, h/0), liaisons, records (rd, rr, rl, rp, rf), fonctions, types et spécifications définis à l'invite, rapports d'exception via erl_error, résultats affichés comme dans OTP (profondeur 30, records), shells restreints, catch_exception/1 et fonctions de réglage
shell_default, cChaque fonction : commandes de c avec la sortie d'OTP (i/0, regs/0, m/0,1, ls/0,1, flush/0, help/0, ...) ; la compilation (c/1,2,3, lc/1, nc/1,2), xm/1 et y/1,2 signalent l'appel échoué comme OTP sans compiler, tools ni parsetools ; h/1,2,3 ne trouvent aucune documentation dans le code lié ; les commandes i du débogueur signalent l'application manquante
edlin, edlin_expandedlin:keymap/0 (raccourcis de l'éditeur de ligne appelant ; undefined en dehors) ; edlin_expand:expand/1,2 en Erlang : complétion des modules, fonctions (arités Mod:, fun Mod:Fun/), BIF, commandes du shell, fonctions définies dans le shell, mots-clés, liaisons, noms et champs de records, clés de map et chemins de fichiers, avec les sections et correspondances historiques d'OTP ; les arguments d'un appel sont suggérés comme en-têtes Mod:Fun/Arity (le code lié n'a aucune spécification)
shell_docs, clause_shell_docs_markdownChaque fonction en Erlang, écrite d'après la documentation d'OTP : render/2..5, render_type/2..5 et render_callback/2..5 d'un bloc docs_v1 donné (application/erlang+html, text/markdown converti comme par le shell d'OTP, autres formats text/ tels quels) avec la mise en page, les retours à la ligne, les puces et styles ANSI d'OTP, normalize/1, validate/1, supported_tags/0 ; identique à OTP sur les 51,249 rendus des propres blocs de documentation d'OTP 29. Le code lié n'a aucun bloc propre (code:get_doc/1)
erl_parse, clause_erl_parseChaque fonction : parse_form/1, parse_exprs/1, parse_term/1 et les parse/1, parse_and_scan/1 de yecc au-dessus d'un analyseur du runtime avec le format abstrait et les erreurs d'OTP ; normalise/1, abstract/1,2, tokens/1,2 et les tables de précédence sont des builtins ; les parcours d'annotations et format_error/1 en Erlang (erl_parse)
erl_eval, clause_erl_evalChaque fonction en Erlang au-dessus du format abstrait : liaisons sous forme d'orddicts ou de maps, gestionnaires de fonctions locales et non locales (opérateurs, BIF et erreurs comme appels erlang:raise/3 passent par ces derniers), funs interprétées avec l'environnement d'OTP, comprehensions avec générateurs stricts et zip, maybe, native records, receive au-dessus de prim_eval ; filtrage par motifs, segments de syntaxe binaire et réduction des constantes sont des builtins du runtime (erl_eval). exprs/2 et expr/2 vérifient une commande avec erl_lint:exprs_opt/3 ; qlc:q/1,2 d'une compréhension de liste de requête passe par qlc:transform_from_evaluator/2 avec les appels locaux masqués, comme dans OTP
erl_errorChaque fonction en Erlang au-dessus d'io_lib : format_exception/3,4 et les formateurs internes (format_exception/6,7,8, format_stacktrace/4,5, format_call/4,5, format_fun/1,2) avec les explications, mises en page, rappels error_info et options d'OTP. Les propres traces de pile de Clause n'ont ni emplacements ni error_info (différences), donc leurs rapports n'affichent ni l'un ni l'autre
erl_pp, clause_erl_ppChaque fonction ; l'affichage est un builtin du runtime (erl_pp) : formes, attributs, types et spécifications, fonctions, guards et expressions avec la mise en page (largeur de ligne, indentation, fragments de chaînes, parenthèses de précédence) et les options d'OTP ; les hooks et legalize_vars/1 s'exécutent ici ; identique à OTP sur les formes de 347 sources et suites d'OTP, et sur 80 d'entre elles avec cinq jeux d'options, hooks inclus
erl_lint, clause_erl_lintChaque fonction ; les vérifications sont des builtins du runtime (erl_lint) avec les erreurs, avertissements, options et ordre d'OTP, et les textes de format_error/1 ; le behaviour_info/1 des comportements est appelé ici, et is_guard_test/3 interroge d'abord sa fun sur les appels locaux ; identique à OTP sur 481 sources et suites d'OTP, 474 extraits de suites et 816 expressions de commandes
erl_expand_recordsmodule/2 est un builtin du runtime (erl_expand_records) : records de tuples développés en opérations sur tuples, native records et native records importés conservés, appels d'imports et de BIF qualifiés par leur module, tests de guard is_record/3 transformés en motifs, avec les options dialyzer, expand_inits et [no_]strict_record_tests ; identique à OTP sur les formes de 347 sources et suites de tests d'OTP
epp, clause_eppChaque fonction en Erlang sauf les conditions -if, évaluées par un builtin (epp) : un serveur par source ouvert avec les formes, macros (arguments, surcharge, ??Arg, ?FUNCTION_NAME, macros prédéfinies et de l'option macros), inclusions, conditions, -file, -feature, -error/-warning, fichiers de documentation et erreurs d'OTP ; les fichiers sont lus en entier et décodés selon leur commentaire d'encodage. Identique à OTP sur 1,110 appels parse_file/scan_file sur des sources et suites d'OTP. -include_lib trouve les en-têtes uniquement via le chemin d'inclusion en attendant code:lib_dir/1
erl_scanChaque fonction : string/1,2,3 et les tokens/3,4 réentrants au-dessus d'un analyseur lexical du runtime avec les jetons, annotations, options, rappels et erreurs d'OTP ; accesseurs et format_error/1 en Erlang (erl_scan)
erl_internal, erl_annoChaque fonction sous forme de builtin du runtime : tables des BIF, guards, tests de type et opérateurs d'OTP, fonctions prédéfinies et annotations (tables du compilateur)
records, erl_featuresRéflexion des native records, définitions à l'exécution et définitions compilées avec valeurs par défaut réduites (native records) ; fonctionnalités d'OTP 29 et celles avec lesquelles chaque module a été compilé (tables du compilateur)
binaryChaque fonction ; replace/3,4 et list_to_bin/1 en Erlang, les autres builtins du runtime (module binary)
mathChaque fonction sous forme de builtin du runtime (module math)
unicodeChaque fonction sous forme de builtin du runtime : conversions, bin_is_7bit/1, marques d'ordre des octets, formes de normalisation, catégories et propriétés d'identifiants (module unicode)
unicode_utilChaque fonction au-dessus de tables générées, les parcours de chardata sous forme de builtins du runtime (unicode_util)
reChaque fonction sauf import/1, au-dessus de PCRE2 (module re)
fileChaque fonction documentée : ouvrir, lire, écrire, positionner et fermer des fichiers (sur disque, compressed, ou en mémoire avec ram), lectures et écritures positionnées, truncate/1, advise/4, allocate/3, lectures et écritures de fichiers entiers, consult/1, eval/1,2, script/1,2 et leurs formes path_ avec path_open/3 (fichier lu en entier et décodé selon son commentaire d'encodage, UTF-8 par défaut, comme le fait epp:set_encoding/1 dans clause_epp, puis analysé forme par forme avec les résultats et erreurs d'OTP), informations sur les fichiers et leurs modifications (write_file_info/2,3, change_*), opérations sur les répertoires via le pilote de fichiers, sendfile/2,5 comme solution de repli par blocs d'OTP et format_error/1 (fichiers)
erl_posix_msgModule interne d'OTP pour file:format_error/1 : message/1 sous forme de builtin du runtime (messages POSIX)
gen_tcp, gen_udp, inet, clause_socket, clause_socket_optionsSockets au-dessus des ports socket, avec leurs options, statistiques, états et listes (sockets) ; inet:get_rc/0 depuis clause_inet_config
socketChaque fonction documentée en Erlang au-dessus des ports du pilote de sockets (sockets) : descripteurs {'$socket', Ref} conservés par un processus et une table clause_socket_registry (propriétaires, états, compteurs, métadonnées, moniteurs, listes), open/bind/listen/accept/connect, send/sendto/sendmsg/sendv/sendfile/sendmmsg, recv/recvfrom/recvmsg/recvmmsg avec les erreurs de données partielles d'OTP, nowait comme messages de complétion sous Windows et messages select ailleurs, cancel/2, noms d'options et erreurs d'invalidité d'OTP, info/0,1, i/0,1,2, supports/0,1,2 ; les appels SCTP lèvent notsup et les requêtes d'interfaces sont refusées, comme OTP sous Windows
gen_sctpChaque fonction documentée : pas de SCTP, donc open/0,1,2 répondent {error, eprotonosupport} après les vérifications d'options d'OTP et les autres voient une socket fermée ou étrangère ; error_string/1 a les textes d'OTP
inet_res, clause_inet_configChaque fonction documentée en Erlang : client DNS d'OTP au-dessus de gen_udp et gen_tcp (nouvelles tentatives, serveurs de noms alternatifs, EDNS, troncature via TCP, attentes servfail, erreurs d'OTP, listes de recherche, chaînes CNAME et hostents) avec des messages encodés et décodés par le codec DNS clause_net (noms réseau) ; configuration du résolveur telle qu'OTP la charge sur un nœud non distribué (aucune sous Windows ; resolv.conf et fichier hosts ailleurs)
net, clause_netChaque fonction documentée : recherches d'hôtes, d'adresses et de services et listes d'interfaces comme builtins du runtime avec les résultats de prim_net, filtres en Erlang ; aucun espace de noms réseau (noms réseau)
clause_socketPropre à Clause : le protocole du pilote de sockets partagé par les trois modules ci-dessus
oscmd/1,2 au-dessus d'un port avec le protocole de shell d'OTP, max_size et exception_on_failure ; requêtes d'environnement, d'heure et de version, find_executable/1,2 et set_signal/2 comme builtins (module os)
codeRequêtes sur les modules chargés sans serveur de code ; chemin de code dans un terme persistant avec les modifications de chemins d'OTP, recherches lib_dir/priv_dir, where_is_file/1, all_available/0, clash/0 ; réponses de chargement pour le code lié (module code)
application, application_controllerChaque fonction documentée : chargement, clés, environnements, démarrages avec dépendances et phases de démarrage, arrêts, permissions et types de redémarrage avec les erreurs et rapports d'OTP, au-dessus d'un contrôleur démarré à la première utilisation et de clause_application_master (applications) ; gestion des releases, boot et contrôle distribué déclinés
erlangBouchons générés de chaque export erlang d'OTP 29 ; les builtins du catalogue ont des corps de substitution, nif_error/1,2 ont un corps, les autres lèvent {not_implemented, F, A} lorsqu'ils sont appelés (module erlang)
initLes réponses d'un système démarré ; boot/1, restart/0,1 et make_permanent/2 refusés (module init)
persistent_termChaque fonction sous forme de builtin du runtime (termes persistants)
atomics, countersChaque fonction (atomics et counters)
erts_internal, erts_code_purgerCe qu'appellent stdlib et kernel ; groupes distribution, .beam, émulateur et processus de purge déclinés (erts_internal)
erl_prim_loaderRequêtes de fichiers au-dessus de file ; chargement et archives déclinés (fichiers)
zlibChaque fonction au-dessus de la zlib épinglée (module zlib)
prim_eval'receive'/2 au-dessus des étapes d'un receive compilé (prim eval)
Modules ASN.1 de public_key ('OTP-PKIX', 'PKIX1Explicit-2009', ...) et public_key.hrlGénérés à la compilation depuis library/public_key/asn1/ dans library-asn1/public_key/ de l'arborescence de build (public_key)
public_key, clause_public_key_codec, clause_public_key_keys, clause_public_keyApplication public_key (avec public_key.app) : codage DER et PEM, chiffrement PEM, clés privées PKCS #8 de chaque type et certificats aux formes plain et otp au-dessus des modules générés (public_key, clé publique) ; clés, signatures, chiffrement RSA, génération et accord de clés, signature de certificats au-dessus de crypto (clause_public_key_keys, clés) ; les fonctions de validation sont des bouchons
clause_asn1Le codec qu'appellent les modules générés par clau à partir des spécifications ASN.1 (codec ASN.1, ASN.1) ; l'application asn1 d'OTP (asn1ct, asn1rt_nif) n'est pas fournie
crypto, clause_cryptoApplication crypto (avec crypto.app), au-dessus de libcrypto d'OpenSSL dans l'archive du runtime crypto (module crypto, OpenSSL) : listes des algorithmes disponibles dans l'OpenSSL lié (supports/0,1, hash_info/1, info/0, info_lib/0), condensats et états de hachage, HMAC/CMAC/Poly1305 et états MAC, pbkdf2_hmac/5, hash_equals/2, exor/2, mod_pow/3, chiffrements et leurs états (crypto_init/3,4, crypto_update/2, crypto_final/1, crypto_get_data/1, crypto_one_time/4,5, cipher_info/1), AEAD (crypto_one_time_aead/4,6,7, crypto_one_time_aead_init/4), nombres aléatoires forts et greffons rand crypto, crypto_cache, crypto_aes et crypto_prng1, termes d'erreur d'OTP ; moteurs refusés (notsup) ; mode FIPS commutable comme celui d'OTP, ou fixé avec clau --fips ; clés publiques (sign/4,5, verify/5,6, chiffrement RSA, generate_key/2,3, compute_key/4, privkey_to_pubkey/2 : RSA, DSA, DH, ECDSA/ECDH sur courbes nommées et explicites, EdDSA, X25519/X448, ML-DSA, SLH-DSA, SRP), ec_curve/1 et ec_curves/0 (paramètres explicites de libcrypto lié), ML-KEM (encapsulate_key/2, decapsulate_key/3)

Les résultats et les raisons d'erreur correspondent à OTP 29, y compris les formes d'erreur des implémentations Erlang d'OTP (lists:map(F, x) donne {case_clause, x}, lists:nth(0, L) function_clause, lists:seq(1, 10, 0) badarg) et de ses BIF (lists:member/2, lists:keyfind/3, lists:reverse/2, les fonctions maps : badarg, {badmap, M}, {badkey, K}). lists:member/2 compare avec =:=, lists:keyfind/3 avec ==. lists:sort/1 est un builtin stable du runtime (comparaison et ordre). Les traces de pile nomment les fonctions de la bibliothèque, pas celles d'OTP.

Shell interactif

shell:start_interactive/0,1 démarre le shell Erlang sur les flux standard, et clau --shell le lie dans un exécutable dont il est le point d'entrée sauf si --entry en nomme un autre (compilation). Le processus clause_shell tient la place du user_drv d'OTP : il affiche la version du système, démarre le serveur de shell et en démarre un nouveau lorsqu'un shell se termine (exit().). Le serveur lit chaque commande via le serveur d'entrée standard d'io, en réaffichant l'invite pour chaque ligne supplémentaire d'une commande, conserve l'historique et démarre l'évaluateur, qui vérifie chaque expression avec erl_lint, développe les records et l'évalue avec erl_eval. Les résultats s'affichent avec les records du shell via le moteur d'affichage formaté du runtime (clause_io_lib:pretty/2, io_lib). La fin de l'entrée termine le programme avec le code 0 après *** Terminating erlang (nonode@nohost).

Les commandes appellent les modules par leur nom, donc un programme démarrant le shell a besoin que chaque export soit appelable : --shell les conserve (exports conservés) et lie chaque module de bibliothèque ; un programme compilé sans cette option n'atteint que les modules qu'il nomme. Les lignes d'entrée sont lues telles que le terminal les fournit, éditées par le terminal lui-même : il n'y a ni édition de ligne edlin, ni touches d'historique, ni complétion par tabulation (différences).

Comment les programmes les obtiennent

Remplacements des modules du runtime

Clause remplace les modules d'OTP qu'ERTS implémente en C (NIF, BIF, pilotes de ports, les modules préchargés de erts/preloaded/src) et les modules qu'OTP génère pendant son build (unicode_util). Les kernel et stdlib d'OTP sont de l'Erlang ordinaire, mais appellent ces modules.

Fourni ou absent

Tout ce qui a besoin du runtime et ne peut pas être écrit en Erlang ordinaire est décidé par module, et par groupe de fonctions lorsqu'un module mélange plusieurs préoccupations :

Les fonctions triviales pour le runtime sont implémentées sans décision séparée.

À quel module un nom se résout

OTP est optionnel sur la machine de l'utilisateur ; lorsqu'il est présent, il ne doit pas changer ce qu'un build compile. Un nom de module se résout dans cet ordre :

  1. Entrées explicites : les sources que l'utilisateur liste (sources, source_dirs, entrées positionnelles). Une entrée qui porte le nom d'un module Clause le remplace, avec un avertissement nommant les deux fichiers.
  2. Modules Clause : les modules de bibliothèque, remplacements fournis compris.
  3. source_search_paths, comme décrit dans projets.

Le nom d'un module absent est réservé : un fichier du même nom sur un chemin de recherche (par exemple erts/preloaded/src/prim_file.erl d'OTP) n'est pas utilisé, et le diagnostic indique que Clause ne fournit pas le module. Une entrée explicite peut tout de même le fournir, avec l'avertissement de remplacement.

ignore_modules s'applique aussi aux modules Clause : un module Clause ignoré est absent du lot, et une entrée explicite peut alors le fournir sans avertissement, puisque rien n'est remplacé.

Fichiers

Fonctions documentées

library/documented.terms liste les fonctions publiques qu'OTP 29 documente pour erts, kernel, stdlib, crypto et public_key : {Module, Application, Name, Arity}. par fonction dont les documentations de module et de fonction ne sont pas masquées et qui n'est pas obsolète, observée dans les blocs de documentation de l'OTP de l'hôte par tests/compiler/library/observe_docs.escript (exécuté explicitement). Les exports non documentés restent dans les inventaires mais peuvent rester des bouchons.

Types

Comme les modules de Clause l'emportent sur ceux d'OTP, le code OTP qui nomme file:filename() ou erlang:time_unit() dans ses specs doit trouver ces types dans les modules de Clause. Chaque module fourni dont l'équivalent OTP exporte des types inclut <module>.types.hrl depuis son propre répertoire : la liste -export_type, puis les types exportés et les types locaux et records qu'ils utilisent, tels qu'OTP les définit (la documentation montre les mêmes définitions ; la documentation installée ne contient aucune définition de type, elles proviennent donc de l'implémentation : les informations de débogage du beam, ou le source livré d'un module préchargé comme erlang). escript tests/compiler/library/observe_types.escript LIBRARY APP MODULE écrit l'en-tête à partir de l'OTP de l'hôte, et --check compare ses formes avec une observation fraîche (CTest library_freshness) ; library_modules.py check exige que chaque en-tête soit inclus par son module. Les types que les en-têtes nomment depuis des modules extérieurs au programme (unicode:chardata(), calendar:datetime()) et les larges unions d'OTP (file:posix() a plus de membres que le graphe de types n'en garde) se résolvent en term() sans avertissement : les diagnostics relèvent de la bibliothèque de Clause, pas du programme de l'utilisateur.

Services du kernel au démarrage

Les file, io et code d'OTP appellent des serveurs enregistrés (file_server_2, code_server, le serveur d'E/S d'un group leader) que l'application kernel démarre au boot. Un exécutable Clause n'en démarre aucun : les file et io propres à Clause n'ont besoin d'aucun serveur, le logger de Clause démarre son serveur à la première utilisation, et un module OTP qui en a besoin échoue comme il échoue sous OTP sans ce serveur (noproc). Le code OTP qui appelle code à l'exécution ne fonctionne donc pas. Démarrer toute l'application kernel n'est pas prévu.

Applications

Registre

Le plan du projet programme chaque module documenté de erts, kernel et stdlib ; les programmes réels (luerl en premier) fixent les priorités. Le compiler et l'exécuter, classer chaque erreur (unknown module, undefined function M:F/A, syntaxe ou fonctionnalité non prise en charge, autre), et affecter chacune à une étape du plan, à un autre élément du backlog ou à un refus consigné. Avec la sortie d'erreur de l'exécution enregistrée dans un fichier, python tests/compiler/library/library_modules.py report FILE affiche la classification sous forme de tableaux : chaque module inconnu avec son nombre d'erreurs, les modules appelants et les fonctions appelées avec leurs arités ; les fonctions non définies par module ; les autres messages avec leurs nombres.

Outils

Tous se trouvent dans tests/compiler/library/ :