Sortie console (io)
Plan 11 step 40 (2026-10-07) : io:format/1,2 et io:put_chars/1 écrivent
sur la sortie standard. Ce sont des builtins du runtime du module io dans le
catalogue du pont (builtins) ; le runtime implémente en C++ les
règles io_lib_format et io_lib_pretty d'OTP
(io_format.cpp,
io_pretty.cpp).
Appels
io:format(Format)équivaut àio:format(Format, []). Les deux renvoientok.io:put_chars(Chardata)écrit des chardata : caractères Unicode, binaries UTF-8 et listes imbriquées se terminant par[]ou un binary. Toute autre chose (un atome, un surrogate, de l'UTF-8 invalide, un bitstring) lèvebadarg.- Le texte est construit en entier, puis écrit en UTF-8, comme le fait le
périphérique de sortie standard d'OTP en mode
-noshell(encodageunicode). Une erreur n'écrit rien. Une écriture refusée est l'échec du runtimeoutput_failure(code de sortie 70). - Les appels qualifiés,
fun io:format/2,apply(io, format, Args)etM:format(...)atteignent tous les builtins. Les autres fonctions deioconservent le diagnosticunknown module io. Un module du lot nomméione remplace pas les builtins (le moduleiod'OTP est sticky).
Formats
Formatest un atome (ses caractères), un binary (ses octets comme caractères Latin-1) ou une liste. Un élément de liste qui n'est pas un caractère est un chardata écrit tel quel, sans séquences de contrôle, et avance la colonne d'une unité (une bizarrerie d'OTP).- Séquences de contrôle
~F.P.PadModC: largeur de champF(négative ou-: alignée à gauche), précisionP, caractère de remplissage,*prenant un entier (ou le remplissage) dans les arguments, modificateurst(Unicode),l(pas de détection de chaînes) etk(maps ordonnées ; Clause affiche toujours les maps dans l'ordre des clés). Cpris en charge :~w,~p,~s,~c,~b,~B,~i,~n,~~, avec les règles de champ d'OTP :~stronque ou complète jusqu'àPdansF;~wet~baffichent des caractères*lorsque le texte ne tient pas dansF;~crépète le caractère ;~b/~Bprennent la base dansP(2..36) ;~navecFécritFsauts de ligne.- Sans
t,~sn'accepte que des caractères Latin-1 et~cécrit l'octet de poids faible de son entier ;~w/~péchappent les caractères d'atome au-delà de Latin-1 sous la forme\x{...}. Avect,~slit les binaries en UTF-8 (avec repli sur Latin-1) et~pécrit<<"..."/utf8>>pour les binaries UTF-8 imprimables. badarg: un caractère de contrôle inconnu, des arguments manquants ou en trop, un argument du mauvais type,Finférieur àPpour~s/~c, un~pou~naligné à gauche, une base hors de 2..36, une sortie qui n'est pas de l'Unicode.- Non implémentés (
badarg, voir différences) :~e,~f,~g,~x,~X,~+,~#,~W,~Pet le modificateurK.
Affichage formaté (~p)
- La longueur de ligne est
F(80 par défaut, 0 écrit une seule ligne) ; la première colonne estP, sinon la colonne que la sortie a atteinte sur sa ligne (tabulations aux multiples de 8). - Le terme devient la forme intermédiaire d'OTP : chaque valeur avec sa
longueur sur une ligne ; les chaînes (listes plates de caractères Latin-1
imprimables, l'
io:printable_range()par défaut), les binaries imprimables, les atomes et les nombres sont du texte. - Ce qui tient sur le reste de la ligne est écrit en entier. Les listes et les
tuples sont coupés entre les éléments, alignés après le délimiteur
ouvrant ; les tuples étiquetés (
{atom, ...}) s'alignent après l'étiquette, ou sont indentés de 4 (ou 1) lorsque cela dépasserait la moitié de la ligne ; les paires de map et les champs de native record qui ne tiennent pas placent la valeur sur la ligne suivante ; les binaries longs sont coupés entre les octets. - Les conteneurs imbriqués sur plus de 256 niveaux lèvent
system_limit(la mise en page est récursive sur la pile native). - Le formatage s'exécute jusqu'au bout, quelle que soit la taille du terme (portions).
Clause