Ориентация главы

Том 4 отвечает на вопрос «как программа обрабатывает произвольные данные, не являющиеся кодом». Он делится на две части: первая половина (главы 25~29) — инфраструктура текста и байтов — представления и построитель строк, строгий разбор и форматирование чисел, наборы символов и Unicode, тройка кодеков, сжатие; вторая половина (с главы 31) — структурированные данные — динамические значения, JSON, XLON, построчные форматы (JSONL/XLONL), шаблоны и регулярные выражения. Первая половина — фундамент второй: парсеры режут текст функциями строкового семейства, превращают слова в числа семейством числовых функций, работают с многоязычностью семейством наборов символов и защищаются от бомб границами ресурсов — каждая глава будет по имени возвращена во второй половине.

Одна сквозная линия: строгость границ

Важнее «какие функции вы освоили» — одна и та же линия, проходящая через весь том 4: строгость границ. Разбор числа — либо всё верно, либо отказ (глава 26); перекодирование по умолчанию STRICT (глава 27); декодирование не оставляет полрезультата (глава 28); распаковка получает верхний предел (глава 29) — четыре модуля, одна философия: расплывчатая снисходительность на границе — это скрытая угроза, явный отказ — это контракт. Это не случайное единство стиля: текст и байты — поверхность контакта программы с внешним миром, и атаки (инъекции, бомбы, ловушки кодировок), и аварии (усечения, искажения, смещения) входят именно через границу. Прочитав первую половину тома 4, каждая ваша функция, «пожирающая внешние данные», должна естественно нести в себе эту строгость — именно этот моторный навык том и хочет оставить.

Одна быстрая память о пяти главах первой половины

Если унести можно лишь одну фразу, уносите эту: «представления не распределяют, строгость не переносится на завтра, границы не снисходительны, разрастание сначала подсчитывается, распаковка получает предел» — по фразе на главу. Представления главы 25 избавляют текстовые операции от копирования; строгость главы 26 вскрывает примеси в тот же день; пограничная дисциплина глав 27/28 не пускает ловушки кодировок и полрезультаты; формула ёмкости главы 28 делает разрастание вычислимым; предел главы 29 не даёт бомбе сработать. Пять фраз покрывают все ловушки первой половины тома — на собеседовании, на ревью, при написании кода их можно цитировать напрямую.

Тройной прыжок: байты → текст → структура

Стек знаний тома 4 сводится к тройному прыжку. Первая ступень: взаимные превращения байтов и текста — представления (глава 3) — валюта, строковое семейство (глава 25) — операции, кодировки (главы 27/28) — перевод на границе. Вторая ступень: взаимные превращения текста и чисел — разбор и форматирование (глава 26), здесь строгость обретает окончательную форму. Третья ступень: взаимные превращения текста и структуры — JSON/XLON второй половины тома превращает поток символов в дерево значений, шаблоны превращают дерево значений обратно в текст. Каждая ступень стоит на фундаменте предыдущей; перескакивание (например, сразу к JSON без представлений и строгого разбора) оплатится пониманием при отладке.

Советы по чтению и проверка

Последовательное чтение — лучший путь по тому: порядок тройного прыжка и есть порядок глав, пропуск любой ступени потребует «доплаты» при отладке во второй половине. Читатели, уже знакомые с обработкой текста в C, могут промотать главу 25, но замедлиться на философии строгости в главах 26/27 (она противоположна привычкам стандартной библиотеки, которые большинство приносит с собой). Перед выходом из тома — самопроверка из пяти вопросов: когда что использовать — представление или владеющую строку? почему строгий разбор безопаснее снисходительности atoi? какие три меры (байты/единицы/скаляры) когда необходимо различать? какие каналы у Base64 и Percent? почему у распаковки обязательно должен быть предел? Пять вопросов без запинки — первая половина тома 4 сдана, впереди структурированные данные — и тогда вы увидите, что в каждом слое JSON-парсера написаны имена функций этого тома.

Карта знаний тома

1Строки (25)конвейер представлений без распределений / построитель O(n) / полный набор поиска и редактирования
2Числа (26)строгий разбор / кратчайший круговой проход / строки форматирования
3Наборы символов (27)магистраль UTF-8 / перекодирование во все стороны / операции по скалярам
4Кодеки (28)Base64 / Hex / Percent — три моста, ёмкость всегда вычислима в столбик
5Сжатие (29)два режима — разовое и потоковое / детерминированный продукт / бюджет накладных расходов и предел распаковки
6Вторая половина (с 31)динамические значения / JSON / XLON / JSONL и XLONL (построчные записи) / шаблоны / регулярные выражения — всё стоит на фундаменте пяти глав

Таблица интуиции о разрастании и стоимости

«Бюджет интуиции» пяти глав первой половины сводится в одну маленькую таблицу: операции с представлениями — ноль распределений (глава 25), строгий разбор — ноль сюрпризов (глава 26), размер перекодирования вычислим в столбик (глава 27), у разрастания кодирования есть формула (глава 28: 33%/100%/≈0%), у сжатия есть фиксированные накладные расходы (глава 29: около 18 байт контейнера) — каждая глава превращает «стоимость» из догадки в арифметику. Читая вместе: первая половина тома 4 — это набор инструментов, делающий все имплицитные издержки обработки текста явными — вы всегда знаете, чем платите на каждом шаге и за что.

Три типа читателей — три маршрута

Прикладные разработчики (в основном пишут бизнес-логику): внимательно читайте главы 25/26 — строки и числа нужны каждый день; для 27/28/29 достаточно уловить философию, функции смотрите в шпаргалке по мере надобности. Разработчики протоколов и инфраструктуры: читайте всё внимательно — каждый ваш слой работает на функциях этого тома, строгость и представление о производительности напрямую формируют форму интерфейсов, которые вы проектируете. Читатели, пришедшие из динамических языков: сперва скорректируйте два ожидания — строка в C не объект, а представление плюс конвенция (глава 3); у «превращения числа в строку» нет неявной магии, только явный разбор и форматирование (глава 26); после корректировки API этого тома покажутся на удивление правильными — потому что они делают явным всё то, что в рантайме динамических языков делается неявно.

Взгляд на производительность: том не гонится за микрооптимизациями

Функции тома 4 по большей части работают на границах данных (вход парсеров, выход протоколов, слой отображения), и их характеристики производительности подчиняются одной закономерности: пограничных операций на порядки меньше, чем операций над данными — конфигурация разбирается один раз, заголовки запроса — по разу на запрос, а вызванная ими бизнес-обработка может исполниться миллион раз. Поэтому центр оптимизации здесь — «не делать лишних распределений» (конвейер представлений, построитель), а не микрооптимизация каждой функции; по-настоящему высокочастотная обработка текста (потоки протоколов) получит специализированные потоковые формы в томе 7. Вкладывайте силы оптимизации в правильный слой — так разделяются взгляды на производительность тома 4 и тома 3 (контейнеры — постоянные гости горячих путей).

Связь с предыдущим и следующим томами

Связь назад: модель ошибок тома 1 (глава 4) несёт все пути отказа этого тома — за каждым «целым отказом» здесь стоит слот ошибки, записывающий категорию и позицию; система памяти (главы 5/7) несёт владение строками и буферами — разделение владеющих продуктов и заимствованных представлений — это язык владения тома 1, воплощённый в текстовом слое; границы ресурсов (глава 3) в этом томе заступают на службу дважды (предел распаковки, границы парсинга). Связь вперёд: динамические значения главы 30 стоят на числах и кодировках этого тома — кратчайший круговой проход чисел с плавающей точкой напрямую становится стратегией вывода по умолчанию для сериализации JSON; разбор заголовков, кодирование содержимого и обработка URL в HTTP тома 9 — протокольный парад полного набора этого тома, и частота, с которой вы будете возвращаться к его шпаргалкам, вас удивит. Текст — лингва франка мира данных: в этом томе вы учите не «несколько строковых функций», а грамматику этого языка и его правила безопасности; грамматика заставляет данные течь, правила не дают потоку выйти из берегов.

📖 Справочники API в этой главе:string (92 записей)codec (26 записей)

Полные сигнатуры, ограничения параметров, возвращаемые значения и ошибки