# Март 2027 — редакторское ревью после переписывания ## Объём партии - `editorial-2027-03-practice-d-lessons` — 5 555 знаков основного текста; - `editorial-2027-03-mechanism-d-lessons` — 5 409 знаков; - `editorial-2027-03-field-d-lessons` — 5 386 знаков. Stable slugs сохранены. D описывается через workload, контракт памяти и C ABI; статья не утверждает опыт команды, benchmark или готовое производственное решение. ## Проход 1 — факты, техника, пример и источники - **Practice.** До: D рассматривался через абстрактные свойства языка. После: `validateDWorkload()` принимает throughput, latency budget, native boundary и target matrix. Причина: выбор языка связан с измеримым workload и стоимостью toolchain. - **Mechanism.** До: `@safe/@trusted/@system` были перечислены как статусы. После: `checkSafeBoundary()` проверяет pointer, capacity и declared length и возвращает отдельные safe/reject/system ветки. Причина: пример показывает опасную пару pointer/length. - **Field.** До: C ABI объяснялся общими словами о совместимости. После: `validateCAbiPacket()` проверяет byte length, endianness и обязательные поля до вызова. Причина: это конкретный диагностический маршрут для FFI-ошибки. Источники проверены HTTP 200 и применены с границами: - [D Functions](https://dlang.org/spec/function.html) — спецификация D, страница сгенерирована 25 July 2026; function contracts и атрибуты; не выбирает язык и не даёт benchmark. - [D Memory Safety](https://dlang.org/spec/memory-safe-d.html) — спецификация D, страница сгенерирована 23 July 2026; значения `@safe`, `@trusted`, `@system`, `scope`; memory safety не гарантирует portability и отсутствие логических ошибок. - [D ABI](https://dlang.org/spec/abi.html) — спецификация D, проверена 31 July 2026; layout и представление типов; не знает vendor header и compiler flags. - [D Interfacing to C](https://dlang.org/spec/interfaceToC.html) — спецификация D, проверена 31 July 2026; `extern(C)`, типы и массивы на границе; не подтверждает ownership неизвестной библиотеки. ## Проход 2 — структура, голос, плотность и мета-лексика - **Practice.** До: текст звучал как совет попробовать D. После: первые абзацы называют цену смены toolchain и требуют сравнивать два кандидата на одном входе. Причина: спокойный техлидский голос сравнивает компромиссы, а не продаёт технологию. - **Mechanism.** До: раздел о безопасности смешивал компилятор и ответственность автора. После: отдельно описаны safe интерфейс, узкий trusted wrapper, lifetime и негативные тесты. Причина: границы стали проверяемыми. - **Field.** До: C ABI сводился к одинаковому имени структуры. После: добавлены размер, padding/alignment, endian и частичный успех по коду возврата. Причина: читатель получает физический контракт пакета. В body нет внутренней редакционной лексики и авторского сюжета. Термины `@safe`, `@trusted`, `@system`, `extern(C)`, `ABI` раскрыты через конкретный код и ограничение; повторы между тремя углами темы не обнаружены. ## Проход 3 — визуал, мобильная читаемость, доступность и повторы - **Practice.** До: карта показывала вопрос о выборе runtime. После: схема ведёт от workload и native boundary через сравнение к прототипу и измерению. Причина: визуал соответствует `validateDWorkload()`. - **Mechanism.** До: матрица содержала будущие evidence-статусы. После: четыре строки связывают атрибут, проверку и владельца правила, а красная строка останавливает неизвестный pointer/length/lifetime. Причина: схема объясняет границу памяти. - **Field.** До: цикл передавал вопрос следующему владельцу. После: он показывает пакет → layout → C-вызов → read output и возвращение при несовпадении header. Причина: диаграмма стала ABI-алгоритмом. SVG имеют русские title/desc и достаточный alt/caption. Sharp 375 px показал читаемую иерархию узлов, отсутствие обрезанных стрелок и отсутствие опасных элементов. В HTML каждой статьи есть таблица с заголовками столбцов. ## Проверки ```text node --check scripts/upgrade-2027-03.mjs — PASS node scripts/upgrade-2027-03.mjs --verify-fixture — PASS, 4/4 npm run audit:draft -- scripts/upgrade-2027-03.mjs — PASS, 3/3 локальные D workload/boundary/ABI examples — PASS, 12/12 для всей партии xmllint --noout для 3 SVG — PASS SVG safety scan — PASS Sharp resize width=375 для 3 SVG — PASS; визуально проверены карта, матрица и ABI-цикл strict cross-article scan января–апреля: collisions: [] ``` Git, registry, README, `articles.json`, приложение и файлы других месяцев не изменялись.