Salida por consola (io)
Plan 11 step 40 (2026-10-07): io:format/1,2 e io:put_chars/1 escriben en
la salida estándar. Son builtins del runtime del módulo io en el catálogo del
puente (builtins); el runtime implementa en C++ las reglas de
io_lib_format e io_lib_pretty de OTP
(io_format.cpp,
io_pretty.cpp).
Llamadas
io:format(Format)equivale aio:format(Format, []). Ambas devuelvenok.io:put_chars(Chardata)escribe chardata: caracteres Unicode, binaries UTF-8 y listas anidadas que terminan en[]o en un binary. Cualquier otra cosa (un átomo, un sustituto (surrogate), UTF-8 no válido, un bitstring) lanzabadarg.- El texto se construye completo y luego se escribe como UTF-8, como hace el
dispositivo de salida estándar de OTP en modo
-noshell(codificaciónunicode). Un error no escribe nada. Una escritura rechazada es el fallo del runtimeoutput_failure(salida 70). - Las llamadas cualificadas,
fun io:format/2,apply(io, format, Args)yM:format(...)llegan todas a los builtins. Las demás funciones deioconservan el diagnósticounknown module io. Un módulo del lote llamadoiono sustituye a los builtins (eliode OTP es sticky).
Formatos
Formates un átomo (sus caracteres), un binary (sus bytes como caracteres Latin-1) o una lista. Un elemento de la lista que no es un carácter es chardata que se escribe tal cual, sin secuencias de control, y avanza la columna en uno (una peculiaridad de OTP).- Secuencias de control
~F.P.PadModC: ancho de campoF(negativo o-: alineado a la izquierda), precisiónP, carácter de relleno,*que toma un entero (o el relleno) de los argumentos, modificadorest(Unicode),l(sin detección de cadenas) yk(maps ordenados; Clause siempre imprime los maps en orden de claves). Cadmitidos:~w,~p,~s,~c,~b,~B,~i,~n,~~, con las reglas de campo de OTP:~strunca o rellena hastaPdentro deF;~wy~bimprimen caracteres*cuando el texto no cabe enF;~crepite el carácter;~b/~Btoman la base deP(2..36);~nconFescribeFsaltos de línea.- Sin
t,~ssolo acepta caracteres Latin-1 y~cescribe el byte bajo de su entero;~w/~pescapan los caracteres de átomos fuera de Latin-1 como\x{...}. Cont,~slee los binaries como UTF-8 (con Latin-1 como alternativa) y~pescribe<<"..."/utf8>>para binaries UTF-8 imprimibles. badarg: un carácter de control desconocido, argumentos que faltan o sobran, un argumento de tipo incorrecto,Fmenor quePpara~s/~c, un~po~nalineado a la izquierda, una base fuera de 2..36, una salida que no es Unicode.- No implementados (
badarg, véase diferencias):~e,~f,~g,~x,~X,~+,~#,~W,~Py el modificadorK.
Impresión legible (~p)
- La longitud de línea es
F(80 por defecto; 0 escribe una sola línea); la primera columna esP, o si no, la columna que la salida ha alcanzado en su línea (los tabuladores avanzan a múltiplos de 8). - El término se convierte en la forma intermedia de OTP: cada valor con su
longitud en una línea; las cadenas (listas planas de caracteres Latin-1
imprimibles, el
io:printable_range()por defecto), los binaries imprimibles, los átomos y los números son texto. - Lo que cabe en el resto de la línea se escribe completo. Las listas y las
tuplas se parten entre elementos, alineadas tras el corchete o la llave; las
tuplas etiquetadas (
{atom, ...}) se alinean tras la etiqueta, o se sangran 4 (o 1) posiciones cuando eso superaría la mitad de la línea; los pares de maps y los campos de native records que no caben ponen el valor en la línea siguiente; los binaries largos se parten entre bytes. - Los contenedores anidados a más de 256 niveles lanzan
system_limit(la maquetación es recursiva sobre la pila nativa). - El formateo se ejecuta hasta el final, por grande que sea el término (porciones).
Clause