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

Bibliotheksmodule

Clause liefert eigene Versionen der OTP-Module, die Programme aufrufen, in Erlang nach dem dokumentierten Verhalten von OTP geschrieben (nicht aus OTP-Quelltexten kopiert) über Builtins der Runtime, und kompiliert sie mit den Programmen, die sie verwenden.

Inhalt

Jedes bereitgestellte Modul exportiert die vollständige Liste von OTP 29 für seinen Namen; sein Inventar <module>.terms (Dateien) hält fest, welche Funktionen implementiert und welche Stubs sind.

ModulInhalt
listsDie gängigen Funktionen; Datenfunktionen wie sublist/2,3, flatten/1,2, sort/1, usort/1, keymember/3, zip/2,3, merge/2 sind Runtime-Builtins; jede dokumentierte Funktion ist implementiert (Modul lists)
mapsJede dokumentierte Funktion; get/3, merge/2, intersect/2, with/2, ... sind Runtime-Builtins, Funktionen mit funs sind Erlang (Modul maps)
ordsets, orddict, proplistsJede dokumentierte Funktion; Listendurchläufe sind Runtime-Builtins, Funktionen mit funs sind Erlang (Sammlungen)
calendarJede dokumentierte Funktion; gregorianische Arithmetik als Runtime-Builtins, lokale Zeit und RFC 3339 in Erlang (calendar)
proc_lib, sysJede dokumentierte Funktion: Prozesserzeugung mit Vorfahren und initialen Aufrufen, synchrone Starts (init_ack, init_fail), Labels, stop/1,3, Absturzberichte und ihre Texte; das Systemnachrichtenprotokoll und Debug-Optionen (trace, log, statistics, log_to_file, installierte funs) mit den Formen der Debug-Listen von OTP
gen_server, gen_statem, gen_event, gen_fsm, genJede dokumentierte Funktion in Erlang über proc_lib und sys, mit den Nachrichten ('$gen_call' mit Alias-Tags, '$gen_cast', ...), Callback-Ergebnissen und Aktionen, Sammlungen von Anfrage-IDs, Fehlertermen und Berichtstexten von OTP; gen enthält die gemeinsamen Teile
supervisor, supervisor_bridgeJede dokumentierte Funktion: Kindprozessspezifikationen und Fehler, Strategien, Neustartintensität, Regeln zum Herunterfahren, simple_one_for_one-Kindprozesse und automatisches Herunterfahren von OTP, als gen_server
logger, logger_formatter, logger_std_h, logger_filters, logger_handlerJede dokumentierte Funktion in Erlang: Primär-, Handler- und Proxy-Konfiguration mit den Prüfungen und Fehlertermen von OTP, Modulebenen, Prozessmetadaten, Filter, die ?LOG_*-Makros aus kernel/include/logger.hrl, Formatvorlagen und der alte Header, logger_std_h auf Geräten und Dateien mit Rotation, Komprimierung und filesync/1, logger_disk_log_h auf halt- und wrap-Disk-Logs (beide über clause_logger_h, gemeinsame Handler-Optionen und Prüfungen von OTP). Der logger-Server ist Clauses clause_logger, beim ersten Gebrauch mit dem Standard-Handler von OTP auf standard_io gestartet (die Umgebungsvariable CLAUSE_LOGGER_TYPE=standard_error verlegt ihn auf die Standardfehlerausgabe, wie es der Golden-Runner tut, um mit Goldens übereinzustimmen, die dort mit dem Handler von OTP erzeugt wurden); Anwendungsebenen benötigen application
disk_log, wrap_log_reader, clause_disk_log, clause_disk_log_serverJede dokumentierte Funktion in Erlang: halt-, wrap- und rotate-Logs, intern und extern, mit den Dateiformaten von OTP (Log-Köpfe, Eintragsrahmen mit MD5s großer Einträge, wrap-Index- und Größendateien, rotate-Archive), sodass Dateien byteweise denen von OTP entsprechen; ein Prozess pro Log mit Eigentümern, Nutzern, Benachrichtigungen, Blockierung mit eingereihten Anfragen, vorausschauender Protokollierung, einem nach Größe und Timer geleerten Schreibcache, Reparatur, nur lesbaren Chunks mit Zählung fehlerhafter Bytes; der Registrierungsserver disk_log_server mit den benannten Tabellen disk_log_names und disk_log_pids; wrap_log_reader über denselben Chunk-Leser
error_logger, error_logger_file_h, log_mf_hJede dokumentierte Funktion: Nachrichten und Berichte als Log-Ereignisse mit den error_logger-Metadaten von OTP, Berichtshandler im Ereignismanager error_logger, der vom Logger-Handler error_logger gespeist wird, logfile/1 im alten Berichtsformat, wrap-Dateien mit dem Index- und Datensatzformat von OTP
pg, data_publisherJede dokumentierte Funktion: Gültigkeitsbereiche als data_publisher-Server mit den ETS-Tabellen von OTP, Beitritte, Austritte, endende Mitglieder, Bereichs- und Gruppenmonitore; der Gültigkeitsbereich hat keine Gegenstellen
global, global_groupJede dokumentierte Funktion wie auf einem nicht verteilten Knoten: Namen (auch {global, Name} in den Behaviours), Sperren und Transaktionen über einen beim ersten Gebrauch gestarteten global_name_server; global_group ohne Gruppen; der Locker und die verteilten Interna sind abgelehnt
rpc, erpcJede dokumentierte Funktion: Aufrufe auf diesem Knoten laufen in neu erzeugten Prozessen (rex startet beim ersten Gebrauch) mit den Ergebnissen und Fehlern von OTP; andere Knoten sind nicht erreichbar ({badrpc, nodedown}, {erpc, noconnection})
net_adm, net_kernel, auth, seq_traceDie Antworten von OTP für einen nicht aktiven Knoten (pang, ignored, #{started => no}, nocookie); net_kernel:start/1,2 und die Interna der Verteilung sind abgelehnt; seq_trace behält das Token jedes Prozesses ohne Ablaufverfolgung
trace, erl_tracerAblaufverfolgung wird nicht unterstützt: Jede trace-Funktion und der Standard-Tracer von erl_tracer (enabled/3, trace/5) lösen notsup aus, wie die Ablaufverfolgungsfunktionen von erlang (Modul erlang); erl_tracer:behaviour_info/1 listet die Callbacks von OTP auf
error_handlerDie Funktionen für undefinierte Aufrufe, direkt aufrufbar; die Runtime löst undef selbst aus und ruft sie nie auf; breakpoint/3 ist abgelehnt (kein Interpreter)
timerJede dokumentierte Funktion ohne den Timer-Server von OTP: zeitgesteuertes Senden an lokale Pids über erlang:send_after/3, jeder andere Timer ein eigener Prozess, der über einen Alias in seinem TRef erreicht wird; die Umrechnungen und now_diff/2 sind Runtime-Builtins (timer)
filelib, clause_filelibJede dokumentierte Funktion: Platzhaltermuster werden von Runtime-Builtins mit den Regeln, Eigenheiten und Fehlern von OTP kompiliert und abgeglichen, Verzeichnisdurchlauf, Abfragen, ensure_dir/1, ensure_path/1, fold_files/5,6, find_file/2,3, find_source/1,2,3 (source_search_rules von kernel oder die Standardwerte von OTP) und safe_relative_path/2 in Erlang; auch die undokumentierten Formen mit einem Modul (file, erl_prim_loader oder einem anderen), compile_wildcard/1 (Debug-Hilfe von OTP) ist ein Stub (filelib)
file_sorterJede dokumentierte Funktion in Erlang: Die Läufe von OTP (size Bytes im Speicher sortiert), Zusammenführungen (no_files temporäre Dateien gleichzeitig, 16-KiB-Chunks, Datenströme nach ihren gepufferten Objekten und Dateinummern geordnet) und Prüfungen werden Schritt für Schritt nachvollzogen, sodass gleich vergleichende Terme wie in OTP ausgegeben und bei unique beibehalten werden; Formate binary_term, binary, term und fun, header, compressed (über die gzip-Schicht von file), tmpdir, Ein- und Ausgabe-funs, Fehlerterme von OTP
zipJede dokumentierte Funktion in Erlang, dem Archivaufbau von OTP Byte für Byte folgend (lokale und zentrale Header von UNIX 6.1, zusätzliche Felder für erweiterte Zeitstempel und UNIX-uid/gid, zip64 oberhalb von 4 GiB, 8-KiB-deflate-Blöcke mit vollständigen Flushes über zlib), sodass Archive denen von OTP entsprechen; Dateien oder binaries als Ein- und Ausgabe über die Ein- und Ausgabe-funs von OTP, Filter, cwd, keep_old_files, skip_directories, foldl/3, von einem verknüpften Prozess bediente zip_open/1,2-Archive, t/1, tt/1, Fehlerterme von OTP; die records aus stdlib/include/zip.hrl
erl_tarJede dokumentierte Funktion in Erlang, den Formatregeln von OTP Byte für Byte folgend: USTAR-Header, lange Namen in ein Präfix aufgeteilt oder in erweiterte pax-Header verschoben (ebenso lange oder Nicht-ASCII-Namen, Links und Eigentümernamen sowie für Oktaldarstellung zu breite Zahlen), Lesen von v7-, GNU- (lange Namen und Links, Sparse-Dateien), STAR-, USTAR- und pax-Archiven mit den Eigenheiten von OTP (Basis-256-Felder, pax-Zeiten), compressed über die gzip-Schicht von file, binaries als ram-Dateien gelesen, Geräte, init/3-I/O-funs des Nutzers, max_size, keep_old_files, files, cwd, verbose, Prüfungen unsicherer Pfade, Fehlerterme von OTP und format_error/1
zstd, clause_zstdJede dokumentierte Funktion: einmalige und fortlaufende Komprimierung und Dekomprimierung, Parameter, Wörterbücher (roh oder referenziert), Frame-Header und Wörterbuch-IDs, in Erlang über Runtime-Builtins, die libzstd-1.5.7-Kontexte wie das NIF von OTP halten (zstd); file:open/2 akzeptiert {zstd, Options}
beam_lib, erl_abstract_codeJede dokumentierte Funktion in Erlang, der Chunk-Verarbeitung von OTP folgend: IFF-Durchlauf mit den Fehlern von OTP, Atomtabellen in beiden Kodierungen, Symboltabellen, Attribute, Kompilierungsinformationen, Literale, Debug-Informationen und abstrakter Code über das Backend erl_abstract_code, Dokumentation (records aus kernel/include/eep48.hrl), MD5s über die relevanten Chunks, Vergleichen und Bereinigen von Dateien, Verzeichnissen und Releases, gzip-komprimierte Beams, build_module/1 und der Kryptoschlüsselserver mit Entschlüsselung von Debug-Informationen (über crypto, dynamisch aufgerufen: mit --with-crypto linken)
io_ansiJede dokumentierte Funktion in Erlang: die virtuellen Terminalsequenzen von OTP 29 als die eingebauten ANSI-Sequenzen, die OTP ohne terminfo verwendet (terminfo-Abfragen antworten mit {error, enotsup}), format/1,2,3 und render/1,2 über io_lib, fwrite/1,2,3,4 als put_ansi-Anfragen, die der Standardeingabeserver darstellt, scan/1 und enabled/0,1 aus dem Terminal-Flag des Geräts (Modul io)
win32regJede dokumentierte Funktion: Parsen von Schlüsseln nach OTP (Wurzeln, absolute, relative und ..-Pfade), aktueller Schlüssel, Ganzzahl-, Zeichenketten- und binary-Werte, Auflistungen und Löschungen über den Windows-Registry-Treiber (die Registry); andernorts {error, enotsup}, wie in OTP
argparse, clause_argparseJede Funktion: Validierung mit den Fehlern von OTP, Parsen (Optionen, Flags, nargs, Aktionen, Typen mit Auswahlwerten, Grenzen und regulären Ausdrücken, benutzerdefinierte Typen, Unterbefehle, Präfixe, Standardwerte) mit den Argument-maps und Fehlern von OTP, help/1,2 mit Layout und Vorlagen von OTP, run/3 mit jeder Handler-Form, als Runtime-Builtins, die Erlang zum Aufruf der funs veranlassen (argparse); ohne progname der eigene Name des Programms
escriptcreate/2 und extract/2 nach dem Abschnittsaufbau und Header-Lesen von OTP (Shebang-, Kommentar- und Emulatorargumentzeilen; Quelltext-, Beam- und Archivkörper über zip); script_name/0 ist der Pfad der ausführbaren Datei; Ausführen von escripts (start/0,1, parse_file/1) ist abgelehnt
filenameJede dokumentierte Funktion nach den Unix- und Windows-Regeln von OTP für den Host; Namensdurchläufe sind Runtime-Builtins, absname/1,2 und basedir/2,3 (aus HOME, den XDG-Variablen und APPDATA) sind Erlang (filename)
uri_stringJede dokumentierte Funktion als Runtime-Builtin: Parsen nach RFC 3986 mit den Fehlerfragmenten von OTP, erneutes Zusammensetzen, Normalisierung, Auflösung, Prozentkodierung und form-urlencoded-Abfragen (uri_string)
jsonJede dokumentierte Funktion mit iodata, Fehlern und Callback-Reihenfolge von OTP; decode/1, encode/1, format/1,2 und die Binary-Escape-Funktionen sind Runtime-Builtins, Encoder und Formatierer mit funs sowie Callback-Decoder sind Erlang (Kodierungen)
rand, randomJede dokumentierte Funktion mit Zuständen und Folgen von OTP; die Algorithmen von OTP laufen als Runtime-Builtins, Plug-in-Generatoren in Erlang (Zufallszahlen)
stringJede dokumentierte Funktion als Runtime-Builtin, das chardata wie string.erl von OTP durchläuft, sodass Ergebnisse die Formen von OTP behalten (string)
base64Jede dokumentierte Funktion als Runtime-Builtin (Kodierungen)
arrayJede dokumentierte Funktion über dem record von OTP 29; record-Operationen sind Runtime-Builtins, Folds und Mapfolds sind Erlang (Sammlungen)
gb_trees, gb_sets, queueJede dokumentierte Funktion über den Baum- und Warteschlangenformen von OTP; Operationen ohne funs sind Runtime-Builtins (Sammlungen)
dict, setsJede dokumentierte Funktion über den records (Mengen der Version 1) und Maps (Version 2) von OTP; Operationen ohne funs sind Runtime-Builtins (Sammlungen)
ioget_line/1,2, get_chars/2,3 (Server der Standardeingabe oder eine geöffnete Datei), fread/2,3 (eine get_until-Anfrage über io_lib:fread/3), read/1..4, scan_erl_exprs/1..4, scan_erl_form/1..4, parse_erl_exprs/1..4, parse_erl_form/1..4 (get_until-Anfragen über erl_scan:tokens/3,4, von erl_parse geparst), request/1,2, requests/1,2 (das I/O-Protokoll von OTP, Dateien), getopts/0,1, setopts/1,2, columns/0,1, rows/0,1 (Terminalgröße über clause_io-Builtins), get_password/0,1, write/1,2; format/1,2,3, fwrite/1,2,3, put_chars/1,2 und nl/0,1 sind Runtime-Builtins (io)
io_libSchreib-, Prüf- und Sammelfunktionen, Format-Engine, Pretty Printer (print/1,4, ~p, chars_limit) und Scanner (fread/2,3) als Runtime-Builtins in den tiefen Listenformen von OTP, maps_order-funs zum Sortieren von Schlüsseln in clause_io_lib; get_until, format_prompt und write/3 sind Erlang (io_lib)
sofs, clause_sofsJede Funktion; Datenoperationen sind Runtime-Builtins, Funktionen mit funs und die Digraph-Konvertierungen sind Erlang (Mengen von Mengen)
etsTabellen, Lesen, Schreiben, Durchläufe und Aktualisierungen als Runtime-Builtins über den Tabellen der Runtime; foldl/3, foldr/3, i/0..3 und fun2ms/1 in Erlang; Match-Spezifikationen (select-, match-, match_spec-Familien) als Builtins über dem Interpreter der Runtime, match_spec_run/2, test_ms/2, repair_continuation/2, match_delete/2 und init_table/2 in Erlang; Tabellendateien (tab2file/2,3, file2tab/1,2, tabfile_info/1) in Erlang über file und clause_disk_log; to_dets/2 und from_dets/2 in Erlang über dets; table/1,2 in Erlang über qlc:table/2 (ets)
graphJede Funktion über dem record von OTP; Abfragen und Durchläufe sind Runtime-Builtins, Aktualisierungen sind Erlang (graph)
digraph, digraph_utilsJede Funktion über dem Drei-Tabellen-record von OTP; Aktualisierungen und Lesezugriffe sind Erlang über ets, Pfadsuchen und Durchläufe von digraph_utils sind Runtime-Builtins, die die Tabellen lesen, subgraph/2,3 und condensation/1 sind Erlang (digraph)
dets, clause_detsJede dokumentierte Funktion: Server- und Tabellenprozesse von OTP in Erlang über einer C++-Engine für das Dateiformat Version 9 von OTP, Dateien Byte für Byte wie von OTP geschrieben; table/1,2 in Erlang über qlc:table/2 (dets)
ms_transformJede Funktion in Erlang über dem abstrakten Format: parse_transform/2 übersetzt literale funs, die in den Formen eines Moduls an ets:fun2ms/1 und dbg:fun2ms/1 übergeben werden, transform_from_shell/3 die Klauseln einer Shell-fun, mit den Match-Spezifikationen, Verdeckungswarnungen und Fehlercodes von OTP. Ein Modul, das die Transformation zur Kompilierzeit verwendet, führt weiterhin ms_transform des Host-OTP aus (Parse-Transformationen)
qlc_pt, clause_qlc_ptDie qlc-Parse-Transformation zur Laufzeit (in OTP undokumentiert): transform_expression/2, transform_from_evaluator/2 und parse_transform/2 als Runtime-Builtins mit dem erzeugten Abfragecode, den Nachrichten und Annotationen von OTP; ms_transform läuft auf Anfrage in Erlang (qlc_pt). Kompilierte Module, die qlc.hrl einbinden, verwenden weiterhin die Transformation des Host-OTP (Parse-Transformationen)
qlcJede Funktion in Erlang, nach der Dokumentation von OTP geschrieben: Abfrage-Handles kompilierter Abfragen (qlc_lc-Handles von OTP aus der Transformation), Listen, table/2-Tabellen, append/1,2, sort/1,2 und keysort/2,3; Auswertung mit konstanten Nachschlagewerten, Match-Spezifikationen, Merge- und Lookup-Joins, cache (ets, list mit Auslagerung in temporäre Dateien), unique, Sortierung mit file_sorter, Cursor als Prozesse, info/1,2 über erl_pp, string_to_handle/1,2,3 über qlc_pt, Fehlerterme von OTP und format_error/1. Handles, Tabellen, Schlüssel im Prozesswörterbuch und temporäre Dateinamen entsprechen OTP. stdlib/include/qlc.hrl nennt die Transformation qlc, die auf dem Host-OTP läuft (qlc)
shell, clause_shell, clause_shell_eval, clause_shell_commands, clause_shell_recordsJede dokumentierte Funktion in Erlang, nach der Dokumentation von OTP geschrieben: die interaktive Shell auf der Standardeingabe (interaktive Shell): Eingabeaufforderungen, Banner, Verlauf (e/1, v/1, h/0), Bindungen, records (rd, rr, rl, rp, rf), an der Eingabeaufforderung definierte Funktionen, Typen und Specs, Ausnahmeberichte über erl_error, Ergebnisse wie in OTP ausgegeben (Tiefe 30, records), eingeschränkte Shells, catch_exception/1 und die Einstellungsfunktionen
shell_default, cJede Funktion: die Befehle von c mit der Ausgabe von OTP (i/0, regs/0, m/0,1, ls/0,1, flush/0, help/0, ...); Kompilierung (c/1,2,3, lc/1, nc/1,2), xm/1 und y/1,2 melden den fehlgeschlagenen Aufruf wie OTP ohne compiler, tools oder parsetools; h/1,2,3 finden keine Dokumentation in gelinktem Code; die i-Befehle des Debuggers melden die fehlende Anwendung
edlin, edlin_expandedlin:keymap/0 (die Tastenbelegung des aufrufenden Zeileneditors; außerhalb davon undefined); edlin_expand:expand/1,2 in Erlang: Vervollständigung von Modulen, Funktionen (Stelligkeiten für Mod:, fun Mod:Fun/), BIFs, Shell-Befehlen, in der Shell definierten Funktionen, Schlüsselwörtern, Bindungen, record-Namen und -Feldern, map-Schlüsseln und Dateipfaden, mit den Abschnitten und alten Treffern von OTP; Argumente eines Aufrufs werden als Mod:Fun/Arity-Köpfe vorgeschlagen (gelinkter Code hat keine Spezifikationen)
shell_docs, clause_shell_docs_markdownJede Funktion in Erlang, nach der Dokumentation von OTP geschrieben: render/2..5, render_type/2..5 und render_callback/2..5 eines übergebenen docs_v1-Chunks (application/erlang+html, text/markdown wie in der Shell von OTP konvertiert, andere text/-Formate unverändert) mit Layout, Umbruch, Aufzählungszeichen und ANSI-Stilen von OTP, normalize/1, validate/1, supported_tags/0; identisch mit OTP über die 51.249 Darstellungen der eigenen Dokumentations-Chunks von OTP 29. Gelinkter Code hat keine eigenen Chunks (code:get_doc/1)
erl_parse, clause_erl_parseJede Funktion: parse_form/1, parse_exprs/1, parse_term/1 sowie parse/1 und parse_and_scan/1 von yecc über einem Runtime-Parser mit dem abstrakten Format und den Fehlern von OTP; normalise/1, abstract/1,2, tokens/1,2 und die Rangfolgetabellen als Builtins; Annotationendurchläufe und format_error/1 in Erlang (erl_parse)
erl_eval, clause_erl_evalJede Funktion in Erlang über dem abstrakten Format: Bindungen als orddicts oder maps, Handler für lokale und nicht lokale Funktionen (Operatoren, BIFs und Fehler als erlang:raise/3-Aufrufe laufen über Letztere), interpretierte funs mit der Umgebung von OTP, comprehensions mit strikten und zip-Generatoren, maybe, native records, receive über prim_eval; Musterabgleich, Bitsyntaxsegmente und Konstantenfaltung sind Runtime-Builtins (erl_eval). exprs/2 und expr/2 prüfen einen Befehl mit erl_lint:exprs_opt/3; qlc:q/1,2 einer Abfrage-Listen-comprehension läuft über qlc:transform_from_evaluator/2 mit verborgenen lokalen Aufrufen, wie in OTP
erl_errorJede Funktion in Erlang über io_lib: format_exception/3,4 und die internen Formatierer (format_exception/6,7,8, format_stacktrace/4,5, format_call/4,5, format_fun/1,2) mit den Erläuterungen, Layouts, error_info-Callbacks und Optionen von OTP. Die eigenen Stacktraces von Clause haben keine Quellpositionen oder error_info (Unterschiede), daher zeigen ihre Berichte beides nicht
erl_pp, clause_erl_ppJede Funktion; die Ausgabe ist ein Runtime-Builtin (erl_pp): Formen, Attribute, Typen und Specs, Funktionen, guards und Ausdrücke mit dem Layout (Zeilenbreite, Einrückung, Zeichenkettenteile, Rangfolgeklammern) und den Optionen von OTP; Hooks und legalize_vars/1 laufen hier; identisch mit OTP über die Formen von 347 OTP-Quellen und Testsuiten sowie über 80 davon mit fünf Optionssätzen einschließlich Hooks
erl_lint, clause_erl_lintJede Funktion; die Prüfungen sind Runtime-Builtins (erl_lint) mit den Fehlern, Warnungen, Optionen und der Reihenfolge von OTP sowie den Texten von format_error/1; behaviour_info/1 der Behaviours wird hier aufgerufen, und is_guard_test/3 fragt seine fun zuerst nach den lokalen Aufrufen; identisch mit OTP über 481 OTP-Quellen und Testsuiten, 474 Ausschnitte aus Testsuiten und 816 Befehlsausdrücke
erl_expand_recordsmodule/2 als Runtime-Builtin (erl_expand_records): Tupel-records zu Tupeloperationen expandiert, native records und importierte native records beibehalten, Aufrufe von Importen und BIFs mit ihrem Modul versehen, is_record/3-guard-Tests in Muster umgewandelt, mit den Optionen dialyzer, expand_inits und [no_]strict_record_tests; identisch mit OTP über die Formen von 347 OTP-Quellen und Testsuiten
epp, clause_eppJede Funktion in Erlang außer den -if-Bedingungen, die ein Builtin auswertet (epp): ein Server pro geöffneter Quelle mit den Formen, Makros (Argumente, Überladung, ??Arg, ?FUNCTION_NAME, vordefinierte und solche aus der Option macros), Includes, Bedingungen, -file, -feature, -error/-warning, Dokumentationsdateien und Fehlern von OTP; Dateien werden vollständig gelesen und nach ihrem Kodierungskommentar dekodiert. Identisch mit OTP über 1.110 parse_file/scan_file-Aufrufe auf OTP-Quellen und Testsuiten. -include_lib findet Header bis code:lib_dir/1 nur über den Include-Pfad
erl_scanJede Funktion: string/1,2,3 und die wiedereintrittsfähigen tokens/3,4 über einem Runtime-Scanner mit den Tokens, Annotationen, Optionen, Callbacks und Fehlern von OTP; Zugriffsfunktionen und format_error/1 in Erlang (erl_scan)
erl_internal, erl_annoJede Funktion als Runtime-Builtin: die BIF-, guard-, Typtest- und Operatortabellen, vordefinierten Funktionen und Annotationen von OTP (Compiler-Tabellen)
records, erl_featuresReflexion von native records, Laufzeitdefinitionen und kompilierte Definitionen mit gefalteten Standardwerten (native records); die Features von OTP 29 und die, mit denen jedes Modul kompiliert wurde (Compiler-Tabellen)
binaryJede Funktion; replace/3,4 und list_to_bin/1 in Erlang, die anderen Runtime-Builtins (Modul binary)
mathJede Funktion als Runtime-Builtin (Modul math)
unicodeJede Funktion als Runtime-Builtin: Konvertierungen, bin_is_7bit/1, Byte Order Marks, Normalisierungsformen, Kategorien und Bezeichnereigenschaften (Modul unicode)
unicode_utilJede Funktion über erzeugten Tabellen, die chardata-Durchläufe als Runtime-Builtins (unicode_util)
reJede Funktion außer import/1, über PCRE2 (Modul re)
fileJede dokumentierte Funktion: Dateien öffnen, lesen, schreiben, positionieren und schließen (auf Datenträger, compressed oder im Speicher mit ram), positioniertes Lesen und Schreiben, truncate/1, advise/4, allocate/3, ganze Dateien lesen und schreiben, consult/1, eval/1,2, script/1,2 und ihre path_-Formen mit path_open/3 (die Datei wird vollständig gelesen und nach ihrem Kodierungskommentar dekodiert, standardmäßig UTF-8, wie es epp:set_encoding/1 in clause_epp tut, dann Form für Form mit den Ergebnissen und Fehlern von OTP gescannt), Dateiinformationen und ihre Änderungen (write_file_info/2,3, change_*), Verzeichnisoperationen über den Dateitreiber, sendfile/2,5 als der in Chunks arbeitende Rückfallpfad von OTP und format_error/1 (Dateien)
erl_posix_msgDas interne Modul von OTP für file:format_error/1: message/1 als Runtime-Builtin (POSIX-Meldungen)
gen_tcp, gen_udp, inet, clause_socket, clause_socket_optionsSockets über Socket-Ports, mit ihren Optionen, Statistiken, Statusangaben und Auflistungen (Sockets); inet:get_rc/0 aus clause_inet_config
socketJede dokumentierte Funktion in Erlang über den Socket-Treiber-Ports (Sockets): {'$socket', Ref}-Handles, die ein clause_socket_registry-Prozess und eine Tabelle halten (Eigentümer, Zustände, Zähler, Metadaten, Monitore, Auflistungen), open/bind/listen/accept/connect, send/sendto/sendmsg/sendv/sendfile/sendmmsg, recv/recvfrom/recvmsg/recvmmsg mit den Fehlern für unvollständige Daten von OTP, nowait als Abschlussnachrichten unter Windows und select-Nachrichten andernorts, cancel/2, die Optionsnamen und Fehler für ungültige Werte von OTP, info/0,1, i/0,1,2, supports/0,1,2; SCTP-Aufrufe lösen notsup aus und Schnittstellenanfragen werden abgewiesen, wie in OTP unter Windows
gen_sctpJede dokumentierte Funktion: kein SCTP, daher antworten open/0,1,2 nach den Optionsprüfungen von OTP mit {error, eprotonosupport}, und die anderen sehen einen geschlossenen oder fremden Socket; error_string/1 hat die Texte von OTP
inet_res, clause_inet_configJede dokumentierte Funktion in Erlang: der DNS-Client von OTP über gen_udp und gen_tcp (Wiederholungen, alternative Nameserver, EDNS, Kürzung über TCP, servfail-Wartezeiten, Fehler von OTP, Suchlisten, CNAME-Ketten und hostents) mit Nachrichten, die der DNS-Codec von clause_net kodiert und dekodiert (Netzwerknamen); die Resolver-Konfiguration, wie OTP sie auf einem nicht verteilten Knoten lädt (keine unter Windows; andernorts resolv.conf und die hosts-Datei)
net, clause_netJede dokumentierte Funktion: Rechner-, Adress- und Dienstauflösung sowie Schnittstellenlisten als Runtime-Builtins mit den Ergebnissen von prim_net, die Filter in Erlang; keine Netzwerk-Namensräume (Netzwerknamen)
clause_socketClauses eigenes: das Protokoll des Socket-Treibers, das die drei obigen Module gemeinsam nutzen
oscmd/1,2 über einen Port mit dem Shell-Protokoll von OTP, max_size und exception_on_failure; Abfragen zu Umgebung, Zeit und Version, find_executable/1,2 und set_signal/2 als Builtins (Modul os)
codeAbfragen geladener Module ohne Code-Server; der Code-Pfad in einem persistenten Term mit den Pfadänderungen von OTP, lib_dir/priv_dir-Abfragen, where_is_file/1, all_available/0, clash/0; Antworten zum Laden für gelinkten Code (Modul code)
application, application_controllerJede dokumentierte Funktion: Laden, Schlüssel, Umgebungen, Starts mit Abhängigkeiten und Startphasen, Stopps, Berechtigungen und Neustarttypen mit den Fehlern und Berichten von OTP, über einen beim ersten Gebrauch gestarteten Controller und clause_application_master (Anwendungen); Release-Verwaltung, Booten und verteilte Steuerung sind abgelehnt
erlangErzeugte Stubs jedes erlang-Exports von OTP 29; Katalog-Builtins haben Platzhalterrümpfe, nif_error/1,2 haben Rümpfe, die anderen lösen beim Aufruf {not_implemented, F, A} aus (Modul erlang)
initDie Antworten eines gestarteten Systems; boot/1, restart/0,1 und make_permanent/2 abgelehnt (Modul init)
persistent_termJede Funktion als Runtime-Builtin (persistente Terme)
atomics, countersJede Funktion (atomics und counters)
erts_internal, erts_code_purgerWas stdlib und kernel aufrufen; die Gruppen Distribution, .beam, Emulator und Purger-Prozess zurückgewiesen (erts_internal)
erl_prim_loaderDateiabfragen über file; Laden und Archive zurückgewiesen (Dateien)
zlibJede Funktion über das festgelegte zlib (Modul zlib)
prim_eval'receive'/2 über die Schritte eines kompilierten receive (prim eval)
Die ASN.1-Module von public_key ('OTP-PKIX', 'PKIX1Explicit-2009', ...) und public_key.hrlBeim Bauen aus library/public_key/asn1/ nach library-asn1/public_key/ im Build-Baum erzeugt (public_key)
public_key, clause_public_key_codec, clause_public_key_keys, clause_public_keyAnwendung public_key (mit public_key.app): DER- und PEM-Kodierung, PEM-Verschlüsselung, private PKCS-#8-Schlüssel jedes Typs und Zertifikate in den Formen plain und otp über den erzeugten Modulen (public_key, öffentliche Schlüssel); Schlüssel, Signaturen, RSA-Verschlüsselung, Schlüsselerzeugung und -vereinbarung, Zertifikatsignierung über crypto (clause_public_key_keys, Schlüssel); Validierungsfunktionen sind Stubs
clause_asn1Der Codec, den die von clau aus ASN.1-Spezifikationen erzeugten Module aufrufen (ASN.1-Codec, ASN.1); die Anwendung asn1 von OTP (asn1ct, asn1rt_nif) wird nicht bereitgestellt
crypto, clause_cryptoAnwendung crypto (mit crypto.app), über libcrypto von OpenSSL im Krypto-Runtime-Archiv (Modul crypto, OpenSSL): die Algorithmenlisten des gelinkten OpenSSL (supports/0,1, hash_info/1, info/0, info_lib/0), Digests und Hash-Zustände, HMAC/CMAC/Poly1305 und MAC-Zustände, pbkdf2_hmac/5, hash_equals/2, exor/2, mod_pow/3, Chiffren und ihre Zustände (crypto_init/3,4, crypto_update/2, crypto_final/1, crypto_get_data/1, crypto_one_time/4,5, cipher_info/1), AEAD (crypto_one_time_aead/4,6,7, crypto_one_time_aead_init/4), starke Zufallszahlen und die rand-Plugins crypto, crypto_cache, crypto_aes und crypto_prng1, Fehlerterme von OTP; Engines abgewiesen (notsup); FIPS-Modus wie bei OTP umschaltbar oder mit clau --fips festgelegt; öffentliche Schlüssel (sign/4,5, verify/5,6, RSA-Verschlüsselung, generate_key/2,3, compute_key/4, privkey_to_pubkey/2: RSA, DSA, DH, ECDSA/ECDH auf benannten und expliziten Kurven, EdDSA, X25519/X448, ML-DSA, SLH-DSA, SRP), ec_curve/1 und ec_curves/0 (explizite Parameter aus der gelinkten libcrypto), ML-KEM (encapsulate_key/2, decapsulate_key/3)

Ergebnisse und Fehlergründe entsprechen OTP 29, einschließlich der Fehlerformen der Erlang-Implementierungen von OTP (lists:map(F, x) ergibt {case_clause, x}, lists:nth(0, L) function_clause, lists:seq(1, 10, 0) badarg) und seiner BIFs (lists:member/2, lists:keyfind/3, lists:reverse/2, die maps-Funktionen: badarg, {badmap, M}, {badkey, K}). lists:member/2 vergleicht mit =:=, lists:keyfind/3 mit ==. lists:sort/1 ist ein stabiles Runtime-Builtin (Vergleich und Ordnung). Stacktraces nennen die Bibliotheksfunktionen, nicht die von OTP.

Interaktive Shell

shell:start_interactive/0,1 startet die Erlang-Shell auf den Standardströmen, und clau --shell linkt sie in eine ausführbare Datei, deren Einstiegspunkt sie ist, sofern --entry keinen anderen nennt (Kompilierung). Der Prozess clause_shell übernimmt die Rolle von user_drv in OTP: Er gibt die Systemversion aus, startet den Server von shell und startet einen neuen, wenn eine Shell endet (exit().). Der Server liest jeden Befehl über den Standardeingabeserver von io, wobei die Eingabeaufforderung für jede weitere Zeile eines Befehls erneut ausgegeben wird, behält den Verlauf und startet den Auswerter, der jeden Ausdruck mit erl_lint prüft, records expandiert und ihn mit erl_eval auswertet. Ergebnisse werden mit den records der Shell über den Pretty Printer der Runtime ausgegeben (clause_io_lib:pretty/2, io_lib). Das Eingabeende beendet das Programm nach *** Terminating erlang (nonode@nohost) mit Status 0.

Befehle rufen Module über ihren Namen auf, daher muss ein Programm, das die Shell startet, jeden Export aufrufbar halten: --shell behält sie bei (Erreichbarkeit von Exporten) und linkt jedes Bibliotheksmodul; ein ohne diese Option gebautes Programm erreicht nur die Module, die es nennt. Eingabezeilen werden so gelesen, wie das Terminal sie liefert, und vom Terminal selbst bearbeitet: Es gibt keine edlin- Zeilenbearbeitung, Verlaufstasten oder Tab-Vervollständigung (Unterschiede).

Wie Programme sie erhalten

Ersatz für Runtime-Module

Clause vertritt die OTP-Module, die ERTS in C implementiert (NIFs, BIFs, Port-Treiber, die vorgeladenen Module von erts/preloaded/src), sowie Module, die OTP beim Bauen erzeugt (unicode_util). kernel und stdlib von OTP sind reines Erlang, rufen aber diese Module auf.

Bereitgestellt oder fehlend

Was die Runtime braucht und nicht in reinem Erlang geschrieben werden kann, wird pro Modul entschieden, und pro Funktionsgruppe, wo ein Modul Belange mischt:

Funktionen, die für die Runtime trivial sind, werden ohne eigene Entscheidung implementiert.

Zu welchem Modul ein Name aufgelöst wird

OTP ist auf dem Rechner des Nutzers optional; ist es vorhanden, darf es nicht ändern, was ein Build kompiliert. Ein Modulname wird in dieser Reihenfolge aufgelöst:

  1. Explizite Eingaben: Quellen, die der Nutzer aufführt (sources, source_dirs, positionelle Eingaben). Eine, die den Namen eines Clause-Moduls trägt, ersetzt es, mit einer Warnung, die beide Dateien nennt.
  2. Clause-Module: die Bibliotheksmodule, bereitgestellte Ersatzmodule eingeschlossen.
  3. source_search_paths, wie unter Projekte beschrieben.

Der Name eines fehlenden Moduls ist reserviert: Eine gleichnamige Datei auf einem Suchpfad (zum Beispiel erts/preloaded/src/prim_file.erl von OTP) wird nicht verwendet, und die Diagnose sagt, dass Clause das Modul nicht bereitstellt. Eine explizite Eingabe darf es dennoch bereitstellen, mit der Ersetzungswarnung.

ignore_modules gilt auch für Clause-Module: Ein ignoriertes Clause-Modul fehlt im Batch, und eine explizite Eingabe kann es dann ohne Warnung bereitstellen, da nichts ersetzt wird.

Dateien

Dokumentierte Funktionen

library/documented.terms listet die öffentlichen Funktionen auf, die OTP 29 für erts, kernel, stdlib, crypto und public_key dokumentiert: {Module, Application, Name, Arity}. pro Funktion, deren Modul- und Funktionsdokumentation nicht verborgen ist und die nicht veraltet ist, beobachtet aus den Doc-Chunks des Host-OTP durch tests/compiler/library/observe_docs.escript (explizit auszuführen). Undokumentierte Exporte bleiben in den Inventaren, dürfen aber Stubs bleiben.

Typen

Weil Clause-Module gegenüber denen von OTP gewinnen, muss OTP-Code, der in seinen Specs file:filename() oder erlang:time_unit() nennt, diese Typen in den Clause-Modulen finden. Jedes bereitgestellte Modul, dessen Gegenstück in OTP Typen exportiert, bindet <module>.types.hrl aus seinem eigenen Verzeichnis ein: die Liste -export_type, dann die exportierten Typen und die lokalen Typen und Records, die sie verwenden, so wie OTP sie definiert (die Dokumentation zeigt dieselben Definitionen; die installierte Dokumentation enthält keine Typdefinitionen, daher stammen sie aus der Implementierung: den Debug-Informationen der Beam-Datei oder dem mitgelieferten Quelltext eines vorgeladenen Moduls wie erlang). escript tests/compiler/library/observe_types.escript LIBRARY APP MODULE schreibt den Header aus dem OTP des Hosts, und --check vergleicht seine Formen mit einer frischen Beobachtung (CTest library_freshness); library_modules.py check verlangt, dass jedes Modul seinen Header einbindet. Typen, die die Header aus Modulen außerhalb des Programms nennen (unicode:chardata(), calendar:datetime()), und die breiten Unions von OTP (file:posix() hat mehr Glieder, als der Typgraph behält) werden ohne Warnung zu term() aufgelöst: Die Diagnosen gehören zur Bibliothek von Clause, nicht zum Programm des Nutzers.

Kernel-Dienste beim Start

file, io und code von OTP rufen registrierte Server auf (file_server_2, code_server, den I/O-Server eines Group Leaders), die die Anwendung kernel beim Booten startet. Eine ausführbare Datei von Clause startet keinen davon: file und io von Clause brauchen keinen Server, logger von Clause startet seinen Server beim ersten Gebrauch, und ein OTP-Modul, das einen braucht, scheitert so, wie es unter OTP ohne diesen Server scheitert (noproc). OTP-Code, der zur Laufzeit code aufruft, funktioniert daher nicht. Das Booten der ganzen Anwendung kernel ist nicht geplant.

Anwendungen

Ledger

Der Projektplan sieht jedes dokumentierte Modul von erts, kernel und stdlib vor; echte Programme (zuerst luerl) setzen die Prioritäten. Es kompilieren und ausführen, jeden Fehler klassifizieren (unknown module, undefined function M:F/A, nicht unterstützte Syntax oder Features, anderes) und jeden einem Plan-Step, einem anderen Backlog-Eintrag oder einer festgehaltenen Ablehnung zuordnen. Ist das stderr des Laufs in einer Datei gespeichert, gibt python tests/compiler/library/library_modules.py report FILE die Klassifikation als Tabellen aus: jedes unbekannte Modul mit seiner Fehleranzahl, aufrufenden Modulen und aufgerufenen Funktionen mit Stelligkeiten; undefinierte Funktionen nach Modul; andere Meldungen mit ihren Anzahlen.

Werkzeuge

Alle liegen in tests/compiler/library/: