Clause
← Gesamte Dokumentation

Das englische Original wurde seit dieser Übersetzung geändert, daher können Teile davon veraltet sein. Auf Englisch lesen

Übersetzt aus dem englischen Original · 1e3a39c8-dirty · 2026-10-26

Unterschiede zu Erlang/OTP

Beobachtbares Verhalten, bei dem Clause bewusst vom festgelegten OTP 29 (maint-29, siehe otp-reference.md) abweicht. Jeder Eintrag verweist auf den Vertrag, dem er gehört. Ein Eintrag wird entfernt, sobald der Unterschied behoben ist. Noch nicht implementierte Features (gemeldet als notimpl) sind hier nicht aufgeführt; siehe features.md und den Plan.

Maps

UnterschiedOTPClauseZuständig
Reihenfolge des Map-Generators (K := V <- M)Flache Maps (bis zu 32 Schlüssel) werden in Schlüsselreihenfolge durchlaufen, Atom-Schlüssel jedoch in Atomtabellen-Reihenfolge, die zwischen VM-Läufen variiert; größere Maps in Hash-ReihenfolgeImmer kanonische Schlüsselreihenfolge (Term-Ordnung)Muster
bad_generators-Nutzlast eines Map-Generators in einer Zip-GruppeSein Iterator: {K, V, Next}-Kette, die mit none endet, in der Reihenfolge von OTPDieselbe Kette, in kanonischer Schlüsselreihenfolge aufgebautMuster
maps:iterator/1,2, maps:next/1, erts_internal:map_next/3, die Ausführungsreihenfolge von maps-funs (intersect_with/3, merge_with/3, ...), proplists:get_keys/1, sets der Version 2 (to_list/1, fold/3)Interne Reihenfolge (Atomtabellen-Reihenfolge für Atom-Schlüssel, Hash-Reihenfolge über 32 Schlüssel); ein Iterator ist eine Position oder eine {K, V, Next}-KetteKanonische Schlüsselreihenfolge; ein Iterator läuft über eine Schlüsselliste weiterBuiltins
Ausgabe von Maps (erlang:display/1, ~w, ~p)Reihenfolge des internen Layouts (Atomtabellen-Reihenfolge für Atom-Schlüssel, Hash-Reihenfolge über 32 Schlüssel)Reihenfolge der Map-Schlüssel, wie ~kw von OTPTerme
Reihenfolge von digraph:vertices/1, edges/1, source_vertices/1, sink_vertices/1 sowie der Ordnungen und Komponenten von digraph_utils, soweit sie von diesen Listen ausgehenHash-Reihenfolge der Knoten- und KantentabellenHash-Reihenfolge von Clause (ETS); Pfade und Nachbarlisten folgen bei beiden der Einfügereihenfolge der Kantenbuiltins
Reihenfolge von maps:keys/1, values/1, to_list/1, fold/3, der von json:encode/1 geschriebenen Elemente, der von erl_parse:abstract/1,2 einer map zugewiesenen Felder sowie der Knotenlisten und Durchläufe von graphDie interne Reihenfolge der Map (Atomtabellen-Reihenfolge für Atom-Schlüssel, Hash-Reihenfolge über 32 Schlüssel)Schlüsselreihenfolgelibrary
Ausgabe nativer Records (erlang:display/1)Felder in der Reihenfolge der Atomtabellen-IndizesDefinitionsreihenfolge, wie ~wNative Records
== zwischen nativen Records, deren Felder sich nur als Ganzzahl/Gleitkommazahl unterscheidenDer Compiler kann es zu =:= falten (false)Numerischer Vergleich (true)Native Records
Externe Konstruktion eines nativen Records eines nicht geladenen ModulsScheitert, bis das definierende Modul geladen istJedes Modul des Batches wird beim Start geladen; ein Modul außerhalb des Batches scheitert immerNative Records
Ausgabe lokaler Funs (#Fun<M.Index.Uniq>)Index aus der Lambda-Nummerierung des Compilers, Uniq ein Hash des ModulcodesIndex der lokalen Funs des Moduls in Quelltextreihenfolge, Uniq immer 0Funs
Ordnung zweier lokaler Funs eines ModulsNach dem Index von OTPNach dem Index in Quelltextreihenfolge, sodass Funs verschiedener Funktionen anders geordnet sein könnenFuns
Namen anonymer Funs in Stacktraces (-f/1-fun-N-)N aus der Nummerierung des CompilersN zählt die Funs von f/1 in QuelltextreihenfolgeFuns
Eine anonyme Fun im Standardwert eines Record-FeldsJede Konstruktionsstelle expandiert ihre eigene Kopie: Funs von zwei Stellen sind ungleichEine Fun für den Standardwert: Funs von jeder Konstruktionsstelle sind gleichFuns
Reihenfolge der erfassten Werte von Funs, die in Comprehensions erzeugt werdenFreie Variablen der von der Comprehension erzeugten FunktionDefinitionsreihenfolge in der umschließenden Funktion; nur sichtbar beim Vergleich zweier solcher FunsFuns

Pids, Referenzen und Prozesse

UnterschiedOTPClauseZuständig
Einmalige und periodische Timer von timer, außer Sendungen an lokale PidsVom Prozess timer_server ausgeführt, der bei der ersten Verwendung unter kernel_sup startet; die Signale von exit_after/2,3 kommen von ihmKein Timer-Server: Jeder Timer ist ein eigener Prozess, der das Signal von exit_after sendet; cancel/1 kehrt zurück, bevor dieser Prozess die Stornierung gesehen hatbuiltins
Pid-NummernDer erste Benutzerprozess ist etwa <0.80.0>; Nummern werden wiederverwendet, nachdem die Pid-Tabelle überläuftDer erste Prozess ist <0.1.0>; Nummern stammen aus einer Sequenz und werden nie wiederverwendetTerme
Code nach spawn(Fun) einer Fun anderer StelligkeitDie Typanalyse des Compilers kann den Code nach dem Aufruf als unerreichbar ansehen und entfernen, sodass der Aufrufer sofort die Pid zurückgibtDer Aufrufer läuft weiter; nur der neue Prozess schlägt mit {badarity, {Fun, []}} fehlProzesse
Stack eines function_clause, das ein lists-Builtin auslöst (lists:sublist/2, lists:max/1, ...)Der oberste Frame ist die Erlang-Funktion, oft eine interne Hilfsfunktion (lists:sublist_2/2), mit ihren ArgumentenDer Aufrufer liegt oben: Builtins legen keinen Frame anBuiltins
Letztes Bit von math-Ergebnissen (math:erfc(1), ...)Die C-Bibliothek, mit der OTP gebaut wurdeDie C-Bibliothek, die Clause-Programme linken (Windows: 0.15729920705028513 für erfc(1), OTP 0.1572992070502851)Builtins
Ergebnis von binary:compile_pattern/1{bm, Ref} oder {ac, Ref} mit einer opaken Referenz{bm, [Pattern]} oder {ac, Patterns}Builtins
binary:referenced_byte_size/1 eines Sub-BinarysDie Größe des Binarys, in das es verweistSeine eigene GrößeBuiltins
Speicher ersetzter oder gelöschter persistenter TermeIm Hintergrund von einem Literalbereichs-Speicherbereinigungsprozess freigegeben, der jeden Prozess den Wert herauskopieren lässtJeder Prozess kopiert ihn bei seiner nächsten Zeitscheibe heraus (geparkte sofort durch put/erase), dann wird der Bereich freigegeben; kein SpeicherbereinigungsprozessRuntime
In Nachrichten gesendete persistente TermeBleiben wie Literale gemeinsam genutzt: Der Heap des Empfängers wächst nichtWie jeder andere Term in den Heap des Empfängers kopiertruntime
persistent_term:info/0 und get/0Enthalten die Terme, die kernel und stdlib von OTP beim Start speichern (26 unter OTP 29)Nur die eigenen Terme des ProgrammsBuiltins
code:is_loaded/1, code:which/1, code:all_loaded/0 eines kompilierten ModulsDie .beam-Datei, aus der es geladen wurdepreloaded: Jedes Modul ist in die ausführbare Datei gelinktBuiltins
Option priority von send/3, link/2, exit/3, exit_signal/3Priorisierte Nachrichten und Signale überholen gewöhnlicheAkzeptiert; als gewöhnliche Nachrichten und Signale zugestelltprocesses
spawn/2,4, spawn_link/2,4, spawn_monitor/2,4 mit Angabe eines anderen KnotensEine Warnmeldung ** Can not start ... on Node ** wird protokolliertKeine Ausgabe; die nutzlose Pid endet weiterhin mit noconnectionprocesses
Flags von system_flag/2 außer backtrace_depth und min_heap_size (fullsweep_after, schedulers_online, multi_scheduling, max_heap_size, ...)Ändern den EmulatorOhne Wirkung geprüft und zurückgelesen; system_logger beginnt als undefined (kein Logger-Prozess); cpu_topology, erts_alloc, scheduler_bind_type ergeben badargbuiltins
Timer eines suspendierten Prozesses (receive ... after, send_after/3 und start_timer/3 an seine Pid)Mit dem Prozess suspendiert, bis er fortgesetzt wird (OTP 28, 29)Laufen weiter: Ein während der Suspendierung abgelaufenes Zeitlimit wird beim Fortsetzen des Prozesses behandelt; eine Timer-Nachricht wartet in seiner Mailboxprocesses
Ausgabe von process_display/2Stack-Dump von OTP mit Adressen und Stack-PlätzenEin Module:Function/Arity pro Frameprocesses
process_flag(save_calls, N)Speichert die letzten N Aufrufe für process_info(Pid, last_calls)Gespeichert und zurückgelesen; keine Aufrufe werden gespeichertprocesses
adler32_combine/3, crc32_combine/3 mit einer zweiten Größe über 2^31 - 1 unter WindowsKombiniertbadarg (z_off_t von zlib ist dort 32 Bit breit)builtins
init:get_arguments/0, init:get_argument/1Die Flags des Emulators: root, bindir, progname, home und jedes -Flag der BefehlszeileNur home; eine ausführbare Datei hat keine Emulator-FlagsBuiltins
init:script_name/0, init:script_id/0Der Pfad des Boot-Skripts und {"Erlang/OTP", "29"}Der absolute Pfad der ausführbaren Datei und {"Clause", "29"}Builtins
init:get_status/0, init:ensure_loaded/1 im Einstieg{starting, started} und Laden von Code, während escript-, -s- oder -eval-Code beim Start läuft; {started, started} und not_allowed nach dem StartImmer die Antworten für den gestarteten ZustandBuiltins
init:stop/0,1, init:reboot/0Geben ok zurück; init fährt dann die Anwendungen herunter und hält an, während der Aufrufer weiterläuftHalten sofort an; der Aufruf kehrt nie zurückBuiltins
init:get_argument(home) unter Windows ohne HOMEDRIVE/HOMEPATHDer Profilordner der ShellUSERPROFILE, normalerweise derselbe OrdnerBuiltins
erlang:halt(Slogan), init:stop(Slogan)Gibt den Slogan aus, schreibt erl_crash.dump ins aktuelle Verzeichnis und meldet das auf stderr; Exit-Status 1Gibt den Slogan auf stderr aus, schreibt keinen Crash-Dump; Exit-Status 1Ausführbare Dateien
init:restart/0,1, init:boot/1, init:make_permanent/2Starten das System im selben Knoten neu, booten es oder setzen das Boot-Skript des nächsten NeustartsAbgelehnt: Fehler notsup, {error, notsup} von make_permanent/2Builtins
Stelligkeit von atomics:new/2Jede positive Ganzzahl, die der Allokator bedienen kann; eine riesige beendet den Knoten mit einem Crash-Dump1 bis 2^27, sonst badargBuiltins
counters mit write_concurrencyZähler pro Scheduler, beim Lesen summiert; der Speicher in info/1 wächst mit der Anzahl der SchedulerEin Atomics-Array; der Speicher in info/1 ist der des ArraysBuiltins
erts_internal:term_type/1Die interne Darstellung: flatmap oder hashmap, heap_binary, refc_binary oder sub_binary, ...Jede Map flatmap, jeder Bitstring sub_binaryBuiltins
erl_prim_loader:get_path/0Der Boot-Codepfad["."] bis set_path/1Ports
file:read_link_info/1,2 eines symbolischen Links unter WindowsDie eigenen Reparse-Point-Daten des LinksGröße und Zeiten des Ziels mit Typ symlinkPorts
inet:gethostbyname/1,2Der kanonische Name und die Aliase des Resolvers (inet_res, Hosts-Datei, nativ)Der angefragte Name und keine Aliase; Adressen vom System-ResolverPorts
Modul socketDie Socket-NIF-APIFehlt: Ein Verweis ist ein Kompilierfehler; stattdessen gen_tcp, gen_udp, inet verwendenlibrary
net:getifaddrs/1,2 mit einem Namensraum, inet:getifaddrs([{netns, _}])net ruft sich endlos selbst auf (OTP 29); inet liest unter Linux den Namensraum{error, enotsup}builtins
Ausgabelisten von zlibEin Binary pro internem Block, verschachtelt, wo ein Stream endete und neu begannEin Binary pro Aufruf, [], wenn es keines gibt; die Bytes sind die von OTPBuiltins
zlib:safeInflate/2 und lange zlib-AufrufeKehren nach einer begrenzten Ausgabemenge zurück ({continue, Output}) und geben abEntpacken alle eingereihten Eingaben in einem Aufruf ({finished, Output}); ein langer Aufruf belegt seinen Scheduler-ThreadBuiltins
Lange re-Matchesre:run/3 und die globale Schleife geben nach einer begrenzten Arbeitsmenge abEin Match läuft bis zum Ende und belegt seinen Scheduler-Thread; ein globaler Lauf gibt nur zwischen Matches abBuiltins
re:compile/2 mit export, re:import/1Ein exportiertes Muster {re_exported_pattern, ...}, das ein anderer Knoten importiertexport ist badarg; import/1 löst {not_implemented, import, 1} ausBuiltins
Argumentfehler von rebadarg, ausgelöst von re:run/3 (oder replace, split) mit den Argumenten des Aufrufers und error_infobadarg, ausgelöst von der re-Hilfsfunktion, die das Argument abgelehnt hat, mit deren ArgumentenBuiltins
code:is_sticky/1true für Module von kernel, stdlib und compiler sowie für die Module der von code:stick_dir/1 angegebenen VerzeichnisseImmer false; stick_dir/1 prüft nur, ob sich das Verzeichnis auflisten lässtbuiltins
code:root_dir/0 und der anfängliche CodepfadInstallationsverzeichnis von OTP; der Pfad enthält dessen Verzeichnisse lib/*/ebinVerzeichnis der ausführbaren Datei; der Pfad enthält die ebin-Verzeichnisse von lib/ daneben und von ERL_LIBS, dann "."builtins
code:load_file/1, load_abs/1, load_binary/3, atomic_load/1, prepare_loading/1 mit gültigem ObjektcodeLaden das Modul{error, badfile}: Jedes Modul ist in die ausführbare Datei gelinkt (D01)builtins
code:coverage_support/0 und die Abdeckungsfunktionentrue mit dem JIT; Abdeckungsmodi und Zählerfalse; die anderen lösen badarg aus, wie OTP ohne Unterstützung für Abdeckungbuiltins
code:get_doc/1 eines im Programm vorhandenen ModulsSein Dokumentationsblock nach EEP 48{error, missing}: Ausführbare Dateien betten keine Dokumentation einbuiltins
Formatieren eines großen Terms (io:format/1,2)Läuft in Erlang-Code (io_lib) und im Group Leader, sodass der Prozess während des Formatierens verdrängt werden kannLäuft in einem Builtin-Aufruf bis zum Ende; andere Prozesse wartenBuiltins
Flags von process_flag/2trap_exit, priority, message_queue_data, min_heap_size und weitereNur trap_exit und min_heap_size; jedes andere Flag löst badarg ausProzesse
Reihenfolge der Fehlerberichte gleichzeitig abstürzender ProzesseLogger-ReihenfolgeDie Reihenfolge, in der ihre Worker sie beendenProzesse
Exit-Signale (exit/2, exit_signal/2) an einen Prozess, der auf einem anderen Scheduler läuftIn seine Signalwarteschlange eingereiht und später behandelt, während der Sender weiterläuftDer Sender wartet, bis die Zeitscheibe des Ziels endet, und handelt dann sofort; nur als Zeitverhalten beobachtbar (Nachrichten werden gepuffert, und der Sender läuft weiter)Prozesse
term_to_binary/1 einer lokalen Fun oder eines nativen RecordsKodiert (NEW_FUN_EXT, ...)error:notsup; fun M:F/A wird kodiertBuiltins
term_to_binary/1 einer Map mit mehr als 32 SchlüsselnHash-Reihenfolge, außer mit deterministicImmer Schlüsselreihenfolge (die Bytes von deterministic)Builtins
binary_to_term/1 der Pid, des Ports oder der Referenz eines anderen Knotens; Option local von term_to_binary/2Externe Identitäten; Kodierung LOCAL_EXTbadargBuiltins
Zeitgrenze von TimernHängt von der nativen Zeiteinheit ab (etwa 2^49.7 ms unter Windows)Relative Zeit 0..2^49-1 ms auf jeder PlattformProzesse
unique_integer/0,1 ohne positiveKann negativ seinImmer positiv und steigendBuiltins
Elemente current_function, initial_call, current_stacktrace, ... von process_info/2Gemeldeterror:{notsup, Item}; process_info/1 lässt sie wegProzesse
reductions von process_info/2; reductions, garbage_collection, io von statistics/1Gezählt0 (nicht geführt)Builtins
garbage_collect/0,1,2Bereinigt vor der RückkehrBereinigt am nächsten Safepoint des ZielsProzesse
erlang:system_info(machine) und damit ?MACHINE von epp und das dadurch benannte Makro"BEAM", 'BEAM'"Clause", 'Clause'builtins
erlang:system_info(schedulers) eines mit einer Affinitätsmaske gestarteten Programms (start /affinity, taskset)Ein Scheduler pro logischem Prozessor des Hosts (32 bei einer Maske für 7 CPUs), schedulers_online einer pro CPU der MaskeBeide einer pro CPU der Maske: Clause startet nur die aktiven Workerprocesses
Tuning-Optionen von spawn_opt/2..5 (priority, min_heap_size, ...)AngewendetGeprüft und akzeptiert, nicht angewendetProzesse
hibernate/3Verwirft den Stack; der Prozess endet, wenn M:F zurückkehrtBehält den Stack; das Ergebnis von M:F kehrt zum Aufrufer von hibernate/3 zurückProzesse
monitor(port, Item, Options) mit OptionenAkzeptiertbadargProzesse
spawn_request_abandon/1true, solange die Antwort ausstehtImmer false: Die Antwort wird gesendet, bevor spawn_request zurückkehrtProzesse
Letztes Bit von math:log2/1 (Windows)Der Windows-Build von OTP teilt log(X) durch log(2) (math:log2(1.0e308) ist 1023.1538532253077)log2 der C-Bibliothek (1023.1538532253076)Builtins
phash/2, phash2/1,2 von Pids, Ports, Referenzen, funs und native recordsHashes der Prozess-, Port- und Referenznummern von OTP, des Index und der eindeutigen Nummer einer fun, des Hashs einer record-DefinitionHashes der Nummern von Clause, des Moduls, der Stelligkeit oder des Index und der eingefangenen Werte einer fun, der Feldwerte eines record; jeder andere Term hat den Hash-Wert von OTPBuiltins
dict:fold/3, map/2, filter/2 mit einer Nicht-funfunction_clause oder {badfun, F}, wenn der erste von OTP besuchte Bucket einen Eintrag enthältfunction_clauseBuiltins
erlang:is_builtin/3 von lists:reverse/2 und anderen in C implementierten Bibliotheksfunktionentruefalse: nur die Builtins der Runtime und apply/2,3Funs
pid, uniq, new_uniq von fun_info/1,2 einer lokalen FunPid des Erzeugers, Prüfsummen des Compilersundefined, MD5 des ModulnamensFuns
Kontext von md5_init/0Der 92-Byte-Zustand von OTPClauses 96-Byte-Zustand; die Digests sind gleichBuiltins
erlang:delete_module/1 eines geladenen ModulsMacht seinen Code alt (true)error:notsup: Gelinkter Code bleibtBuiltins
erlang:prepare_loading/2Bereitet ein gültiges BEAM-Binary vorImmer {error, badfile}Builtins
erlang:pre_loaded/0Die vorgeladenen Boot-ModuleJedes Modul des ProgrammsBuiltins
list_to_pid/1 einer nie vergebenen NummerGibt einen Pid-Term zurückbadarg: Nur von diesem Programm erzeugte Pids werden zugelassenTerme
list_to_port/1 einer nie vergebenen NummerGibt einen Port-Term zurückbadarg: Nur von diesem Programm geöffnete Ports werden zugelassenPorts
Werte von port_info/1,2id ist ein Tabellenindex; memory, queue_size, locking beschreiben den Treiberid ist die Port-Nummer; memory und queue_size sind 0; locking ist port_levelPorts
Schreiben in eine nur zum Lesen geöffnete Datei{error, eacces} unter Windows, {error, ebadf} anderswo{error, ebadf} überallPorts
Port von win32regDer eingelinkte Port registry__drv__ ({spawn, "registry__drv__ rw"}), der Befehle mit Port-Nachrichten beantwortetDer Treiber clause_registry ({spawn_driver, ...}), der dieselben Antworten über port_control/3 liefert; port_info/2 nennt ihn clause_registryports
Programmname von argparse ohne die Option prognameprogname des Emulators (erl)Name der ausführbaren Datei ohne Erweiterung (init hat kein progname)library
Oberster Stack-Frame eines Fehlers bei der Befehlsvalidierung von argparseDie validierende Funktion (argparse:validate_command/2, validate_option/2, eine fun darin) mit [Entity]argparse:validate/2 mit [Entity]builtins
escript:script_name/0Pfad des Escripts, das erste einfache ArgumentPfad der ausführbaren Datei: Ein Clause-Programm ist sein eigenes Skriptlibrary
escript:extract/2 mit compile_sourceDer zu einer beam-Datei kompilierte Quelltext{error, {compile, ...}}: Clause-Programme haben keinen Compilerlibrary
erl_abstract_code:debug_info(core_v1, ...) (Core Erlang von beam_lib)Core Erlang vom Compiler{error, failed_conversion}: Clause-Programme haben keinen Compilerlibrary
zstd:get_frame_header/1 eines abgeschnittenen Frame-HeadersDie Felder nicht initialisierten SpeichersDie Felder auf null ('ZSTD_frame', Größen 0)builtins
file:open/2 mit raw oder ramEin im Aufrufer bedienter record #file_descriptor{} (is_pid/1 ist false); io-Anfragen darauf scheitern; eine ram-Datei hat kein read_line/1 (undef), und eine geschlossene antwortet mit {error, einval}Eine Dateiserver-Pid wie bei anderen Dateien; positionierte Ein-/Ausgabe und sendfile/5 antworten wie bei den raw-Dateien von OTP; eine ram-Datei beantwortet read_line/1 und Ein-/Ausgabeanfragen mit {error, enotsup}, nach dem Schließen mit {error, terminated}ports
file:truncate/1 auf einer nur zum Lesen geöffneten DateiDer Fehler der Plattform (eacces unter Windows, einval anderswo)Der Fehler der C-Runtime für den Deskriptor (ebadf oder einval); der Server stoppt wie bei OTPports
Mit {utf16, _} oder {utf32, _} geöffnete oder darauf gesetzte DateienZeilen und Zeichen in der Kodierung dekodiertZeilen enden vor dem Dekodieren an einem Byte 10ports
Sequenzen von io_ansi unter Linux und macOSAus der terminfo-Datenbank von TERM, soweit sie die Fähigkeit enthält (setaf, sgr0, ...); tput/1,2, tigetnum/1, tigetflag/1, tinfo/0 lesen sieDie eingebauten ANSI-Sequenzen, die OTP ohne terminfo verwendet (wie OTP unter Windows); tigetnum/1, tigetflag/1, tinfo/0 antworten mit {error, enotsup}, tput/1,2 lösen {enotsup, Capability} aus; enabled/0,1 verlangt ein TERM ungleich dumblibrary
io_ansi:scan/1 und tput/1,2 unter WindowsScheitern mit try_clause am {error, enotsup} von terminfoscan/1 matcht die eingebauten Sequenzen; tput/1,2 lösen {enotsup, Capability} auslibrary
socket unter Windows: recvmsg, sendmsg, sendfile, sendmmsg, recvmmsgLösen notsup ausFunktionieren wie unter Linux und macOSlibrary
socket unter Windows: ein Datagramm länger als die Länge von recv{error, {completion_status, ...more_data...}}Das abgeschnittene Datagramm, wie anderswolibrary
socket unter Linux und macOS: ioctl/2,3,4, getopt_native/3, setopt_native/3, open/1,2 eines Deskriptors, Domäne local, SCTPUnterstütztWie von OTP unter Windows abgelehnt ({error, {invalid, ...}}, notsup); local ergibt {error, eafnosupport}library
socket:info/1, i/0,1,2Zähler und Zustände des NIF, fd ist der DeskriptorZähler der erfolgten Aufrufe, Zustände wie vom Modul geführt; Fd ist die Port-Nummerlibrary
Antworten von inet_resAntworten von gethostbyname, getbyname und gethostbyaddr werden nach TTL in inet_db zwischengespeichert; eine zwischengespeicherte Abfrage kann Adressen anders anordnenNichts wird zwischengespeichert: Jede Abfrage fragt die Nameserverlibrary
Resolver-Konfiguration unter Linux und macOSinet_db liest auch host.conf/nsswitch.conf und inetrc-Dateien, verfolgt Änderungen an resolv.conf und leitet unter Linux die Domäne aus dem Hostnamen abDie Zeilen nameserver, domain und search von resolv.conf und die Hosts-Datei, einmal gelesenlibrary
os:set_signal(Signal, handle) (Linux, macOS)Das Signal geht an erl_signal_server, dessen Standard-Handler das System bei sigterm stoppt und bei sigusr1 und sigquit anhältKein erl_signal_server: sigterm und sigquit beenden mit Status 0, sigusr1 mit Status 1, andere werden verworfen; ohne set_signal behält SIGTERM die Standardaktion des Systemsports
Leere Argumente von {spawn_executable, F} unter WindowsAus der Befehlszeile entferntAls "" übergebenPorts
{exit_status, S} und eof eines gestarteten ProgrammsUnbestimmte Reihenfolge, exit_status kann vor den letzten Daten ankommenNach allen Daten, vor eofPorts
Ausgelastete PortsEin Port mit zu viel ausstehender Ausgabe suspendiert Sender, Socket-Ports eingeschlossen; force von port_command/3 funktioniert bei Treibern, die es erlaubenNur Ports gestarteter Programme werden ausgelastet; fd- und Socket-Ports nie; force löst bei jedem Treiber notsup ausPorts
{active, N} von SocketsEine Ganzzahl N zählt Nachrichten bis {tcp_passive, S}exit(badarg); nur true, false und oncePorts
Socket-Optionen von inet_drv selbst (header, deliver, exit_on_close, send_timeout, send_timeout_close, delay_send, Wasserstandsmarken, packet_size, show_econnreset, buffer, read_packets, recvtos, recvttl, line_delimiter)AngewendetMit den Standardwerten von OTP gespeichert und von getopts/2 gemeldet, ohne Wirkung; die Systemoptionen (nodelay, keepalive, linger, Puffer, tos, Multicast, ...) werden angewendetports
Andere Socket-Optionen ({packet, line | http | ...}, {raw, ...}, bind_to_device, netns)Funktionierenexit(badarg) beim Öffnen, {error, einval} von setopts/2 und getopts/2ports
inet:getopts(S, [multicast_if]) unter WindowsLiest bei einem TCP-Socket nicht initialisierten Speicher und nach dem Setzen bei einem UDP-Socket die Any-AdresseDer Systemwert; die Any-Adresse, wenn der Socket keine hatports
port_info(Socket, input | output), input und output von inet:info/1Die Bytes der Treiberbefehle und Antworten0: Socket-Verkehr wird nur von inet:getstat/1,2 gezähltports
Socket-FehlergründeJeder POSIX-Grund, den das System meldetDie gängigen (econnrefused, eaddrinuse, econnreset, etimedout, ...); andere sind eioPorts
Port-Eingabe, während der verbundene Prozess 1.024 Nachrichten hält und laufen kannLiest und liefert weiterLiefert nicht mehr, bis die Zeitscheibe des Prozesses endet; ab 64 KiB gehaltener Daten wird nicht mehr gelesen, sodass das schreibende Programm blockiertPorts
gen_tcp:close/1 mit ausstehender AusgabeWartet bis zur Einstellung linger/send_timeout, bis die Ausgabe gesendet istKehrt sofort zurück; der I/O-Thread sendet die ausstehende Ausgabe und schließt dannPorts
Typen von monitor/2process, port, time_offsetprocess und port; time_offset löst badarg aus (keine Änderungen des Zeitversatzes)Prozesse
exit/2, exit_signal/2 an eine ReferenzSendet an den Prozess-Alias, falls die Referenz ein aktiver istNichts: Exit-Signale gehen nie an AliaseProzesse
ReferenznummernMischen eine Scheduler-Kennung und Zähler pro Scheduler (#Ref<0.178111994.4235460610.214105>)Ein programmweiter Zähler (#Ref<0.0.0.1>), sodass Referenzen nach Erzeugung geordnet sindTerme

Fehler, Stacktraces und Berichte

UnterschiedOTPClauseZuständig
Orte im Stacktrace[{file, F}, {line, L}], error_info für error/3Immer []; kein error_info, sodass erl_error:format_exception/3,4 dafür keine Orte oder Zeilen *** argument zeigtABI
erlang:raise/3 mit Stack-Einträgen {Fun, Args}AkzeptiertAbgewiesenABI
Oberster Frame bei function_clauseArgumentlisteStelligkeitABI
Oberster Frame bei undef eines Aufrufs M:F(A1, ..., An){M, F, [A1, ..., An], []}{M, F, N, []}: Die Stelligkeit anstelle der Argumente (apply/3 und fun-Aufrufe zeigen die Argumente)funs
Dynamischer Aufruf eines Exports, den eine ausführbare Datei nicht erreichen kann (sein Modul wird nur über einen Stacktrace, eine Ausnahme oder eine Nachricht von außerhalb des Programms benannt)Ruft ihn aufundef, außer beim Bauen mit --keep-exports; function_exported/3 und module_info(exports) führen ihn trotzdem aufAusführbare Dateien
Frames fehlschlagender BIFs/OperatorenVorhanden ({erlang, '+', Args, ...})Fehlen; nichts unterhalb der EinstiegsfunktionABI
Atomtabelle voll (list_to_atom/1)Der Emulator bricht ab (no more index entries in atom_tab) und schreibt einen Crash-Dumpclau: runtime failure: entry call failed: resource_limit, Exit-Code 70Builtins
list_to_integer/1,2 mit Zeichen über 255Die ersten Ziffern verwenden nur das niedrige Byte jedes Zeichens ([16#131] ist 1)badargBuiltins
erlang:function_exported/3 eines BIFWahr für jedes BIF des EmulatorsNur wahr für die Builtins, die diese Runtime bereitstelltBuiltins
Fehlerberichte abgestürzter ProzesseAn den Logger gesendet, später von dessen Standard-Handler geschrieben (unter erl auf die Standardausgabe, oft verloren, wenn ein Escript vorher anhält)Auf stderr geschrieben, wenn der Prozess endet, vor jeder späteren Ausgabe; kein logger-Ereignis, daher für Handler und Filter nicht sichtbarprocesses
Aufrufe von Funktionen, die nie zurückkehrenAls Endaufrufe kompiliert (Aufrufer fehlt im Trace)Gewöhnliche Aufrufe (Aufrufer vorhanden)ABI
Ausnahmen innerhalb einer bekannten anonymen fun bei -O2 (F = fun ... end, F(X), lists:map(fun ... end, L) und die anderen Listenschleifen, maps:fold(fun ... end, A, M))Frames der fun (-f/1-fun-0-) und der Hilfsfunktionen von lists und maps (lists:map_1/2)Der Rumpf der fun läuft im Aufrufer eingebettet: Diese Frames fehlen, und ein unechter Listenrest bei map/2, foldl/3, all/2, any/2, flatmap/2 löst function_clause mit dem Aufrufer oben ausfuns
Hostspeicher erschöpftDer Emulator meldet, dass er keinen Speicher allozieren kann, schreibt einen Crash-Dump und stopptclau: runtime failure: entry call failed: out_of_memory, Exit-Code 70, kein DumpRuntime-Heap
Speicherung von Maps mit mehr als 32 SchlüsselnEin HAMT auf dem Heap aus Knoten mit 16-facher Hash-VerzweigungEin B+-Baum auf dem Heap mit bis zu 16 Einträgen pro Knoten in Schlüsselreihenfolge; Heap-Größen großer Maps weichen von denen in OTP abRuntime-Heap
Speicherobergrenze pro Prozessmax_heap_size (in Wörtern, Heap und Stack) beendet den Prozess mit Grund killed und protokolliert einen Fehlerbericht--max-heap / --max-stack (Bytes) und das runtimeweite --max-memory lassen den anfordernden Prozess mit resource_limit fehlschlagen: clau: runtime failure: entry call failed: resource_limit, Exit-Code 70Runtime-Heap
Programmargumenteescript übergibt jedes Argument an main/1; Emulator-Flags (+t) kommen aus %%! oder ERL_FLAGSFührende Runtime-Optionen (--max-atoms, --max-heap, --max-stack, --max-memory, --min-heap-size, --args-file, --) werden zuerst herausgenommen; CLAUSE_FLAGS enthält dieselben OptionenAusführbare Dateien
Nicht abgefangene Ausnahme in einem gewöhnlichen Einstiegsmodulescript endet mit 127Endet mit 1 und einer Zeile uncaught exception <class>: <reason> (Escript-Quellen behalten 127)Ausführbare Dateien
Compiler-DiagnosenWortlaut von erl_lint (variable 'X' is unbound) und WarnungenEigener Wortlaut (unbound variable X); OTP-Lint-Warnungen werden größtenteils nicht ausgegeben (auch Warnungen zu nativen Records: unbekannte Felder in Zugriff, Aktualisierung und Mustern, qualifizierte Konstruktion im eigenen Modul ohne Werte, ungenutzte oder in Headern definierte Records; ein späteres Muster, das einen aus einem Zweig exportierten Namen matcht)Semantik
Behaviour-Modul mit handgeschriebener behaviour_info/1Ruft sie beim Kompilieren der Nutzer auf und warnt vor fehlenden, falsch definierten oder veralteten CallbacksNicht ausgewertet: Die Callbacks der Nutzer werden nicht geprüftSemantik
Behaviour-Module weder im Batch noch in der Clause-Bibliothek (application, ...)Aus dem Codepfad geladen; ihre Callbacks werden geprüftWarnung behaviour M undefinedsemantic
Standard-Handler von loggerlogger_std_h schreibt asynchron mit Überlastschutz (Synchron-, Verwerf- und Leerungsmodi, Grenzen für Lastspitzen, Beenden bei Überlast)Ebenfalls auf standard_io (standard_error mit CLAUSE_LOGGER_TYPE=standard_error), aber jedes Ereignis wird vor der Rückkehr des Protokollierungsaufrufs geschrieben; die Überlastoptionen werden ohne Wirkung geprüft und gespeichertlibrary
Handler-Prozesse von logger_std_hVon logger_sup überwacht, nach overload_kill_restart_after neu gestartetMit dem logger-Server verlinkt; ein Handler, dessen Prozess stirbt, wird entferntlibrary
net_adm:names/0,1Fragt epmd: {ok, Names}, wenn auf dem Host ein epmd läuft{error, address}: Clause hat keinen epmd-Clientlibrary
net_kernel:start/1,2Startet die Verteilung oder liefert den Fehler von OTP, wenn das nicht möglich istNicht verfügbar (not_implemented)library
Ablaufverfolgung: 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_*, das Modul trace, erl_tracer:enabled/3, trace/5Verfolgen den Ablauferror:notsupbuiltins
Token von seq_traceMit Nachrichten weitergegeben; fortlaufende Nummern zählen sie; ein System-Tracer empfängt Trace-NachrichtenNur pro Prozess gespeichert: nicht weitergegeben, Nummern bleiben wie gesetzt, keine Trace-Nachrichtenlibrary
Geltungsbereiche von pg und globalReplizieren zwischen verbundenen Knoten; pg überwacht Knoten über net_kernelEin Knoten, keine Gegenstellen oder Knotenüberwachunglibrary
AnwendungsressourcenBeim Laden im Codepfad gefundene .app-Dateien; sys.config, -config und Argumente -App Key Value setzen UmgebungenAus den Ressourcendateien des Builds in die ausführbare Datei kompiliert; Änderungen erfordern einen Neubau; keine Konfigurationsdateien oder -argumentelibrary
Anwendungen kernel und stdlibBeim Booten gestartet; kernel hat einen Master und einen obersten SupervisorOhne Master geladen und laufend: get_supervisor(kernel) ist undefined, info/0 führt sie als laufend mit undefined auflibrary
application:ensure_all_started/3 mit concurrentStartet unabhängige Anwendungen gleichzeitig; die Liste folgt der AbschlussreihenfolgeStartet sie nacheinander, Abhängigkeiten zuerstlibrary
application:takeover/2Wartet auf die Steuerung verteilter AnwendungenEndet mit noproc (kein dist_ac), wie load/2 mit Knoten bei beidenlibrary
Ein-/Ausgabeanfragen an einen AnwendungsmasterAn den Group Leader weitergeleitet, unter dem die Anwendung gestartet wurdeÜber Standard-Ein-/Ausgabe beantwortetlibrary
erlang:process_flag(error_handler, Module)Die Runtime ruft bei undefinierten Aufrufen Module:undefined_function/3 und undefined_lambda/3 aufbadarg; process_info/2 meldet immer error_handler, und undefinierte Aufrufe lösen direkt undef aus (error_handler ist nur aufrufbar)library
Details von Absturzberichten (proc_lib)Ausnahmetext von erl_error mit erweiterten Fehlerinformationen; Nachbarn mit current_function, initial_call und current_stacktrace; echte reductionsKlassenzeile der Ausnahme und Stack-Frames ohne erweiterte Fehlerinformationen; Nachbarn ohne diese Elemente; reductions 0library
client_info in Fehlerberichten von gen_server, gen_statem und gen_fsmcurrent_stacktrace des aufrufenden Prozesses[]: Clause hält keinen aktuellen Stack eines anderen Prozesses vorlibrary
-behaviour mit einem Wert, der kein Atom istDie Warnung gibt den Term mit ~w aus (behaviour [115,116,114] undefined)Gibt den Quelltext des Attributs aus (behaviour "str" undefined); der Fehler ist derselbeSemantik
module_info(md5) und das daraus von OTP abgeleitete vsnMD5 des kompilierten BEAM-CodesMD5 des ausgegebenen Quelltexts des Moduls; die abgeleitete vsn-Ganzzahl weicht entsprechend abSemantik
module_info(compile)version der Compiler-Anwendung von OTP, die ihr übergebenen optionsDie Version von Clause; options immer []Semantik
module_info(functions)Führt auch die Funktionen auf, die OTP für Funs erzeugt ('-f/0-fun-0-'/0)Nur Quelltextfunktionen und die vordefiniertenSemantik
-nominal in module_info(attributes)Als {nominal,[{Name,AbstractType,Params}]} im abstrakten Format behaltenWeggelassenSemantik
Eine Funktion eines Clause-Bibliotheksmoduls, die Clause nicht implementiert hat (ein erlang-BIF, lists:rmerge/2, ...)LäuftKompiliert; löst beim Aufruf error({not_implemented, F, A}) aus, mit M:F/A oben auf dem Stack (Status)Bibliothek, Builtins
Import eines Moduls außerhalb des BatchesKompiliert; der Aufruf löst zur Laufzeit undef aus, wenn das Modul fehltKompilierfehler unknown module M, wenn der Import aufgerufen wird (ungenutzte Importe brauchen kein Modul)Semantik
Warnung import directive overrides auto-imported BIFFür jedes automatisch importierte BIF von erl_internal:bif/2Nur für die automatisch importierten BIFs, die Clause implementiertSemantik

Sprachliche Grenzfälle

UnterschiedOTPClauseZuständig
Ganzzahlsegment breiter als die Ganzzahlgrenze, Wert darüber hinaus (<<V:4194241>> aus lauter Einsen)Der x86-JIT matcht mit einem ungültigen Term; dessen Verwendung bringt die VM zum AbsturzKein MatchTerme
Zip-Gruppe, deren lockere und strikte Generatoren sich eine Variable teilenDer Überspringtest behält Variablen strikter Muster in den lockeren MusternEin verworfener Schritt wird übersprungen, sobald die strikten Muster für sich allein matchenMuster
Aufruf einer externen Fun, M:F(Args) oder apply/3 eines Moduls außerhalb des ProgrammsLädt das Modul aus dem Codepfad, undef, wenn es fehltundef; Bibliotheksmodule werden nur Teil des Programms, wenn es sie mit einem literalen Atom benenntFuns, Bibliothek
Dateien ohne #!, die als Escripts übergeben werdenescript file.erl überspringt die erste ZeileAls gewöhnliche Module kompiliertAusführbare Dateien
Vorkompilierte Beam- und Archiv-EscriptsLaufenNicht unterstütztAusführbare Dateien
Modulname eines Escripts ohne -module<name>__escript plus ein Zeitstempel-/Eindeutigkeitssuffix<name>__escript, deterministischAusführbare Dateien
include_lib einer Anwendung, die in mehreren <app>-<version>-Verzeichnissen gefunden wirdDer Codepfad enthält eine Version (der Start wählt die höchste); keine DiagnoseDie höchste Version unterhalb jedes durchsuchten Verzeichnisses, mit einer Warnung pro Lauf, die sie auflistetPräprozessor
Eine -spec, deren Typen keinen Wert mit dem inferierten Ergebnis, der Einstiegsdomäne oder den Argumenten eines Aufrufs gemeinsam habenKompiliert; Dialyzer kann warnenEine widersprochene Einstiegsdomäne eines Arguments ist ein Kompilierfehler, der den deklarierten und den inferierten Typ nennt; ein widersprochenes Ergebnis oder ein widersprochener Aufruf ist eine Warnung, und die inferierten Typen werden verwendetSemantische Analyse

ETS

UnterschiedOTPClauseZuständig
Reihenfolge von first/1, next/2, tab2list/1, foldl/3 und i/1 über Tabellen vom Typ set, bag und duplicate_bag sowie die Nummerierung von slot/2Lineare Hash-Plätze, Sperre für Sperre durchlaufen; die Reihenfolge ändert sich mit dem Wachstum der TabelleTeile, dann Buckets in Reihenfolge, dann Schlüssel in Einfügereihenfolge innerhalb eines Buckets; ein Platz ist ein Bucketruntime
ets:all/0Enthält die Tabellen von kernel und stdlib von OTP; Reihenfolge der Scheduler-AntwortenNur die Tabellen des Programms, ohne bestimmte Reihenfolgebuiltins
memory von info/2Allozierte Wörter der Tabelle und ihrer ObjekteGespeicherte Objektwörter plus eigener Zusatzaufwand von Clausebuiltins
{write_concurrency, auto}Sperrenzahl passt sich der Konkurrenz an (64 bis 8192)64 feste Teile wie bei true; stats meldet 64 Sperrenruntime
compressedSpeichert Elemente außer dem Schlüssel im externen FormatAkzeptiert und gemeldet; Objekte werden unverändert gespeichertbuiltins
stats von info/2 eines ordered_set mit write_concurrency; data; binaryCA-Baum {RouteNodes, BaseNodes, MaxDepth}; gibt die Tabelle aus; die außerhalb des Heaps liegenden binary-Werte der Tabellefalse; true ohne Ausgabe; []builtins
badarg eines ets-BuiltinsEnthält error_info mit einer Ursache (id, access, type, ...)Einfaches badargbuiltins
Reihenfolge der Ergebnisse von select, match und match_object bei Hash-Tabellen sowie die Ergebnisse jedes Blocks von select/3Ergebnisse jedes Durchlaufschritts vorne angehängt, neueste zuerst; lineare Hash-PlätzeDurchlaufreihenfolge der Teile und Buckets von Clause; jeder Block enthält die ersten Limit gesammelten Ergebnissebuiltins
select_delete/2, select_replace/2 über eine ganze TabelleUnterbrechen alle 1000 Objekte (die Tabelle bleibt währenddessen fixiert)Laufen am Stück, jeder Teil unter seiner Sperreruntime
Match-Spezifikationen mit einer Variablen mit Nummer 25 oder höherNummerieren jedes Atom '$N' der Spezifikation neu, selbst innerhalb von {const, ...} (so ergibt {const, '$30'} den Wert '$0')Variablen behalten ihre Nummern; {const, '$30'} ergibt '$30'runtime
Guards und Rümpfe von Match-Spezifikationen mit mehr als 1000 VerschachtelungsebenenKompilieren, bis der C-Stack knapp wird (system_limit)system_limitruntime
Trace-Aktionen in erlang:match_spec_test/3: enable_trace, disable_trace, trace mit gültigen FlagsÄndern die Trace-Flags des Aufrufers (29.1.1 stürzt ohne Tracer ab)true nach Prüfung der Flags (und dass ein Pid-Argument lebt); nichts ändert sichbuiltins
ets:tab2file/2,3 und file2tab/1,2Über einen nach einer neuen Referenz benannten disk_log-ProzessDirekt mit file geschrieben und gelesenbuiltins
{process_dump} und {current_stacktrace} in erlang:match_spec_test/3Dump-Text des Prozesses; sein Stacktrace<<>>; []builtins

dets

UnterschiedOTPClauseZuständig
Gemeinsam an einer Tabelle wartende AnfragenGleichzeitig eingereihte Such-, Einfüge- und Löschanfragen teilen eine Cache-Aktualisierung; Suchanfragen werden vor den Schreibvorgängen beantwortet; eine fixierte Tabelle lässt manche Schreiber 1 ms schlafenJede Anfrage einzeln in Ankunftsreihenfolgebuiltins
Lange dets-Operationen (Reparaturen, init_table/2,3, Kompaktierungen, Leeren eines großen Caches)Erlang-Code, anhand von Reduktionen verdrängtJeweils ein Builtin-Aufruf; der Worker der Tabelle führt währenddessen nichts anderes ausbuiltins
Prozesse von detsDer dets-Server und dets_sup unter kernel_safe_sup, Tabellen unter dets_supEin bei der ersten Verwendung gestarteter dets-Server ohne Supervisor; Tabellenprozesse mit ihm verlinktbuiltins
Reihenfolge von dets:all/0ETS-Reihenfolge der RegistrierungETS-Reihenfolge von Clause (ETS)builtins
BerichteEine Reparatur wird auf Info-Ebene protokolliert; verbose/0,1 und DETS_DEBUG protokollieren mehr; ein interner Fehler ist {dets_bug, ...}Nichts wird protokolliertbuiltins

io

UnterschiedOTPClauseZuständig
~p, ~w und io_lib-Schreibfunktionen bei Containern, die tiefer als 256 Ebenen verschachtelt sindAusgegebensystem_limitio
io_lib:print/4 mit einer Spalte oder Zeilenlänge, die keine Ganzzahl istAbhängig vom Term: ausgegeben (guards scheitern still), function_clause oder badarithbadarith für jeden Container-Termio_lib
Negative Präzision oder Füllanzahl (~.*c mit -1)Endlosschleifebadargio

erl_scan

UnterschiedOTPClauseZuständig
Position einer Fortsetzung von tokens/3,4 (continuation_location/1, undokumentiert)Dort, wo der Scanner anhielt, innerhalb des unvollständigen TokensAnfang des unvollständigen Tokens, das mit den nächsten Zeichen erneut gescannt wirderl_scan
{compiler_internal, [ssa_checks]}Scannt Prüfkommentare %ssa% in TokenIgnoriert: Sie bleiben Kommentareerl_scan
Eine Gleitkommazahl mit Basis (16#1.8#e1, Basis ungleich 10), deren Ziffern 53 Bit überschreitenDie Mantisse wird wie große Ganzzahlen von ERTS umgewandeltIn einem double-Wert akkumuliert; das letzte Bit kann abweichenerl_scan
Ein Listenelement, das kein Zeichen ist, innerhalb einer Zeichenkette, eines in Anführungszeichen gesetzten Atoms oder einer Escape-SequenzJe nach Klausel function_clause, case_clause oder if_clausefunction_clauseerl_scan

erl_parse

UnterschiedOTPClauseZuständig
Token '%ssa%' (SSA-Prüfklauseln der Compiler-Tests von OTP)In Klauseln ssa_check_when geparstEin Syntaxfehler; erl_scan erzeugt das Token nieerl_parse

erl_eval

UnterschiedOTPClauseZuständig
Stacktrace eines vom Evaluator ausgelösten Fehlers ({badmatch, V}, undef eines lokalen Aufrufs, ...)Aktueller Stack des auswertenden Prozesses (process_info/2 current_stacktrace)Der Stack beim throw des Evaluators, das ihn erfasst, in den Frames von Clauseerl_eval

erl_lint

UnterschiedOTPClauseZuständig
Durch -behaviour benannte BehavioursJedes Modul im Codepfad beantwortet behaviour_info/1Nur in das Programm gelinkte Module antworten; ein anderes ergibt undefined_behaviourerl_lint
Reihenfolge mehrerer in einem map-Fold gefundener Fehler (einmal vorkommende Typvariablen eines Typs, Spezifikationen ohne Funktion, Callback-Prüfungen)Interne Reihenfolge der map (Atome nach Index)Term-Ordnungerl_lint
erlang:is_builtin/3 für nicht exportierte Einträge von -deprecated, -removed und -unsafeBIF-Tabelle von OTPBuiltins der Runtime einschließlich nativer Bibliotheksfunktionenerl_lint
is_guard_expr/1 einer record-KonstruktionLöst case_clause ausGibt an, ob die Felder guard-Ausdrücke sinderl_lint

epp

UnterschiedOTPClauseZuständig
-include_lib("App/...") außerhalb des Include-PfadsIn code:lib_dir(App) gefunden, das die Anwendungen von OTP kenntIn code:lib_dir(App) des Codepfads von Clause gefunden, der keine OTP-Anwendungen enthält, sofern sie nicht hinzugefügt werdenlibrary

erl_pp

UnterschiedOTPClauseZuständig
Form der von erl_pp zurückgegebenen ZeichenTief verschachtelte ZeichenlistenEine flache Zeichenliste; die abgeflachte Ausgabe ist gleichbuiltins

qlc

UnterschiedOTPClauseZuständig
Stacktrace einer in einem Cursor-Prozess ausgelösten Ausnahme, wie von next_answers/1,2 erneut ausgelöstStacktrace des Cursors, gefolgt von process_info(self(), current_stacktrace) des EigentümersGefolgt vom Stacktrace einer im Eigentümer abgefangenen Ausnahme (Clause hat kein Element current_stacktrace)qlc
qlc:q/1,2 in erl_eval, ets:table/1,2, dets:table/1,2 in einem Programm, das qlc nie benenntqlc ist immer geladenundef für qlc: Diese erreichen es über einen Namen zur Laufzeit, daher linken nur Programme, die qlc benennen (jedes Modul mit qlc.hrl tut das), dieses Modullibrary
Annotationsnummern im Code kompilierter Abfragen (info/2 mit {format, abstract_code})Der Transform von OTP nummeriert Annotationen unter Berücksichtigung jeder Ganzzahl des Moduls, einschließlich der Zeichen des Pfads von qlc.hrl in dessen file-AttributDerselbe Transform, aber qlc.hrl von Clause hat einen anderen Pfad, daher können Nummern nach der ersten Abfrage abweichen; der Code ist ansonsten gleichqlc

qlc_pt

UnterschiedOTPClauseZuständig
Meldungen von qlc_pt:parse_transform/2 zur LaufzeitVon compile:noenv_forms/2 (strong_validation): erl_lint und die Core-Durchläufe des Compilers, etwa Warnungen von sys_core_foldNur von erl_lint, wie bei qlc_pt von OTP, wenn der Compiler nicht verfügbar istqlc_pt

Interaktive Shell

UnterschiedOTPClauseZuständig
Zeilenbearbeitung im Terminaledlin: Cursortasten, Zeilenverlauf, Suche, Tab-Vervollständigung über edlin_expand, mehrzeilige Eingabeaufforderung ..>Eigene Zeilenbearbeitung des Terminals (Cooked-Modus); Zeilen werden gelesen, wie das Terminal sie liefert, mit derselben Eingabeaufforderung für jede weitere Zeile eines Befehls, wie OTP bei Eingaben über eine Pipelibrary
Job-SteuerungCtrl+G öffnet das JCL-Menü (neue, verbundene, unterbrochene und beendete Shells)Keine; Banner und Hinweis zu langsamen Befehlen nennen weiterhin Ctrl+G, wie OTP sie ausgibtlibrary
exit()., wenn die Shell Eingaben über eine Pipe liestEine neue Shell startet und liest nichts mehrEine neue Shell startet und liest die restliche Eingabelibrary
Programme, die die Shell ohne --shell startenJedes Modul des Codepfads ist aufrufbarNur die vom Programm gelinkten Module; ohne --keep-exports erreichen dynamische Aufrufe nur Exporte, die das Programm erreichen kannlibrary
Records kompilierter Module (rr(Module), shell_default und user_default beim Start)Aus den Debug-Informationen oder dem Quelltext des Moduls gelesen{error, nofile}: Gelinkter Code behält keinen abstrakten Code; rr/1,2,3 lesen ihn aus Quelltext- und .beam-Dateienlibrary
save_module/1Schreibt das Modul und kompiliert es mit c:c/1Schreibt nur das Modul (kein Compiler)library
edlin_expand:expand/1,2 innerhalb eines Aufrufs oder eines record-FeldwertsFunktionsköpfe und Argumenttypen aus der Spezifikation der Funktion (lists:seq(From, To)), von der Spezifikation zugelassene Atome und TypenKöpfe Mod:Fun/Arity der exportierten Stelligkeiten, keine Typvorschläge: Gelinkter Code behält keine Spezifikationenlibrary
edlin_expand:expand/1,2 für Funktionen und ModuleFunktionen nach den Gruppen der Dokumentation geordnet; Module des CodepfadsEine Gruppe Functions (keine Dokumentation); Module des Programmslibrary
Spalten von c:i/0,1, c:ni/0, c:regs/0Ursprünglicher Aufruf und aktuelle Funktion jedes ProzessesUrsprünglicher Aufruf von proc_lib oder undefined; aktuelle Funktion undefined (kein Element current_function)library

Zufallszahlen

UnterschiedOTPClauseZuständig
Streifenhöhen der Normalverteilungs-Ziggurat von randTabellierte KonstantenAus den Konstanten der Ziggurat auf den nächsten double-Wert berechnet; eine Höhe kann im letzten Bit abweichen, was eine Annahme im langsamen Pfad nur bei einer Ziehung innerhalb dieses Bits der Grenze ändert (Wahrscheinlichkeit etwa 2^-53 pro Ziehung im langsamen Pfad). Streifenbreiten und Grenzen werden an OTP beobachtet und sind gleichBuiltins

crypto

UnterschiedOTPClauseZuständig
Reihenfolge von crypto:supports(ciphers)Die nach Atomindex sortierte Tabelle des NIF, der zwischen VM-Läufen variiert, dann die AliaseTabellenreihenfolge von OTP, dann die Aliasebuiltins
{File, Line} der Fehler {badarg | notsup | error, {File, Line}, Description} von cryptoC-Quelldatei und Zeile von OTP ({"hash.c", 111})C++-Quelldatei und Zeile von Clause ({"hash.cpp", 63}); Klasse und Beschreibung wie bei OTPbuiltins
link_type von crypto:info/0Wie OTP libcrypto gelinkt hat (gewöhnlich dynamic)Immer static, auch wenn eine installierte dynamische libcrypto gelinkt wirdOpenSSL
Lange Berechnungen mit pbkdf2_hmac/5 (mehr als 100 Iterationen oder 64 Bytes)Laufen auf einem Dirty-CPU-SchedulerLaufen auf dem Scheduler-Arbeitsthread des aufrufenden Prozesses, der währenddessen keinen anderen Prozess ausführtbuiltins
modules der Anwendung crypto[crypto, crypto_ec_curves][crypto]library
Lange Texte für crypto_one_time/4,5 und crypto_one_time_aead/4,6,7 (mehr als 20000 Bytes)Laufen auf einem Dirty-CPU-SchedulerLaufen auf dem Scheduler-Arbeitsthread des aufrufenden Prozesses, der währenddessen keinen anderen Prozess ausführtbuiltins
Anwendungsvariable fips_mode von cryptoBeim Laden des Moduls crypto gelesen: true aktiviert den FIPS-ModusNicht gelesen (Clause hat kein on_load und Programme haben keine sys.config): crypto:enable_fips_mode/1 oder clau --fips verwendencrypto
crypto:info_fips/0 ohne ladbaren FIPS-Providernot_enabled, wenn OTP mit FIPS-Unterstützung gebaut wurde, sonst not_supportednot_supportedcrypto
Ladezeitpunkt der Anwendung cryptoBeim Laden des Moduls crypto (dessen on_load)Wenn ein Generator crypto_cache, crypto_aes oder crypto_prng1 erstmals rand_cache_size liestlibrary
RSA-Schlüsselerzeugung (crypto:generate_key(rsa, ...)) und SLH-DSA-SignaturenLaufen auf einem Dirty-CPU-SchedulerLaufen auf dem Scheduler-Arbeitsthread des aufrufenden Prozesses, der währenddessen keinen anderen Prozess ausführtbuiltins
Option rsa_sslv23_padding von crypto:public_encrypt/4 und seinen verwandten FunktionenAkzeptiert, wenn OTP gegen ein OpenSSL mit SSLv23-Padding gebaut wurde (1.1, 3.x)"Bad padding type in option rsa_padding", wie OTP gegen OpenSSL 4 gebautbuiltins
crypto:ec_curve/1 für eine in der gelinkten libcrypto fehlende Kurve (ein ohne binäre Kurven gebautes OpenSSL)Die Parameter aus crypto_ec_curveserror:function_clause, wie bei einer unbekannten Kurve: Die Parameter stammen aus den eingebauten Kurven der libcryptobuiltins
Entschlüsselung von Debug-Informationen durch beam_lib in einem Programm, das crypto nicht aufruftcrypto ist immer vorhandenkey_missing_or_invalid, sofern das Programm nicht crypto linkt (--with-crypto), da beam_lib es dynamisch aufruftlibrary

ASN.1

UnterschiedOTPClauseZuständig
Stack in {error, {asn1, {Reason, Stack}}}Frames der erzeugten Funktionen enc_*/dec_* und von asn1rtt_*Frames von Module:encode/2 oder decode/2 und dem Codec-Builtinasn1
Funktionen eines erzeugten ModulsExportiert auch enc_Type/1,2, dec_Type/1,2 und die anderen von asn1ct erzeugten Funktionen pro TypNur encode/2, decode/2, info/0, die Optionsfunktionen und die Wertfunktionenasn1
Ein CHOICE, dessen Rumpf mit ... beginnt (keine Wurzelalternativen)asn1ct meldet einen SyntaxfehlerAkzeptiertasn1
Wertmakros und Funktionen, die einen anderen Wert innerhalb eines offenen Typs benennen (mgf1SHA1, rSASSA-PSS-Default-Identifier von PKCS-1)asn1ct belässt {'Externalvaluereference', Line, Module, Name} anstelle des WertsDer referenzierte Wertasn1
Ein Laufzeitfehler (kein ASN.1-Fehler), während public_key einen Erweiterungswert dekodiert oder kodiertDirekt bei Auftreten aus der erzeugten Funktion dec_ext-*/enc_ext-* ausgelöst, meist Klasse errorexit({error, {asn1, Reason}}): Der Wert durchläuft decode/2 oder encode/2 des erzeugten Moduls, das jeden Fehlschlag verpacktpublic_key
Standard-Diffie-Hellman-Gruppen von public_key:dh_gex_group/4Die von OTP erzeugten Gruppen (lib/public_key/priv/moduli), 60–81 pro GrößeAcht pro Größe aus der moduli-Datei von OpenSSH; dieselben Größen (2047 bis 8191)public_key
Frames einer Ausnahme von public_keypublic_key, pubkey_pem, pubkey_pbe, pubkey_cert_records, pubkey_cert, pubkey_sshpublic_key, clause_public_key_codec und clause_public_key_keyspublic_key

Parse-Transforms

UnterschiedOTPClauseZuständig
Name im file-Attribut einer eingebundenen Datei (--print-abstr, Eingabe des Transforms)Das Include-Verzeichnis mit dem Namen verbunden, wie gefunden (inc.hrl, /abs/dir/inc.hrl, ../inc/x.hrl)Der Pfad relativ zum Arbeitsverzeichnis, wenn die Datei darunter liegt, sonst der absolute PfadTransforms
Annotationen mit Zeile 0 in importierten Formen (erzeugter Code, etwa vom qlc-Transform)Eine gültige Zeile: Der Code hat keine QuelltextzeileDer Code nimmt die Stelle des davor importierten Knotens eintransforms
generated-Annotationen importierter Formen (.abstr-Eingaben, Ausgabe des Transforms)erl_lint und der Compiler überspringen manche Warnungen für erzeugten CodeIgnoriert: Der Code wird wie Quelltext geprüftTransforms
Formen {error, {Location, Module, Descriptor}} in importiertem CodeMit Module:format_error/1 formatiertDer Termtext des Deskriptors; das Formatieren braucht OTPTransforms
Ein Modul mit Präprozessor- oder Parse-Fehlern, das einen Parse-Transform nenntDer Transform läuft und erhält die Fehler als Formen {error, E}; erl_lint meldet sie danachFehler werden gemeldet, und der Transform läuft nichtTransforms
Kompilieroptionen, die ein Transform erhältDie vollständige Optionsliste von erlc{features, _}, report_warnings, report_errors, {cwd, _}, {outdir, _} (das Arbeitsverzeichnis), {i, _}, {d, ...} und {parse_transform, _}Transforms