Konsolenausgabe (io)
Plan 11, step 40 (2026-10-07): io:format/1,2 und io:put_chars/1 schreiben
auf die Standardausgabe. Sie sind Runtime-Builtins des Moduls io im
Brückenkatalog (Builtins); die Runtime implementiert die Regeln
von io_lib_format und io_lib_pretty aus OTP in C++
(io_format.cpp,
io_pretty.cpp).
Aufrufe
io:format(Format)istio:format(Format, []). Beide gebenokzurück.io:put_chars(Chardata)schreibt Chardata: Unicode-Zeichen, UTF-8-binaries und verschachtelte Listen, die auf[]oder ein binary enden. Alles andere (ein Atom, ein Surrogat, ungültiges UTF-8, ein bitstring) löstbadargaus.- Text wird vollständig aufgebaut und dann als UTF-8 geschrieben, wie es das
Standardausgabegerät von OTP im Modus
-noshelltut (Kodierungunicode). Ein Fehler schreibt nichts. Ein abgewiesener Schreibvorgang ist der Runtime-Fehleroutput_failure(Exit 70). - Qualifizierte Aufrufe,
fun io:format/2,apply(io, format, Args)undM:format(...)erreichen alle die Builtins. Andereio-Funktionen behalten die Diagnoseunknown module io. Ein Batch-Modul namensioersetzt die Builtins nicht (dasiovon OTP ist sticky).
Formate
Formatist ein Atom (seine Zeichen), ein binary (seine Bytes als Latin-1-Zeichen) oder eine Liste. Ein Listenelement, das kein Zeichen ist, ist Chardata, wird unverändert ohne Steuersequenzen geschrieben und rückt die Spalte um eins vor (eine Eigenheit von OTP).- Steuersequenzen
~F.P.PadModC: FeldbreiteF(negativ oder-: linksbündig), GenauigkeitP, Füllzeichen,*entnimmt eine Ganzzahl (oder das Füllzeichen) den Argumenten, Modifikatorent(Unicode),l(keine String-Erkennung) undk(geordnete maps; Clause gibt maps immer in Schlüsselreihenfolge aus). - Unterstützte
C:~w,~p,~s,~c,~b,~B,~i,~n,~~, mit den Feldregeln von OTP:~skürzt oder füllt aufPinnerhalb vonF;~wund~bgeben*-Zeichen aus, wenn der Text nicht inFpasst;~cwiederholt das Zeichen;~b/~Bnehmen die Basis ausP(2..36);~nmitFschreibtFZeilenumbrüche. - Ohne
tnimmt~snur Latin-1-Zeichen, und~cschreibt das niedrige Byte seiner Ganzzahl;~w/~pmaskieren Atomzeichen jenseits von Latin-1 als\x{...}. Mittliest~sbinaries als UTF-8 (mit Rückfall auf Latin-1), und~pschreibt<<"..."/utf8>>für druckbare UTF-8-binaries. badarg: ein unbekanntes Steuerzeichen, fehlende oder überzählige Argumente, ein Argument falschen Typs,Fkleiner alsPfür~s/~c, ein linksbündiges~poder~n, eine Basis außerhalb von 2..36, Ausgabe, die kein Unicode ist.- Nicht implementiert (
badarg, siehe Unterschiede):~e,~f,~g,~x,~X,~+,~#,~W,~Pund der ModifikatorK.
Formatierte Ausgabe (~p)
- Die Zeilenlänge ist
F(Standard 80, 0 schreibt eine Zeile); die erste Spalte istP, sonst die Spalte, die die Ausgabe in ihrer Zeile erreicht hat (Tabs auf Vielfache von 8). - Der Term wird zur Zwischenform von OTP: jeder Wert mit seiner einzeiligen
Länge; Strings (flache Listen druckbarer Latin-1-Zeichen, das standardmäßige
io:printable_range()), druckbare binaries, Atome und Zahlen sind Text. - Was auf den Rest der Zeile passt, wird ganz geschrieben. Listen und Tupel
brechen zwischen Elementen um, ausgerichtet nach der Klammer; getaggte Tupel
(
{atom, ...}) richten sich nach dem Tag aus oder rücken um 4 (oder 1) ein, wenn das über die halbe Zeile hinausginge; map-Paare und Felder von native records, die nicht passen, setzen den Wert in die nächste Zeile; lange binaries brechen zwischen Bytes um. - Container, die tiefer als 256 verschachtelt sind, lösen
system_limitaus (das Layout rekursiert auf dem nativen Stack). - Die Formatierung läuft bis zum Ende, egal wie groß der Term ist (Portionen).
Clause