54 lines
6.6 KiB
Markdown
54 lines
6.6 KiB
Markdown
# Март 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`, приложение и файлы других месяцев не изменялись.
|