вторник, 21 апреля 2026 г.

NoTree

 https://gitlab.com/lulinalex/l3-manifest/-/blob/main/noTree/NoTree.md?ref_type=heads

Дерево — в топку. 20 лет борьбы с иерархией в программной инженерии

«Дерево мешало. Лет 20.»

📜 Описание

Эта статья — детектив. История поиска, ошибок, прозрений. История о том, как я 20 лет боролся с деревьями (Rational Rose, XML, EVD) и в итоге победил, сформулировав метод: «Атомы + связи. Алфавит и индексы сбоку. Геометрия 6-го класса».

🗺️ Оглавление

Часть 1. Истоки: Естественность (1993 – 1996)

  • 1.1. 1993, МИЭМ: Дейкстра без деревьев — Плоский список станций и рёбер. Сортировка как индексы. Никаких «матриц смежности».
  • 1.2. 1996, «Диасофт-Иншуранс»: Предтеча Храма — Визуализация деревьями, хранение Key-Value (BTrieve). Свой ORM, дизайнер на формах. «Мне это было естественно. Деревья не давили.»
  • 1.3. BTrieve + DDF: Рождение паттерна — Data Definition Files — «вид сбоку». Атомы + индексы.
  • 1.4. Выбор стратегии: BTrieve vs SQL — Соседние подразделения уходят на Oracle. «Партнёрские отношения — это не про технологии.»

Часть 2. Забвение: Плен стереотипов (2000 – 2015)

  • 2.1. «Гарант F1»: Поражение и вынужденная победа — EVD → иерархическая база ENDT. Вынужденный переход на плоские таблицы (из-за масштаба).
  • 2.2. Ад с CORBA — Передача деревьев между клиентом и сервером. «Корбе древесность — ТОЖЕ НЕ НРАВИЛАСЬ!»
  • 2.3. EVD: Локальная победа (текст и оформление раздельно) — Сегменты (позиция, длина, стиль) — отдельно от текста. CoreText пришёл к этому позже. «Это было гениально. Не побоюсь этого слова.»
  • 2.4. EVD: Добровольное рабство — «Я сделал его древесным. Хотя на меня никто не давил». Собственный стереотип — самый сильный.
  • 2.5. Другие пленники: Кирилл Пугин и ANTLR — Грамматика на ANTLR, структуры на C++. НО ВСЁ РАВНО — ДРЕВЕСНЫЕ!!! Проект забуксовал. Кирилл уехал в Microsoft. «В головах уже устойчиво засела древесная парадигма».
  • 2.6. Два крыла победы: «Гарант F1» и iГарант — Клиент-сервер и iOS, один паттерн. Плоский список параграфов + индексы сбоку. NSDictionary вместо EVD/JSON.

Часть 3. Освобождение и стройка (2015 – 2026)

  • 3.1. Отступление: Рациональное (Rational) давит (2015) — Четыре древесные реализации. Рисовалка 1.0 под FMX. Блог, CodeGen39, DumpModelElement. «Дерево стояло как проклятье».
  • 3.2. ОСОЗНАНИЕ (2016) — Generation.ms.dict, GenerationFramework.ms.dict. «"Обход дерева" был выкинут нахер как понятие!» Алгебра отношений. Кантор, Колмогоров, Степанов.
  • 3.3. ME 1.0: Отказ от иерархии в модели (2017–2018) — Каждый элемент — в своём файле (ME_XXXX.ms.model.script). Плоский список. Явные ссылки (MELINK Original).
  • 3.4. ME 2.0: Ленивость как ключевое свойство (2019–2020) — WL (Word Link), HWL (Hard Word Link). «Пол-шага, которые изменили всё».
  • 3.5. Рисовалка 2.0: VCL + MSS (2021–2022) — Визуалка на Delphi, бизнес-логика на скриптах. Чистый View (диаграммы отдельно). Мотивация: «а вдруг придётся уходить на C++? Скрипты перенесу, а бизнес-логика останется».
  • 3.6. Архивариус: Плоские индексы (2023–2024) — DDF 2.0, Key-Value. Кусочная обработка, дельта-обновления.
  • 3.7. Храм: Интеграция (2025–2026) — Модель, генератор, рисовалка, скрипты — единая экосистема. Публикация манифеста «Дерево — в топку».

Часть 4. Главный вывод

  • 4.1. Почему дерево — в топку — Древесность МЕШАЕТ кусочной обработке (дельта-обновлениям) и ленивой загрузке.
  • 4.2. Git: тот же путь (подтверждение метода) — CVS, RCS, Subversion — ДРЕВЕСНЫЕ системы контроля версий. Git (2005) — ПЛОСКИЙ СПИСОК объектов + индексы (хеши). Git победил. «Git прошёл ТОТ ЖЕ ПУТЬ. Линус Торвальдс пришёл к ТОМУ ЖЕ решению.»
  • 4.3. Novell и BTrieve: «додумываю за них» — Файловая система — дерево. FindFirst/FindNext — обход дерева. BTrieve — плоский список + индексы. Novell выбрал BTrieve для NetWare (миллионы файлов). «Хотя про Novell может это и мои фантазии. НО я "за них додумываю".»
  • 4.4. Ирония судьбы: HyTech и «древесные словари сбоку» — «У нас есть версия Архивариуса на HyTech. Там — никаких деревьев. Битовые маски. Арифметика. Алгебра отношений.» «А "древесные словари" (Типы, Органы, Территории) мы натягивали сбоку.» Парадокс: я использовал правильный метод ВЕЗДЕ, где мог (BTrieve, HyTech, iГарант, Архивариус). КРОМЕ ОДНОГО МЕСТА — САМОЙ МОДЕЛИ (Rational Rose, EVD, XML). «ВЕЗДЕ — древесность СБОКУ, но НА МОДЕЛИ древесность преодолевали почти 20 лет.»
  • 4.5. Отражение реальности: документы и справки как два списка — «Справка — это атрибут документа. Но у наших юристов — отдельный сорт. С 1990 года.» «Вы не "исправляете" доменную модель. Вы просто создаёте два плоских списка: один для документов, другой для справок.» «Список "сбоку" можно построить "какой угодно". Хоть чётные/нечётные.» Алгебра отношений не диктует структуру. Она позволяет отразить любую реальность.
  • 4.6. «Метод с точкой» vs Функция: Хоор и «Методы обработки записей» — «Была классическая статья. Хоор "Методы обработки записей". Так вот "на самом деле", там не про записи. Там ООП "в чистом виде".» «Методы обработки записей» — название, которое вводит в заблуждение. Просто тогда ещё термин ООП не придумали. ООП — это не про «точки». ООП — это про ADT и полиморфизм. «Многие сказали бы: "это не ООП". Ирония. Я правда ООП "в чистом виде" и не люблю.» Ваш код — продолжение традиции Хоора: ADT, операции, полиморфизм. Синтаксис «функция от объекта» — не анти-ООП, а ООП в изначальном смысле.
  • 4.7. Паттерн един: «Вид сбоку» — BTrieve + DDF, Гарант F1, iГарант, Архивариус, Git, HyTech, Храм — одно и то же.
  • 4.8. Осознание — «Локально я сделал то же самое. Но глобально — привязался к иерархии.» «Осознание пришло в 2016. 10 лет стройки.»
  • 4.9. Геометрия 6-го класса — Точки — атомы (ME, станции, параграфы, ключи, объекты Git, битовые маски). Линии — связи (MEREF, пути, индексы, хеши). Веса — атрибуты (MEPROP, время проезда, стили).
  • 4.10. Библиотека — «В районных библиотеках книги расставляют по тематикам (дерево). А в больших и серьёзных библиотеках книги просто стоят на полках в алфавитном порядке (плоский список).» «А классифицируют книги — специальные "индексы" — набор карточек в ящичках.» Районная библиотека — удобна для маленьких собраний. Большая библиотека — единственный способ работать с миллионами томов. Индексы (каталоги) — это «вид сбоку». Мой метод — это «большая библиотека». «Геометрия 6-го класса. Точки — книги. Линии — индексы. Плоскость — полка.»
  • 4.11. Финальная формулаАтомы + атрибуты атомов = Алфавит. Индексы в виде Key-Value сбоку = Отношения.

💎 Ключевые цитаты

«Дерево мешало. Лет 20.» «Мне это было естественно.» «DDF был "натянут" сбоку.» «Это было гениально. Не побоюсь этого слова.» «В головах уже устойчиво засела древесная парадигма.» «Дерево стояло как проклятье.» «"Обход дерева" был выкинут нахер как понятие!» «Пол-шага, которые изменили всё.» «Ленивость — не оптимизация, а ключевое свойство.» «Две платформы. Один паттерн.» «Одно и то же. "Вид сбоку".» «Локально я сделал то же самое. Но глобально — привязался к иерархии.» «Осознание пришло в 2016. 10 лет стройки.» «Ведь тот же Git - ТОЖЕ УСТРОЕН плоско + индексы. В отличии от RCS/CVS.» «Git прошёл ТОТ ЖЕ ПУТЬ!» «Дерево файловой системы + FindFirst/FindNext — причём. И видимо именно поэтому Novell использовал BTrieve.» «Хотя про Novell может это и мои фантазии. НО я "за них додумываю".» «У нас есть версия Архивариуса на HyTech. Там — никаких деревьев. Битовые маски. Арифметика. Алгебра отношений.» «А "древесные словари" (Типы, Органы, Территории) мы натягивали сбоку.» «ВЕЗДЕ — древесность СБОКУ, но НА МОДЕЛИ древесность преодолевали почти 20 лет.» «Справка — это атрибут документа. Но у наших юристов — отдельный сорт. С 1990 года.» «Вы не "исправляете" доменную модель. Вы просто создаёте два плоских списка.» «Список "сбоку" можно построить "какой угодно". Хоть чётные/нечётные.» «Была классическая статья. Хоор "Методы обработки записей". Так вот "на самом деле", там не про записи. Там ООП "в чистом виде".» «"Методы обработки записей" — название, которое вводит в заблуждение. Просто тогда ещё термин ООП не придумали.» «Многие сказали бы: "это не ООП". Ирония. Я правда ООП "в чистом виде" и не люблю.» «А вдруг придётся уходить на C++? Скрипты перенесу, а бизнес-логика останется.» «В районных библиотеках книги расставляют по тематикам (дерево). А в больших и серьёзных библиотеках книги просто стоят на полках в алфавитном порядке (плоский список).» «А классифицируют книги — специальные "индексы" — набор карточек в ящичках.» «Всё верно. И всё просто. Геометрия 6-го класса.»

🔗 Приложения


😉☝️ ++!

Комментариев нет:

Отправить комментарий