Вивід на консоль (io)
План 11, крок 40 (2026-10-07): io:format/1,2 і io:put_chars/1 пишуть у
стандартний вивід. Це вбудовані функції runtime модуля io у каталозі мосту
(вбудовані функції); runtime реалізує правила OTP
io_lib_format і io_lib_pretty на C++ (io_format.cpp,
io_pretty.cpp).
Виклики
io:format(Format)— цеio:format(Format, []). Обидва повертаютьok.io:put_chars(Chardata)пише chardata: символи Unicode, бінарні дані (binary) в UTF-8 і вкладені списки, що закінчуються на[]або binary. Будь-що інше (атом, сурогат, некоректний UTF-8, bitstring) породжуєbadarg.- Текст будується повністю, а потім записується як UTF-8, як це робить
пристрій стандартного виводу OTP у режимі
-noshell(кодуванняunicode). Помилка нічого не записує. Відхилений запис — це збій runtimeoutput_failure(код виходу 70). - Кваліфіковані виклики,
fun io:format/2,apply(io, format, Args)іM:format(...)усі доходять до вбудованих функцій. Інші функціїioзберігають діагностикуunknown module io. Модуль пакета з ім'ямioне замінює вбудовані функції (ioв OTP є «липким», sticky).
Формати
Format— це атом (його символи), binary (його байти як символи Latin-1) або список. Елемент списку, що не є символом, — це chardata, що пишеться як є, без керівних послідовностей, і зсуває стовпчик на одиницю (особливість OTP).- Керівні послідовності
~F.P.PadModC: ширина поляF(від'ємна або-: вирівнювання ліворуч), точністьP, символ заповнення,*, що бере ціле число (або символ заповнення) з аргументів, модифікаториt(Unicode),l(без розпізнавання рядків) іk(впорядковані map; Clause завжди друкує map у порядку ключів). - Підтримувані
C:~w,~p,~s,~c,~b,~B,~i,~n,~~, з правилами полів OTP:~sобрізає або доповнює доPу межахF;~wі~bдрукують символи*, коли текст не вміщується вF;~cповторює символ;~b/~Bберуть основу числення зP(2..36);~nзFпишеFпереведень рядка. - Без
t~sприймає лише символи Latin-1, а~cпише молодший байт свого цілого числа;~w/~pекранують символи атомів поза Latin-1 як\x{...}. Зt~sчитає binary як UTF-8 (з поверненням до Latin-1), а~pпише<<"..."/utf8>>для друковних binary в UTF-8. badarg: невідомий керівний символ, бракує аргументів або є зайві, аргумент неправильного типу,Fменше заPдля~s/~c, вирівняні ліворуч~pчи~n, основа поза 2..36, вивід, що не є Unicode.- Не реалізовано (
badarg, див. відмінності):~e,~f,~g,~x,~X,~+,~#,~W,~Pі модифікаторK.
Форматований друк (~p)
- Довжина рядка —
F(типово 80, 0 пише один рядок); перший стовпчик —P, інакше стовпчик, якого вивід досяг у своєму рядку (табуляції до кратних 8). - Терм перетворюється на проміжну форму OTP: кожне значення з довжиною в один
рядок; рядки (пласкі списки друковних символів Latin-1, типовий
io:printable_range()), друковні binary, атоми й числа є текстом. - Те, що вміщується в залишок рядка, пишеться повністю. Списки й кортежі
розриваються між елементами з вирівнюванням після дужки; позначені кортежі
(
{atom, ...}) вирівнюються після мітки або мають відступ 4 (чи 1), коли інакше вийшли б за половину рядка; пари map і поля native record, що не вміщуються, переносять значення на наступний рядок; довгі binary переносяться між байтами. - Контейнери з вкладеністю понад 256 рівнів породжують
system_limit(розкладка рекурсивно використовує нативний стек). - Форматування виконується до кінця, хоч яким великим був би терм (порції).
Clause