Saída para a consola (io)
Plano 11, step 40 (2026-10-07): io:format/1,2 e io:put_chars/1 escrevem
na saída padrão. São builtins do runtime do módulo io no catálogo da ponte
(builtins); o runtime implementa as regras de io_lib_format e
io_lib_pretty do OTP em C++ (io_format.cpp,
io_pretty.cpp).
Chamadas
io:format(Format)equivale aio:format(Format, []). Ambas devolvemok.io:put_chars(Chardata)escreve chardata: carateres Unicode, binaries UTF-8 e listas aninhadas terminadas em[]ou num binary. Qualquer outra coisa (um átomo, um surrogate, UTF-8 inválido, um bitstring) lançabadarg.- O texto é construído por inteiro e depois escrito em UTF-8, tal como faz o
dispositivo de saída padrão do OTP no modo
-noshell(codificaçãounicode). Um erro não escreve nada. Uma escrita rejeitada é a falha do runtimeoutput_failure(código de saída 70). - Chamadas qualificadas,
fun io:format/2,apply(io, format, Args)eM:format(...)chegam todas aos builtins. As outras funções deiomantêm o diagnósticounknown module io. Um módulo do lote chamadoionão substitui os builtins (oiodo OTP é sticky).
Formatos
Formaté um átomo (os seus carateres), um binary (os seus bytes como carateres Latin-1) ou uma lista. Um elemento da lista que não seja um carater é chardata escrito tal como está, sem sequências de controlo, e avança a coluna uma posição (uma peculiaridade do OTP).- Sequências de controlo
~F.P.PadModC: largura do campoF(negativa ou-: alinhado à esquerda), precisãoP, carater de preenchimento,*que retira um inteiro (ou o preenchimento) dos argumentos, modificadorest(Unicode),l(sem deteção de strings) ek(maps ordenados; o Clause imprime sempre os maps por ordem das chaves). Csuportados:~w,~p,~s,~c,~b,~B,~i,~n,~~, com as regras de campo do OTP:~strunca ou preenche atéPdentro deF;~we~bimprimem carateres*quando o texto não cabe emF;~crepete o carater;~b/~Bobtêm a base deP(2..36);~ncomFescreveFmudanças de linha.- Sem
t,~saceita apenas carateres Latin-1 e~cescreve o byte menos significativo do seu inteiro;~w/~pescapam os carateres de átomos fora do Latin-1 como\x{...}. Comt,~slê binaries como UTF-8 (recorrendo a Latin-1 em alternativa) e~pescreve<<"..."/utf8>>para binaries UTF-8 imprimíveis. badarg: um carater de controlo desconhecido, argumentos em falta ou a mais, um argumento do tipo errado,Fmenor do quePpara~s/~c, um~pou~nalinhado à esquerda, uma base fora de 2..36, uma saída que não é Unicode.- Não implementado (
badarg, ver diferenças):~e,~f,~g,~x,~X,~+,~#,~W,~Pe o modificadorK.
Impressão formatada (~p)
- O comprimento da linha é
F(por omissão 80; 0 escreve uma só linha); a primeira coluna éPou, caso contrário, a coluna que a saída já atingiu na sua linha (tabulações para múltiplos de 8). - O termo passa à forma intermédia do OTP: cada valor com o seu comprimento
numa linha; strings (listas planas de carateres Latin-1 imprimíveis, o
io:printable_range()por omissão), binaries imprimíveis, átomos e números são texto. - O que cabe no resto da linha é escrito por inteiro. Listas e tuplos quebram
entre elementos, alinhados após o parêntese; tuplos etiquetados
(
{atom, ...}) alinham após a etiqueta, ou indentam 4 (ou 1) posições quando isso ultrapassaria metade da linha; pares de maps e campos de native records que não cabem colocam o valor na linha seguinte; binaries longos quebram entre bytes. - Contentores aninhados a mais de 256 níveis de profundidade lançam
system_limit(a disposição é recursiva na pilha nativa). - A formatação corre até ao fim, por maior que seja o termo (porções).
Clause