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

Différences avec Erlang/OTP

Comportements observables pour lesquels Clause diffère sciemment de la version d'OTP 29 de référence (maint-29, voir otp-reference.md). Chaque entrée renvoie au contrat qui en est responsable. Retirer une entrée dès que la différence est corrigée. Les fonctionnalités pas encore implémentées (signalées par notimpl) ne figurent pas ici ; voir features.md et le plan.

Maps

DifférenceOTPClauseRéférence
Ordre d'un générateur de map (K := V <- M)Les maps plates (jusqu'à 32 clés) sont parcourues dans l'ordre des clés, mais les clés atomes dans l'ordre de la table des atomes, qui varie d'une exécution de la VM à l'autre ; les maps plus grandes dans l'ordre de hachageToujours l'ordre canonique des clés (ordre des termes)motifs
Contenu de bad_generators pour un générateur de map dans un groupe zipSon itérateur : une chaîne {K, V, Next} terminée par none, dans l'ordre d'OTPLa même chaîne, construite dans l'ordre canonique des clésmotifs
maps:iterator/1,2, maps:next/1, erts_internal:map_next/3, ordre d'exécution des funs de maps (intersect_with/3, merge_with/3, ...), proplists:get_keys/1, sets de version 2 (to_list/1, fold/3)Ordre interne (ordre de la table des atomes pour les clés atomes, ordre de hachage au-delà de 32 clés) ; un itérateur est une position ou une chaîne {K, V, Next}Ordre canonique des clés ; un itérateur continue sur une liste de clésbuiltins
Affichage des maps (erlang:display/1, ~w, ~p)Ordre de la disposition interne (ordre de la table des atomes pour les clés atomes, ordre de hachage au-delà de 32 clés)Ordre des clés de la map, comme ~kw d'OTPtermes
Ordre de digraph:vertices/1, edges/1, source_vertices/1, sink_vertices/1 et des ordonnancements et composantes de digraph_utils lorsqu'ils partent de ces listesOrdre de hachage des tables de sommets et d'arêtesOrdre de hachage de Clause (ETS) ; les chemins et listes de voisins suivent l'insertion des arêtes dans les deux casbuiltins
Ordre de maps:keys/1, values/1, to_list/1, fold/3, des membres écrits par json:encode/1, des champs donnés à une map par erl_parse:abstract/1,2, et des listes de sommets et parcours de graphL'ordre interne de la map (ordre de la table des atomes pour les clés atomes, ordre de hachage au-delà de 32 clés)Ordre des clésbibliothèque
Affichage des native records (erlang:display/1)Champs dans l'ordre d'index de la table des atomesOrdre de définition, comme ~wnative records
== entre native records dont les champs ne diffèrent que par entier/flottantLe compilateur peut le réduire à =:= (false)Comparaison numérique (true)native records
Construction externe d'un native record d'un module non chargéÉchoue tant que le module qui le définit n'est pas chargéChaque module du lot est chargé au démarrage ; un module hors du lot échoue toujoursnative records
Affichage des funs locales (#Fun<M.Index.Uniq>)Index issu de la numérotation des lambdas par le compilateur, Uniq un hachage du code du moduleIndex parmi les funs locales du module dans l'ordre du source, Uniq toujours 0funs
Ordre de deux funs locales d'un même moduleSelon l'index d'OTPSelon l'index dans l'ordre du source, donc des funs de fonctions différentes peuvent être ordonnées différemmentfuns
Noms des funs anonymes dans les traces de pile (-f/1-fun-N-)N issu de la numérotation du compilateurN compte les funs de f/1 dans l'ordre du sourcefuns
Fun anonyme dans la valeur par défaut d'un champ de recordChaque site de construction développe sa propre copie : les funs de deux sites sont différentesUne seule fun pour la valeur par défaut : les funs de tous les sites de construction sont égalesfuns
Ordre des valeurs capturées des funs créées dans des comprehensionsVariables libres de la fonction générée pour la comprehensionOrdre de définition dans la fonction englobante ; visible uniquement en comparant deux telles funsfuns

Pids, références et processus

DifférenceOTPClauseRéférence
Minuteries ponctuelles et périodiques de timer autres que les envois à des pids locauxGérées par le processus timer_server, démarré sous kernel_sup à la première utilisation ; les signaux d'exit_after/2,3 en proviennentAucun serveur de minuteries : chaque minuterie est un processus distinct, qui envoie le signal d'exit_after ; cancel/1 retourne avant que ce processus ait vu l'annulationbuiltins
Numéros de pidLe premier processus utilisateur est environ <0.80.0> ; les numéros sont réutilisés quand la table des pids reboucleLe premier processus est <0.1.0> ; les numéros proviennent d'une seule séquence et ne sont jamais réutiliséstermes
Code après spawn(Fun) d'une fun d'une autre aritéL'analyse de types du compilateur peut considérer le code après l'appel comme inaccessible et le supprimer, de sorte que l'appelant renvoie le pid immédiatementL'appelant continue ; seul le nouveau processus échoue avec {badarity, {Fun, []}}processus
Pile d'un function_clause levé par un builtin de lists (lists:sublist/2, lists:max/1, ...)Le cadre supérieur est la fonction Erlang, souvent un auxiliaire interne (lists:sublist_2/2), avec ses argumentsL'appelant est au sommet : les builtins n'empilent aucun cadrebuiltins
Dernier bit des résultats de math (math:erfc(1), ...)La bibliothèque C avec laquelle OTP a été construitLa bibliothèque C liée aux programmes Clause (Windows : 0.15729920705028513 pour erfc(1), OTP 0.1572992070502851)builtins
Résultat de binary:compile_pattern/1{bm, Ref} ou {ac, Ref} avec une référence opaque{bm, [Pattern]} ou {ac, Patterns}builtins
binary:referenced_byte_size/1 d'un sous-binaryLa taille du binary dans lequel il pointeSa propre taillebuiltins
Mémoire des termes persistants remplacés ou effacésRécupérée par un processus de collecte des zones de littéraux qui fait copier la valeur par chaque processus en arrière-planChaque processus la copie à sa prochaine tranche (ceux en attente aussitôt, par le put/erase), puis la zone est libérée ; aucun processus de collecteruntime
Termes persistants envoyés dans des messagesRestent partagés, comme les littéraux : le tas du destinataire ne grossit pasCopiés dans le tas du destinataire comme tout autre termeruntime
persistent_term:info/0 et get/0Incluent les termes que kernel et stdlib d'OTP stockent au démarrage (26 sous OTP 29)Seulement les termes propres au programmebuiltins
code:is_loaded/1, code:which/1, code:all_loaded/0 d'un module compiléLe fichier .beam depuis lequel il a été chargépreloaded : chaque module est lié dans l'exécutablebuiltins
Option priority de send/3, link/2, exit/3, exit_signal/3Les messages et signaux prioritaires dépassent les ordinairesAcceptée ; livrés comme des messages et signaux ordinairesprocessus
spawn/2,4, spawn_link/2,4, spawn_monitor/2,4 nommant un autre nœudUn avertissement ** Can not start ... on Node ** est journaliséRien n'est affiché ; le pid inutile se termine tout de même avec noconnectionprocessus
Options de system_flag/2 autres que backtrace_depth et min_heap_size (fullsweep_after, schedulers_online, multi_scheduling, max_heap_size, ...)Modifient l'émulateurVérifiées et relues sans effet ; system_logger vaut initialement undefined (aucun processus de journalisation) ; cpu_topology, erts_alloc, scheduler_bind_type donnent badargbuiltins
Minuteries d'un processus suspendu (receive ... after, send_after/3 et start_timer/3 vers son pid)Suspendues avec le processus jusqu'à sa reprise (OTP 28, 29)Continuent de fonctionner : un délai expirant pendant la suspension est pris en compte à la reprise ; un message de minuterie attend dans sa boîte aux lettresprocessus
Sortie de process_display/2Vidage de pile d'OTP avec adresses et emplacements de pileUn Module:Function/Arity par cadreprocessus
process_flag(save_calls, N)Enregistre les N derniers appels pour process_info(Pid, last_calls)Conservé et relu ; aucun appel enregistréprocessus
adler32_combine/3, crc32_combine/3 avec une seconde taille supérieure à 2^31 - 1 sous WindowsCombinésbadarg (z_off_t de zlib y fait 32 bits)builtins
init:get_arguments/0, init:get_argument/1Les options de l'émulateur : root, bindir, progname, home et chaque -Flag de la ligne de commandeSeulement home ; un exécutable n'a pas d'options d'émulateurbuiltins
init:script_name/0, init:script_id/0Le chemin du script de démarrage et {"Erlang/OTP", "29"}Le chemin absolu de l'exécutable et {"Clause", "29"}builtins
init:get_status/0, init:ensure_loaded/1 dans l'entrée{starting, started} et chargement de code pendant que du code escript, -s ou -eval s'exécute au démarrage ; {started, started} et not_allowed une fois démarréToujours les réponses de l'état démarrébuiltins
init:stop/0,1, init:reboot/0Renvoient ok ; init arrête ensuite les applications et termine, pendant que l'appelant continueTerminent immédiatement ; l'appel ne retourne jamaisbuiltins
init:get_argument(home) sous Windows sans HOMEDRIVE/HOMEPATHLe dossier de profil du shellUSERPROFILE, normalement le même dossierbuiltins
erlang:halt(Slogan), init:stop(Slogan)Affiche le slogan, écrit erl_crash.dump dans le répertoire courant et le signale sur stderr ; code de sortie 1Affiche le slogan sur stderr, n'écrit pas de crash dump ; code de sortie 1exécutables
init:restart/0,1, init:boot/1, init:make_permanent/2Redémarrent le système dans le même nœud, le démarrent ou fixent le script de démarrage du prochain redémarrageRefusés : erreur notsup, {error, notsup} pour make_permanent/2builtins
Arité de atomics:new/2Tout entier positif que l'allocateur peut servir ; un entier énorme arrête le nœud avec un crash dumpDe 1 à 2^27, sinon badargbuiltins
counters avec write_concurrencyCompteurs par ordonnanceur additionnés à la lecture ; la mémoire indiquée par info/1 croît avec le nombre d'ordonnanceursUn seul tableau atomics ; la mémoire indiquée par info/1 est celle du tableaubuiltins
erts_internal:term_type/1La représentation interne : flatmap ou hashmap, heap_binary, refc_binary ou sub_binary, ...Toute map est flatmap, tout bitstring sub_binarybuiltins
erl_prim_loader:get_path/0Le chemin de code de démarrage["."] jusqu'à set_path/1ports
file:read_link_info/1,2 d'un lien symbolique sous WindowsLes données propres du point d'analyse (reparse point) du lienLa taille et les dates de la cible avec le type symlinkports
inet:gethostbyname/1,2Le nom canonique et les alias du résolveur (inet_res, fichier hosts, natif)Le nom demandé et aucun alias ; adresses issues du résolveur du systèmeports
Module socketL'API NIF des socketsAbsents : une référence est une erreur de compilation ; utiliser gen_tcp, gen_udp, inetbibliothèque
net:getifaddrs/1,2 avec un espace de noms, inet:getifaddrs([{netns, _}])net s'appelle indéfiniment (OTP 29) ; inet lit l'espace de noms sous Linux{error, enotsup}builtins
Listes de sortie de zlibUn binary par bloc interne, imbriqué là où un flux s'est terminé et a redémarréUn binary par appel, [] s'il n'y en a pas ; les octets sont ceux d'OTPbuiltins
zlib:safeInflate/2 et appels zlib longsRetournent après une quantité bornée de sortie ({continue, Output}) et cèdent la mainDécompressent toute l'entrée en attente en un seul appel ({finished, Output}) ; un appel long occupe son thread d'ordonnanceurbuiltins
Correspondances re longuesre:run/3 et la boucle globale cèdent la main après une quantité bornée de travailUne correspondance s'exécute jusqu'au bout et occupe son thread d'ordonnanceur ; une exécution globale ne cède la main qu'entre les correspondancesbuiltins
re:compile/2 avec export, re:import/1Un motif exporté {re_exported_pattern, ...} qu'un autre nœud importeexport donne badarg ; import/1 lève {not_implemented, import, 1}builtins
Erreurs d'argument de rebadarg levé depuis re:run/3 (ou replace, split) avec les arguments de l'appelant et error_infobadarg levé depuis l'auxiliaire re qui a rejeté l'argument, avec les arguments de cet auxiliairebuiltins
code:is_sticky/1true pour les modules de kernel, stdlib et compiler, et ceux des répertoires nommés par code:stick_dir/1Toujours false ; stick_dir/1 vérifie seulement que le répertoire peut être listébuiltins
code:root_dir/0 et chemin de code initialRépertoire d'installation d'OTP ; le chemin contient ses répertoires lib/*/ebinRépertoire de l'exécutable ; le chemin contient les répertoires ebin de lib/ voisin et d'ERL_LIBS, puis "."builtins
code:load_file/1, load_abs/1, load_binary/3, atomic_load/1, prepare_loading/1 avec du code objet valideChargent le module{error, badfile} : chaque module est lié dans l'exécutable (D01)builtins
code:coverage_support/0 et fonctions de couverturetrue avec le JIT ; modes et compteurs de couverturefalse ; les autres lèvent badarg, comme OTP sans prise en charge de la couverturebuiltins
code:get_doc/1 d'un module présent dans le programmeSon bloc de documentation EEP 48{error, missing} : les exécutables n'embarquent aucune documentationbuiltins
Formatage d'un grand terme (io:format/1,2)S'exécute en code Erlang (io_lib) et dans le group leader, le processus peut donc être préempté pendant le formatageS'exécute jusqu'au bout dans un seul appel de builtin ; les autres processus attendentbuiltins
Drapeaux de process_flag/2trap_exit, priority, message_queue_data, min_heap_size et d'autresSeulement trap_exit et min_heap_size ; tout autre drapeau lève badargprocessus
Ordre des rapports d'erreur de processus qui plantent en même tempsOrdre du loggerL'ordre dans lequel leurs workers les terminentprocessus
Signaux de sortie (exit/2, exit_signal/2) vers un processus s'exécutant sur un autre ordonnanceurPlacés dans sa file de signaux et traités plus tard, pendant que l'émetteur continueL'émetteur attend la fin de la tranche de temps de la cible, puis agit aussitôt ; observable seulement dans les délais (les messages sont mis en tampon et l'émetteur continue)processus
term_to_binary/1 d'une fun locale ou d'un native recordEncodé (NEW_FUN_EXT, ...)error:notsup ; fun M:F/A est encodéebuiltins
term_to_binary/1 d'une map de plus de 32 clésOrdre de hachage sauf avec deterministicToujours l'ordre des clés (les octets de deterministic)builtins
binary_to_term/1 d'un pid, port ou référence d'un autre nœud ; option local de term_to_binary/2Identités externes ; encodage LOCAL_EXTbadargbuiltins
Limite de temps des timersDépend de l'unité de temps native (environ 2^49.7 ms sous Windows)Temps relatif de 0 à 2^49-1 ms sur toutes les plateformesprocessus
unique_integer/0,1 sans positivePeut être négatifToujours positif et croissantbuiltins
Éléments current_function, initial_call, current_stacktrace, ... de process_info/2Rapportéserror:{notsup, Item} ; process_info/1 les ometprocessus
reductions de process_info/2 ; reductions, garbage_collection, io de statistics/1Comptés0 (non tenus)builtins
garbage_collect/0,1,2Collecte avant de retournerCollecte au prochain point sûr (safepoint) de la cibleprocessus
erlang:system_info(machine), donc ?MACHINE d'epp et la macro qu'elle nomme"BEAM", 'BEAM'"Clause", 'Clause'builtins
erlang:system_info(schedulers) d'un programme démarré avec un masque d'affinité (start /affinity, taskset)Un ordonnanceur par processeur logique de l'hôte (32 sous un masque de 7 CPU), schedulers_online un par CPU du masqueLes deux un par CPU du masque : Clause démarre uniquement les threads de travail en ligneprocessus
Options de réglage de spawn_opt/2..5 (priority, min_heap_size, ...)AppliquéesVérifiées et acceptées, non appliquéesprocessus
hibernate/3Abandonne la pile ; le processus se termine quand M:F retourneGarde la pile ; le résultat de M:F revient à l'appelant de hibernate/3processus
monitor(port, Item, Options) avec des optionsAcceptébadargprocessus
spawn_request_abandon/1true tant que la réponse est en attenteToujours false : la réponse est envoyée avant le retour de spawn_requestprocessus
Dernier bit de math:log2/1 (Windows)La version Windows d'OTP divise log(X) par log(2) (math:log2(1.0e308) vaut 1023.1538532253077)Le log2 de la bibliothèque C (1023.1538532253076)builtins
phash/2, phash2/1,2 des pids, ports, références, funs et native recordsHachages des numéros de processus, ports et références d'OTP, de l'indice et du numéro unique d'une fun, hachage de la définition d'un recordHachages des numéros de Clause, du module, de l'arité ou de l'indice et des captures d'une fun, des valeurs des champs d'un record ; tout autre terme donne la valeur de hachage d'OTPbuiltins
dict:fold/3, map/2, filter/2 avec un argument qui n'est pas une funfunction_clause, ou {badfun, F} lorsque le premier compartiment visité par OTP contient une entréefunction_clausebuiltins
erlang:is_builtin/3 de lists:reverse/2 et d'autres fonctions de bibliothèque implémentées en Ctruefalse : seulement les builtins du runtime et apply/2,3funs
pid, uniq, new_uniq de fun_info/1,2 pour une fun localePid du créateur, sommes de contrôle du compilateurundefined, MD5 du nom du modulefuns
Contexte de md5_init/0L'état de 92 octets d'OTPL'état de 96 octets de Clause ; les condensés sont égauxbuiltins
erlang:delete_module/1 d'un module chargéRend son code ancien (true)error:notsup : le code lié restebuiltins
erlang:prepare_loading/2Prépare un binary BEAM valideToujours {error, badfile}builtins
erlang:pre_loaded/0Les modules de démarrage préchargésTous les modules du programmebuiltins
list_to_pid/1 d'un numéro jamais attribuéRenvoie un terme pidbadarg : seuls les pids créés par ce programme sont admistermes
list_to_port/1 d'un numéro jamais attribuéRenvoie un terme portbadarg : seuls les ports ouverts par ce programme sont admisports
Valeurs de port_info/1,2id est un index de table ; memory, queue_size, locking décrivent le piloteid est le numéro du port ; memory et queue_size valent 0 ; locking vaut port_levelports
Écriture dans un fichier ouvert en lecture seule{error, eacces} sous Windows, {error, ebadf} ailleurs{error, ebadf} partoutports
Port de win32regLe port intégré registry__drv__ ({spawn, "registry__drv__ rw"}), répondant aux commandes par des messages de portLe pilote clause_registry ({spawn_driver, ...}), donnant les mêmes réponses par port_control/3 ; port_info/2 le nomme clause_registryports
Nom du programme d'argparse sans l'option prognameLe progname de l'émulateur (erl)Le nom de l'exécutable sans son extension (init n'a pas de progname)bibliothèque
Cadre au sommet de la pile d'une erreur de validation de commande d'argparseLa fonction de validation (argparse:validate_command/2, validate_option/2, une fun à l'intérieur) avec [Entity]argparse:validate/2 avec [Entity]builtins
escript:script_name/0Le chemin de l'escript, premier argument ordinaireLe chemin de l'exécutable : un programme Clause est son propre scriptbibliothèque
escript:extract/2 avec compile_sourceLe source compilé en beam{error, {compile, ...}} : les programmes Clause n'ont pas de compilateurbibliothèque
erl_abstract_code:debug_info(core_v1, ...) (Core Erlang de beam_lib)Core Erlang issu du compilateur{error, failed_conversion} : les programmes Clause n'ont pas de compilateurbibliothèque
zstd:get_frame_header/1 d'un en-tête de trame tronquéLes champs de mémoire non initialiséeLes champs à zéro ('ZSTD_frame', tailles 0)builtins
file:open/2 avec raw ou ramUn record #file_descriptor{} servi dans l'appelant (is_pid/1 false) ; les requêtes io échouent ; un fichier ram n'a pas de read_line/1 (undef) et répond {error, einval} une fois ferméUn pid de serveur de fichiers comme les autres fichiers ; les E/S positionnées et sendfile/5 répondent comme pour les fichiers raw d'OTP ; un fichier ram répond {error, enotsup} à read_line/1 et aux requêtes d'E/S, et {error, terminated} une fois ferméports
file:truncate/1 sur un fichier ouvert uniquement en lectureL'erreur de la plateforme (eacces sous Windows, einval ailleurs)L'erreur du runtime C pour le descripteur (ebadf ou einval) ; le serveur s'arrête comme celui d'OTPports
Fichiers ouverts ou réglés sur {utf16, _} ou {utf32, _}Lignes et caractères décodés dans l'encodageLes lignes se terminent à un octet 10 avant leur décodageports
Séquences d'io_ansi sous Linux et macOSIssues de la base terminfo de TERM lorsqu'elle possède la capacité (setaf, sgr0, ...) ; tput/1,2, tigetnum/1, tigetflag/1, tinfo/0 la lisentLes séquences ANSI intégrées utilisées par OTP sans terminfo (comme OTP sous Windows) ; tigetnum/1, tigetflag/1, tinfo/0 répondent {error, enotsup}, tput/1,2 lèvent {enotsup, Capability} ; enabled/0,1 exige un TERM autre que dumbbibliothèque
io_ansi:scan/1 et tput/1,2 sous WindowsÉchouent avec try_clause sur le résultat {error, enotsup} de terminfoscan/1 reconnaît les séquences intégrées ; tput/1,2 lèvent {enotsup, Capability}bibliothèque
socket sous Windows : recvmsg, sendmsg, sendfile, sendmmsg, recvmmsgLèvent notsupFonctionnent comme sous Linux et macOSbibliothèque
socket sous Windows : datagramme plus long que la longueur de recv{error, {completion_status, ...more_data...}}Le datagramme tronqué, comme ailleursbibliothèque
socket sous Linux et macOS : ioctl/2,3,4, getopt_native/3, setopt_native/3, open/1,2 d'un descripteur, domaine local, SCTPPris en chargeRefusés comme OTP les refuse sous Windows ({error, {invalid, ...}}, notsup) ; local donne {error, eafnosupport}bibliothèque
socket:info/1, i/0,1,2Les compteurs et états du NIF, fd le descripteurCompteurs des appels effectués, états suivis par le module ; Fd est le numéro du portbibliothèque
Réponses d'inet_resLes réponses de gethostbyname, getbyname et gethostbyaddr sont mises en cache par TTL dans inet_db ; une recherche en cache peut lister les adresses dans un autre ordreAucun cache : chaque recherche interroge les serveurs de nomsbibliothèque
Configuration du résolveur sous Linux et macOSinet_db lit aussi host.conf/nsswitch.conf et les fichiers inetrc, suit les changements de resolv.conf et, sous Linux, déduit le domaine du nom d'hôteLes lignes nameserver, domain et search de resolv.conf et le fichier hosts, lus une seule foisbibliothèque
os:set_signal(Signal, handle) (Linux, macOS)Le signal est envoyé à erl_signal_server, dont le gestionnaire par défaut arrête le système sur sigterm, le termine sur sigusr1 et sigquitAucun erl_signal_server : sigterm et sigquit terminent avec le code 0, sigusr1 avec le code 1, les autres sont ignorés ; sans set_signal, SIGTERM conserve l'action par défaut du systèmeports
Arguments vides de {spawn_executable, F} sous WindowsSupprimés de la ligne de commandeTransmis sous forme ""ports
{exit_status, S} et eof d'un programme lancéOrdre non spécifié, exit_status peut arriver avant les dernières donnéesAprès toutes les données, avant eofports
Ports occupésUn port avec trop de sortie en attente suspend les émetteurs, ports socket compris ; force de port_command/3 fonctionne sur les pilotes qui le permettentSeuls les ports des programmes lancés deviennent occupés ; les ports fd et socket jamais ; force lève notsup sur tous les pilotesports
{active, N} des socketsUn entier N compte les messages avant {tcp_passive, S}exit(badarg) ; seulement true, false et onceports
Options propres à inet_drv (header, deliver, exit_on_close, send_timeout, send_timeout_close, delay_send, seuils, packet_size, show_econnreset, buffer, read_packets, recvtos, recvttl, line_delimiter)AppliquéesConservées et rapportées par getopts/2 avec les valeurs par défaut d'OTP, sans être appliquées ; les options du système (nodelay, keepalive, linger, tampons, tos, multicast, ...) sont appliquéesports
Autres options de socket ({packet, line | http | ...}, {raw, ...}, bind_to_device, netns)Fonctionnentexit(badarg) à l'ouverture, {error, einval} depuis setopts/2 et getopts/2ports
inet:getopts(S, [multicast_if]) sous WindowsLit de la mémoire non initialisée pour une socket TCP, et l'adresse générique après qu'une socket UDP en a défini uneLa valeur du système ; l'adresse générique lorsque la socket n'en a pasports
port_info(Socket, input | output), input et output d'inet:info/1Les octets des commandes et réponses du pilote0 : le trafic des sockets est compté uniquement par inet:getstat/1,2ports
Raisons d'erreur des socketsToute raison POSIX signalée par le systèmeLes plus courantes (econnrefused, eaddrinuse, econnreset, etimedout, ...) ; les autres deviennent eioports
Entrée d'un port pendant que le processus connecté détient 1 024 messages et peut s'exécuterContinue à lire et à livrerCesse de livrer jusqu'à la fin de la tranche de temps du processus ; au-delà de 64 Kio détenus, cesse de lire, et le programme qui écrit se bloqueports
gen_tcp:close/1 avec de la sortie en attenteAttend, au plus selon le réglage linger/send_timeout, que la sortie soit partieRetourne immédiatement ; le thread d'E/S envoie la sortie en attente, puis fermeports
Types de monitor/2process, port, time_offsetprocess et port ; time_offset lève badarg (pas de changement de décalage temporel)processus
exit/2, exit_signal/2 vers une référenceEnvoie à l'alias de processus, si la référence en est un actifRien : les signaux de sortie ne vont jamais vers les aliasprocessus
Numéros de référenceCombinent un identifiant d'ordonnanceur et des compteurs par ordonnanceur (#Ref<0.178111994.4235460610.214105>)Un seul compteur pour tout le programme (#Ref<0.0.0.1>), les références sont donc ordonnées par créationtermes

Erreurs, traces de pile et rapports

DifférenceOTPClauseRéférence
Emplacements des traces de pile[{file, F}, {line, L}], error_info pour error/3Toujours [] ; aucun error_info, donc erl_error:format_exception/3,4 n'affiche pour eux ni emplacement ni ligne *** argumentABI
erlang:raise/3 avec des entrées de pile {Fun, Args}AcceptéesRejetéesABI
Cadre supérieur de function_clauseListe des argumentsAritéABI
Cadre au sommet pour undef d'un appel M:F(A1, ..., An){M, F, [A1, ..., An], []}{M, F, N, []} : l'arité à la place des arguments (apply/3 et les appels de funs affichent les arguments)funs
Appel dynamique d'un export qu'un exécutable ne peut pas atteindre (son module n'est nommé que par une trace de pile, une exception ou un message venu de l'extérieur du programme)L'appelleundef, sauf avec --keep-exports ; function_exported/3 et module_info(exports) le listent quand mêmeexécutables
Cadres des BIF/opérateurs en échecPrésents ({erlang, '+', Args, ...})Absents ; rien sous la fonction d'entréeABI
Table des atomes pleine (list_to_atom/1)L'émulateur s'arrête (no more index entries in atom_tab) et écrit un crash dumpclau: runtime failure: entry call failed: resource_limit, code de sortie 70builtins
list_to_integer/1,2 avec des caractères au-delà de 255Ses premiers chiffres n'utilisent que l'octet de poids faible de chaque caractère ([16#131] donne 1)badargbuiltins
erlang:function_exported/3 d'un BIFVrai pour tout BIF de l'émulateurVrai seulement pour les builtins fournis par ce runtimebuiltins
Rapports d'erreur des processus plantésEnvoyés au logger, écrits plus tard par son gestionnaire par défaut (sur la sortie standard sous erl, souvent perdus quand un escript s'arrête avant)Écrits sur stderr à la fin du processus, avant toute sortie ultérieure ; ce n'est pas un événement logger, donc les gestionnaires et filtres ne le voient pasprocessus
Appels de fonctions qui ne retournent jamaisCompilés en appels terminaux (appelant absent de la trace)Appels ordinaires (appelant présent)ABI
Exceptions dans une fun anonyme connue à -O2 (F = fun ... end, F(X), lists:map(fun ... end, L) et les autres boucles de listes, maps:fold(fun ... end, A, M))Cadres de la fun (-f/1-fun-0-) et des auxiliaires de lists et maps (lists:map_1/2)Le corps de la fun est intégré dans l'appelant : ces cadres sont absents, et une queue de liste impropre dans map/2, foldl/3, all/2, any/2, flatmap/2 lève function_clause avec l'appelant au sommetfuns
Mémoire de l'hôte épuiséeL'émulateur signale qu'il ne peut pas allouer de mémoire, écrit un crash dump et s'arrêteclau: runtime failure: entry call failed: out_of_memory, code de sortie 70, pas de dumptas du runtime
Stockage des maps de plus de 32 clésUn HAMT sur le tas, à nœuds hachés à 16 branchesUn arbre B+ sur le tas, d'au plus 16 entrées par nœud dans l'ordre des clés ; les tailles de tas des grandes maps diffèrent de celles d'OTPtas du runtime
Plafond mémoire par processusmax_heap_size (en mots, tas et pile) tue le processus avec la raison killed et journalise un rapport d'erreur--max-heap / --max-stack (octets) et --max-memory, valable pour tout le runtime, font échouer le processus demandeur avec resource_limit : clau: runtime failure: entry call failed: resource_limit, code de sortie 70tas du runtime
Arguments du programmeescript transmet tous les arguments à main/1 ; les options de l'émulateur (+t) viennent de %%! ou de ERL_FLAGSLes options du runtime placées en tête (--max-atoms, --max-heap, --max-stack, --max-memory, --min-heap-size, --args-file, --) sont retirées d'abord ; CLAUSE_FLAGS contient les mêmes optionsexécutables
Exception non capturée dans un module d'entrée ordinaireescript sort avec le code 127Sort avec le code 1 et une ligne uncaught exception <class>: <reason> (les sources escript gardent 127)exécutables
Diagnostics du compilateurFormulation d'erl_lint (variable 'X' is unbound) et avertissementsFormulation propre (unbound variable X) ; les avertissements de lint d'OTP ne sont pour la plupart pas émis (y compris les avertissements sur les native records : champs inconnus dans les accès, mises à jour et motifs, construction qualifiée par le module lui-même sans valeurs, records inutilisés ou définis dans un en-tête ; un motif ultérieur qui filtre un nom exporté d'une branche)sémantique
Module de behaviour avec une behaviour_info/1 écrite à la mainL'appelle lors de la compilation des utilisateurs et avertit des callbacks manquants, mal définis ou obsolètesNon évaluée : les callbacks de ses utilisateurs ne sont pas vérifiéssémantique
Modules de behaviour ni dans le lot ni dans la bibliothèque Clause (application, ...)Chargés depuis le chemin de code ; leurs callbacks sont vérifiésAvertissement behaviour M undefinedsemantic
Gestionnaire par défaut de loggerlogger_std_h écrit de façon asynchrone avec protection contre la surcharge (modes synchrone, abandon et purge, limites de rafale, arrêt en surcharge)Également sur standard_io (standard_error avec CLAUSE_LOGGER_TYPE=standard_error), mais chaque événement est écrit avant le retour de l'appel de journalisation ; les options de surcharge sont vérifiées et conservées sans effetbibliothèque
Processus gestionnaires de logger_std_hSupervisés par logger_sup, redémarrés après overload_kill_restart_afterLiés au serveur logger ; un gestionnaire dont le processus meurt est retirébibliothèque
net_adm:names/0,1Interroge epmd : {ok, Names} lorsqu'un epmd fonctionne sur l'hôte{error, address} : Clause n'a pas de client epmdbibliothèque
net_kernel:start/1,2Démarre la distribution, ou donne l'erreur d'OTP en cas d'échecIndisponible (not_implemented)bibliothèque
Traçage : erlang:trace/3, trace_pattern/2,3, trace_info/2, trace_delivered/1, system_monitor/0,1,2, system_profile/0,2, seq_trace/2, seq_trace_info/1, seq_trace_print/1,2, dt_*, le module trace, erl_tracer:enabled/3, trace/5Effectuent le traçageerror:notsupbuiltins
Jetons de seq_traceTransmis avec les messages ; les numéros de série les comptent ; un traceur système reçoit les messages de traceConservés uniquement par processus : non transmis, numéros de série inchangés, aucun message de tracebibliothèque
Portées de pg et globalRépliquent entre nœuds connectés ; pg surveille les nœuds via net_kernelUn seul nœud, aucun pair ni surveillance des nœudsbibliothèque
Ressources d'applicationFichiers .app trouvés sur le chemin de code au chargement ; sys.config, -config et les arguments -App Key Value définissent les environnementsCompilées dans l'exécutable à partir des fichiers de ressources de la compilation ; les modifier exige une recompilation ; aucun fichier ni argument de configurationbibliothèque
Applications kernel et stdlibDémarrées à l'amorçage ; kernel a un maître et un superviseur principalChargées et actives sans maîtres : get_supervisor(kernel) vaut undefined, info/0 les liste comme actives avec undefinedbibliothèque
application:ensure_all_started/3 avec concurrentDémarre les applications indépendantes simultanément ; la liste suit l'ordre de finLes démarre l'une après l'autre, dépendances d'abordbibliothèque
application:takeover/2Attend le contrôleur d'applications distribuéesSe termine avec noproc (aucun dist_ac), comme load/2 avec des nœuds dans les deux casbibliothèque
Requêtes d'E/S à un maître d'applicationRelayées au chef de groupe sous lequel l'application a démarréTraitées sur les E/S standardbibliothèque
erlang:process_flag(error_handler, Module)Le runtime appelle Module:undefined_function/3 et undefined_lambda/3 pour les appels non définisbadarg ; process_info/2 rapporte toujours error_handler, et les appels non définis lèvent directement undef (error_handler peut seulement être appelé)bibliothèque
Détails des rapports de plantage (proc_lib)Texte de l'exception d'erl_error avec informations d'erreur étendues ; voisins avec current_function, initial_call et current_stacktrace ; vraies reductionsLigne de classe de l'exception et cadres de pile sans informations d'erreur étendues ; voisins sans ces éléments ; reductions à 0bibliothèque
client_info des rapports d'erreur de gen_server, gen_statem et gen_fsmLe current_stacktrace du processus appelant[] : Clause ne conserve pas la pile courante d'un autre processusbibliothèque
-behaviour avec une valeur qui n'est pas un atomeL'avertissement affiche le terme avec ~w (behaviour [115,116,114] undefined)Affiche le texte source de l'attribut (behaviour "str" undefined) ; l'erreur est la mêmesémantique
module_info(md5) et le vsn qu'OTP en dériveMD5 du code BEAM compiléMD5 du source imprimé du module ; l'entier vsn dérivé diffère en conséquencesémantique
module_info(compile)version de l'application compiler d'OTP, options qui lui ont été donnéesLa version de Clause ; options toujours []sémantique
module_info(functions)Liste aussi les fonctions qu'OTP génère pour les funs ('-f/0-fun-0-'/0)Seulement les fonctions du source et les fonctions prédéfiniessémantique
-nominal dans module_info(attributes)Conservé sous forme {nominal,[{Name,AbstractType,Params}]} au format abstraitOmissémantique
Une fonction d'un module de bibliothèque de Clause que Clause n'a pas implémentée (un BIF erlang, lists:rmerge/2, ...)S'exécuteCompile ; lève error({not_implemented, F, A}) à l'appel, avec M:F/A au sommet de la pile (statuts)bibliothèque, builtins
Import d'un module hors du lotCompile ; l'appel lève undef à l'exécution si le module est absentErreur de compilation unknown module M quand l'import est appelé (les imports inutilisés n'exigent pas le module)sémantique
Avertissement import directive overrides auto-imported BIFPour tout BIF auto-importé de erl_internal:bif/2Seulement pour les BIF auto-importés que Clause implémentesémantique

Cas limites du langage

DifférenceOTPClauseRéférence
Segment entier plus large que la limite des entiers, valeur au-delà (<<V:4194241>> entièrement à un)Le JIT x86 réussit le filtrage avec un terme invalide ; son utilisation fait planter la VMPas de correspondancetermes
Groupe zip dont les générateurs souples et stricts partagent une variableLe test de saut conserve les variables des motifs stricts dans les motifs souplesUne étape rejetée est sautée dès que les motifs stricts correspondent à eux seulsmotifs
Appel d'une fun externe, M:F(Args) ou apply/3 d'un module hors du programmeCharge le module depuis le chemin de code, undef s'il est absentundef ; les modules de bibliothèque ne rejoignent le programme que lorsqu'il les nomme par un atome littéralfuns, bibliothèque
Fichiers sans #! passés comme escriptsescript file.erl saute la première ligneCompilés comme des modules ordinairesexécutables
Escripts beam précompilés et escripts archivesS'exécutentNon pris en chargeexécutables
Nom de module d'un escript sans -module<name>__escript plus un suffixe horodaté/unique<name>__escript, déterministeexécutables
include_lib d'une application trouvée dans plusieurs répertoires <app>-<version>Le chemin de code contient une seule version (le démarrage choisit la plus haute) ; aucun diagnosticLa version la plus haute sous chaque répertoire parcouru, avec un avertissement par exécution qui les listepréprocesseur
Un -spec dont les types n'ont aucune valeur commune avec le résultat inféré, le domaine d'entrée ou les arguments d'un appelCompile ; Dialyzer peut avertirUn domaine d'entrée d'argument contredit est une erreur de compilation indiquant les types déclarés et inférés ; un résultat ou un appel contredit est un avertissement, et les types inférés sont utilisésanalyse sémantique

ETS

DifférenceOTPClauseRéférence
Ordre de first/1, next/2, tab2list/1, foldl/3 et i/1 sur les tables set, bag et duplicate_bag, et ce que numérote slot/2Emplacements de hachage linéaire visités verrou par verrou ; l'ordre change quand la table grossitPartitions, puis compartiments dans l'ordre, puis clés dans l'ordre d'insertion au sein d'un compartiment ; un emplacement est un compartimentruntime
ets:all/0Inclut les tables de kernel et stdlib d'OTP ; ordre des réponses des ordonnanceursSeulement les tables du programme, sans ordre particulierbuiltins
memory d'info/2Mots alloués pour la table et ses objetsMots des objets stockés plus les surcoûts propres à Clausebuiltins
{write_concurrency, auto}Le nombre de verrous s'adapte à la contention (64 à 8192)64 partitions fixes, comme pour true ; stats rapporte 64 verrousruntime
compressedStocke les éléments autres que la clé au format externeAccepté et rapporté ; les objets sont stockés tels quelsbuiltins
stats d'info/2 d'un ordered_set avec write_concurrency ; data ; binaryArbre CA {RouteNodes, BaseNodes, MaxDepth} ; affiche la table ; les binaries hors tas de la tablefalse ; true sans affichage ; []builtins
badarg d'un builtin d'etsPorte error_info avec une cause (id, access, type, ...)Simple badargbuiltins
Ordre des résultats de select, match et match_object sur les tables de hachage, et résultats contenus dans chaque bloc de select/3Résultats de chaque étape du parcours ajoutés en tête, plus récents d'abord ; emplacements de hachage linéaireOrdre de parcours des partitions et compartiments de Clause ; chaque bloc contient les premiers Limit résultats recueillisbuiltins
select_delete/2, select_replace/2 sur une table entièreCèdent la main tous les 1000 objets (table fixée entre-temps)S'exécutent d'un seul tenant, chaque partition sous son verrouruntime
Spécifications de filtrage nommant une variable numérotée 25 ou plusRenumérotent chaque atome '$N' de la spécification, même dans {const, ...} (ainsi {const, '$30'} donne '$0')Les variables gardent leurs numéros ; {const, '$30'} donne '$30'runtime
Guards et corps de spécifications de filtrage imbriqués sur plus de 1000 niveauxCompilent jusqu'à manquer de pile C (system_limit)system_limitruntime
Actions de trace dans erlang:match_spec_test/3 : enable_trace, disable_trace, trace avec des options validesModifient les options de trace de l'appelant (29.1.1 plante sans traceur)true après vérification des options (et qu'un pid argument est vivant) ; rien ne changebuiltins
ets:tab2file/2,3 et file2tab/1,2Via un processus disk_log nommé par une nouvelle référenceÉcrits et lus directement avec filebuiltins
{process_dump} et {current_stacktrace} dans erlang:match_spec_test/3Texte du vidage du processus ; sa trace de pile<<>> ; []builtins

dets

DifférenceOTPClauseRéférence
Requêtes attendant ensemble sur une tableRecherches, insertions et suppressions en attente simultanément partagent une mise à jour du cache ; les recherches reçoivent leur réponse avant les écritures ; une table fixée fait dormir certains rédacteurs 1 msChaque requête à son tour, dans l'ordre d'arrivéebuiltins
Opérations dets longues (réparations, init_table/2,3, compactages, vidages d'un grand cache)Code Erlang, préempté par réductionsUn appel builtin par opération ; le thread de travail de la table ne fait rien d'autre entre-tempsbuiltins
Processus de detsServeur dets et dets_sup sous kernel_safe_sup, tables sous dets_supServeur dets démarré à la première utilisation, sans supervision ; processus des tables liés à luibuiltins
Ordre de dets:all/0Ordre ETS du registreOrdre ETS de Clause (ETS)builtins
RapportsUne réparation est journalisée au niveau info ; verbose/0,1 et DETS_DEBUG journalisent davantage ; une défaillance interne est {dets_bug, ...}Rien n'est journalisébuiltins

io

DifférenceOTPClauseRéférence
~p, ~w et fonctions d'écriture d'io_lib pour des conteneurs imbriqués sur plus de 256 niveauxAffichéssystem_limitio
io_lib:print/4 avec une colonne ou une longueur de ligne qui n'est pas un entierDépend du terme : affiché (les guards échouent silencieusement), function_clause ou badarithbadarith pour tout terme conteneurio_lib
Précision ou nombre de remplissage négatif (~.*c avec -1)Boucle indéfinimentbadargio

erl_scan

DifférenceOTPClauseRéférence
Emplacement d'une continuation de tokens/3,4 (continuation_location/1, non documenté)Là où le scanner s'est arrêté, à l'intérieur du jeton inachevéLe début du jeton inachevé, analysé de nouveau avec les caractères suivantserl_scan
{compiler_internal, [ssa_checks]}Transforme les commentaires de vérification %ssa% en jetonsIgnoré : ils restent des commentaireserl_scan
Flottant dans une base donnée (16#1.8#e1, base autre que 10) dont les chiffres dépassent 53 bitsMantisse convertie comme ERTS convertit les grands entiersAccumulée dans un double ; le dernier bit peut différererl_scan
Élément de liste qui n'est pas un caractère dans une chaîne, un atome entre guillemets ou un échappementfunction_clause, case_clause ou if_clause, selon la clausefunction_clauseerl_scan

erl_parse

DifférenceOTPClauseRéférence
Jetons '%ssa%' (clauses de vérification SSA des tests du compilateur OTP)Analysés en clauses ssa_check_whenErreur de syntaxe ; erl_scan ne produit jamais ce jetonerl_parse

erl_eval

DifférenceOTPClauseRéférence
Trace de pile d'une erreur levée par l'évaluateur ({badmatch, V}, undef d'un appel local, ...)Pile courante du processus d'évaluation (current_stacktrace de process_info/2)Pile au throw de l'évaluateur qui la recueille, dans les cadres de Clauseerl_eval

erl_lint

DifférenceOTPClauseRéférence
Behaviours nommés par -behaviourTout module sur le chemin de code répond à behaviour_info/1Seuls les modules liés dans le programme répondent ; un autre donne undefined_behaviourerl_lint
Ordre de plusieurs erreurs trouvées dans un même parcours de map (variables de type singleton d'un type, specs sans fonction, vérifications de callbacks)Ordre interne de la map (atomes par index)Ordre des termeserl_lint
erlang:is_builtin/3 pour les entrées -deprecated, -removed et -unsafe non exportéesTable des BIF d'OTPBuiltins du runtime, incluant les fonctions natives de bibliothèqueerl_lint
is_guard_expr/1 d'une construction de recordLève case_clauseIndique si les champs sont des expressions de guarderl_lint

epp

DifférenceOTPClauseRéférence
-include_lib("App/...") absent du chemin d'inclusionTrouvé dans code:lib_dir(App), qui connaît les applications d'OTPTrouvé dans code:lib_dir(App) du chemin de code de Clause, qui ne contient aucune application OTP sauf ajout explicitebibliothèque

erl_pp

DifférenceOTPClauseRéférence
Forme des caractères retournés par erl_ppListes de caractères profondément imbriquéesUne liste de caractères plate ; la sortie aplatie est identiquebuiltins

qlc

DifférenceOTPClauseRéférence
Trace de pile d'une exception levée dans un processus curseur, telle que next_answers/1,2 la relanceTrace de pile du curseur suivie de process_info(self(), current_stacktrace) du propriétaireSuivie de la trace de pile d'une exception capturée chez le propriétaire (Clause n'a pas d'élément current_stacktrace)qlc
qlc:q/1,2 dans erl_eval, ets:table/1,2, dets:table/1,2 dans un programme qui ne nomme jamais qlcqlc est toujours chargéundef pour qlc : ces appels l'atteignent par un nom à l'exécution, donc seuls les programmes nommant qlc (tout module incluant qlc.hrl le fait) le lientbibliothèque
Numéros d'annotation dans le code des requêtes compilées (info/2 avec {format, abstract_code})La transformation d'OTP numérote les annotations autour de chaque entier du module, y compris les caractères du chemin de qlc.hrl dans son attribut fileMême transformation, mais le qlc.hrl de Clause a un autre chemin, donc les numéros après la première requête peuvent différer ; le code est autrement identiqueqlc

qlc_pt

DifférenceOTPClauseRéférence
Messages de qlc_pt:parse_transform/2 à l'exécutionIssus de compile:noenv_forms/2 (strong_validation) : erl_lint plus les passes internes du compilateur, comme les avertissements de sys_core_foldIssus d'erl_lint uniquement, comme le fait qlc_pt d'OTP lorsque le compilateur est indisponibleqlc_pt

Shell interactif

DifférenceOTPClauseRéférence
Édition de ligne dans un terminaledlin : touches de déplacement, historique des lignes, recherche, complétion par tabulation via edlin_expand, invite multiligne ..>Édition de ligne propre au terminal (mode canonique) ; les lignes sont lues telles que le terminal les livre, avec la même invite pour chaque ligne supplémentaire d'une commande, comme OTP pour une entrée par tubebibliothèque
Contrôle des tâchesCtrl+G ouvre le menu JCL (shells nouveaux, connectés, interrompus et tués)Aucun ; la bannière et l'indication de commande lente mentionnent toujours Ctrl+G comme OTP les affichebibliothèque
exit(). lorsque le shell lit une entrée par tubeUn nouveau shell démarre et ne lit plus rienUn nouveau shell démarre et lit le reste de l'entréebibliothèque
Programmes démarrant le shell sans --shellTout module du chemin de code peut être appeléSeulement les modules liés par le programme ; sans --keep-exports, les appels dynamiques atteignent uniquement les exports accessibles au programmebibliothèque
Records des modules compilés (rr(Module), shell_default et user_default au démarrage)Lus depuis les informations de débogage ou le source du module{error, nofile} : le code lié ne conserve aucun code abstrait ; rr/1,2,3 les lit depuis les fichiers source et .beambibliothèque
save_module/1Écrit le module et le compile avec c:c/1Écrit seulement le module (aucun compilateur)bibliothèque
edlin_expand:expand/1,2 dans un appel ou une valeur de champ de recordEn-têtes de fonction et types d'arguments issus de la spécification (lists:seq(From, To)), atomes et types permis par celle-ciEn-têtes Mod:Fun/Arity des arités exportées, aucune suggestion de type : le code lié ne conserve aucune spécificationbibliothèque
edlin_expand:expand/1,2 pour les fonctions et modulesFonctions regroupées selon les groupes de la documentation ; modules du chemin de codeUn groupe Functions (aucune documentation) ; modules du programmebibliothèque
Colonnes de c:i/0,1, c:ni/0, c:regs/0Appel initial et fonction courante de chaque processusAppel initial de proc_lib ou undefined ; fonction courante undefined (aucun élément current_function)bibliothèque

Nombres aléatoires

DifférenceOTPClauseResponsable
Hauteurs des bandes de la ziggurat normale de randConstantes tabuléesCalculées au double le plus proche à partir des constantes de la ziggurat ; une hauteur peut différer au dernier bit, ce qui ne change une acceptation du chemin lent que pour un tirage situé dans ce bit de la limite (probabilité proche de 2^-53 par tirage du chemin lent). Les largeurs et les limites des bandes sont observées sur OTP et identiquesbuiltins

crypto

DifférenceOTPClauseRéférence
Ordre de crypto:supports(ciphers)Table du NIF triée par index d'atome, qui varie d'une exécution de la VM à l'autre, puis aliasOrdre de la table d'OTP, puis aliasbuiltins
{File, Line} des erreurs {badarg | notsup | error, {File, Line}, Description} de cryptoFichier source C et ligne d'OTP ({"hash.c", 111})Fichier source C++ et ligne de Clause ({"hash.cpp", 63}) ; classe et description identiques à celles d'OTPbuiltins
link_type de crypto:info/0Manière dont OTP a lié libcrypto (généralement dynamic)Toujours static, même lorsqu'une libcrypto partagée installée est liéeOpenSSL
Longs calculs de pbkdf2_hmac/5 (plus de 100 itérations ou 64 octets)Exécutés sur un ordonnanceur CPU dirtyExécutés sur le thread de travail de l'ordonnanceur du processus appelant, qui n'exécute aucun autre processus entre-tempsbuiltins
modules de l'application crypto[crypto, crypto_ec_curves][crypto]bibliothèque
Textes longs de crypto_one_time/4,5 et crypto_one_time_aead/4,6,7 (plus de 20000 octets)Traités sur un ordonnanceur CPU dirtyTraités sur le thread de travail de l'ordonnanceur du processus appelant, qui n'exécute aucun autre processus entre-tempsbuiltins
Variable d'application fips_mode de cryptoLue au chargement du module crypto : true active le mode FIPSNon lue (Clause n'a pas d'on_load et les programmes n'ont pas de sys.config) : utiliser crypto:enable_fips_mode/1, ou clau --fipscrypto
crypto:info_fips/0 sans fournisseur FIPS chargeablenot_enabled si OTP a été compilé avec la prise en charge FIPS, not_supported sinonnot_supportedcrypto
Moment du chargement de l'application cryptoAu chargement du module crypto (son on_load)Lorsqu'un générateur crypto_cache, crypto_aes ou crypto_prng1 lit rand_cache_size pour la première foisbibliothèque
Génération de clés RSA (crypto:generate_key(rsa, ...)) et signatures SLH-DSAExécutées sur un ordonnanceur CPU dirtyExécutées sur le thread de travail de l'ordonnanceur du processus appelant, qui n'exécute aucun autre processus entre-tempsbuiltins
Option rsa_sslv23_padding de crypto:public_encrypt/4 et fonctions apparentéesAcceptée si OTP est compilé avec un OpenSSL possédant le remplissage SSLv23 (1.1, 3.x)"Bad padding type in option rsa_padding", comme OTP compilé avec OpenSSL 4builtins
crypto:ec_curve/1 pour une courbe absente de la libcrypto liée (OpenSSL compilé sans courbes binaires)Paramètres issus de crypto_ec_curveserror:function_clause, comme pour une courbe inconnue : les paramètres proviennent des courbes intégrées de libcryptobuiltins
Déchiffrement des informations de débogage par beam_lib dans un programme qui n'appelle pas cryptocrypto est toujours présentkey_missing_or_invalid sauf si le programme lie crypto (--with-crypto), car beam_lib l'appelle dynamiquementbibliothèque

ASN.1

DifférenceOTPClauseRéférence
Pile dans {error, {asn1, {Reason, Stack}}}Cadres des fonctions générées enc_*/dec_* et d'asn1rtt_*Cadres de Module:encode/2 ou decode/2 et du builtin du codecasn1
Fonctions d'un module généréExporte aussi enc_Type/1,2, dec_Type/1,2 et les autres fonctions par type générées par asn1ctSeulement encode/2, decode/2, info/0, les fonctions d'options et les fonctions de valeursasn1
Un CHOICE dont le corps commence par ... (aucune alternative racine)asn1ct signale une erreur de syntaxeAcceptéasn1
Macros et fonctions de valeurs nommant une autre valeur dans un type ouvert (mgf1SHA1, rSASSA-PSS-Default-Identifier de PKCS-1)asn1ct laisse {'Externalvaluereference', Line, Module, Name} à la place de la valeurLa valeur référencéeasn1
Erreur du runtime (autre qu'ASN.1) lorsque public_key décode ou encode une valeur d'extensionLevée telle quelle, principalement de classe error, depuis la fonction générée dec_ext-*/enc_ext-*exit({error, {asn1, Reason}}) : la valeur passe par decode/2 ou encode/2 du module généré, qui encapsule tout échecpublic_key
Groupes Diffie-Hellman par défaut de public_key:dh_gex_group/4Groupes générés par OTP (lib/public_key/priv/moduli), 60–81 par tailleHuit par taille issus du fichier moduli d'OpenSSH ; mêmes tailles (2047 à 8191)public_key
Cadres d'une exception de public_keypublic_key, pubkey_pem, pubkey_pbe, pubkey_cert_records, pubkey_cert, pubkey_sshpublic_key, clause_public_key_codec et clause_public_key_keyspublic_key

Parse transforms

DifférenceOTPClauseRéférence
Nom dans l'attribut file d'un fichier inclus (--print-abstr, entrée d'une transformation)Le répertoire d'inclusion joint au nom, tel que trouvé (inc.hrl, /abs/dir/inc.hrl, ../inc/x.hrl)Le chemin relatif au répertoire de travail quand le fichier s'y trouve, sinon le chemin absolutransformations
Annotations de ligne 0 des formes importées (code généré, comme par la transformation qlc)Ligne valide : le code n'a pas de ligne sourceLe code prend la place du nœud importé avant luitransformations
Annotations generated des formes importées (entrées .abstr, sortie d'une transformation)erl_lint et le compilateur omettent certains avertissements pour le code généréIgnorées : le code est vérifié comme du sourcetransformations
Formes {error, {Location, Module, Descriptor}} dans du code importéFormatées avec Module:format_error/1Le texte du terme du descripteur ; le formatage nécessite OTPtransformations
Un module avec des erreurs de préprocesseur ou d'analyse syntaxique qui nomme une parse transformLa transformation s'exécute et reçoit les erreurs sous forme de formes {error, E} ; erl_lint les signale ensuiteLes erreurs sont signalées et la transformation ne s'exécute pastransformations
Options de compilation reçues par une transformationLa liste complète des options d'erlc{features, _}, report_warnings, report_errors, {cwd, _}, {outdir, _} (le répertoire de travail), {i, _}, {d, ...} et {parse_transform, _}transformations