вторник, 30 декабря 2025 г.

[prog.c++] Двадцать лет назад была опубликована первая статья о SObjectizer

30-го декабря 2005-го года в печатном(!!!) номере журнала RSDN Magazine (ага, был такой) вышла статья SObjectizer: I Love This Game!. В ней впервые описывался SObjectizer-4 из которого в 2010-ом вырос и нынешний SObjectizer-5.

Сейчас самому очень интересно читать про SO-4.

Во-первых, все уже основательно забыто, читаешь как про незнакомый для тебя проект. И при этом забавно находить какие-то привычные по SO-5 вещи.

Во-вторых, не верится, что это все писал ты сам. Только на 20 лет моложе и гораздо более уверенный и в своих силах, и в своих решениях.

Через некоторое время после публикации этой статьи исходные тексты SO-4 были размещены на SourceForge и SObjectizer перешел в категорию OpenSource проектов. Что и определило его дальнейшую судьбу. Ведь благодаря тому, что в 2006-ом открыли SO-4, в 2013-ом был открыт и SO-5. А это позволило нам продолжить работать над SO-5 и после ухода из компании Интервэйл, где SObjectizer появился. Не случись той первой статьи о SObjectizer, возможно и SO-4, и SO-5 так и остались бы внутренними проектами компании. И, скорее всего, тихо бы умерли с годами в связи закрытием проектов, в которых SObjectizer использовался.

Более того, не случись первой статьи о SO-4, возможно, никакого бы SO-5 и не появилось бы вовсе. В процессе обсуждения SObjectizer-а в Интернете (в первую очередь вспоминаются диалоги с Дмитрием Вьюковым) стало понятно, что SO-4 достиг своего потолка, что его возможности по развитию полностью исчерпаны, что нужно делать новую итерацию, оставив самое важное, но исправив допущенные ошибки.

На осмысление всего этого требовалось время. Но, в итоге, в 2010-ом разработка SO-5 стартовала. И, к счастью, продолжается до сих пор. Что вряд ли произошло бы без той самой "SObjectizer: I Love This Game!" в декабре 2005-го.


Пока писал эти строки поймал себя на том, что одной из причин, по которой SO-4 не вызвал интереса в 2005-ом, была роль C++ в тогдашнем ИТ. Прекрасно помню, как C++ тогда стремительно превращался из мейнстрима в маргинальный язык, который принято ругать и ни в коем случае нельзя брать для разработки.

Спустя 20 лет как будто все тоже самое: С++ -- это тот самый язык, который принято ругать и ни в коем случае нельзя брать для разработки. Если, конечно, слушать всяких экспертных экспертов в Интернете 😁

Только 20 лет назад предлагали валить с C++ на Java и C#. А сейчас с C++ на Go или Rust. Но валить надо, хоть в этом есть какая-то стабильность 😏

Что уж поделать, реальность такова, что мы пишем код на C++, живем с недостатками C++ и делаем инструмент, упрощающий нам жизнь именно с C++. Работай мы на Java, C# или Rust-е, возможно, сделали бы что-то вроде SObjectizer-а и для этих языков. Но выглядело бы это точно иначе. А пока мы продолжаем программировать на C++, то и SObjectizer остается на C++ и для C++. Се ля ви.


Если же продолжить тему юбилеев (а ведь в 2025-ом исполнилось 15 лет пятому SObjectizer-у), то самим идеям, которые легли в основу сперва SCADA Objectizer, а затем и SObjectizer, уже лет тридцать. Если мне не изменяет склероз, то сформулированы они были осенью 1995-го года.

Дело было так. В октябре 1994-го меня и еще двух моих друзей-сокурсников пригласил работать в свой отдел в КБ Системного Программирования Аркадий Косарев. Как раз для того, чтобы нашими силами делать новую объектно-ориентированную SCADA-систему. И вот с осени 1994-го по весну 1995-ого мы будучи студентами пятого курса + еще один наш молодой коллега, Василий Гайдуков (он закончил наш же универ на год раньше), пытались родить какие-то идеи для будущей SCADA-системы. Без особого успеха, что было вполне ожидаемо.

Но в 1995-ом в наш отдел пришел Андрей Лабыч и с лета 1995-го работы над новой SCADA-системой получили мощный толчок. Главным образом усилиями Андрея Лабыча. Помнится, именно он сформулировал основные принципы: система строится из именованных агентов, агенты обслуживаются диспетчером, обмениваются информацией друг с другом только посредством именованных сообщений, для получения сообщения нужно подписаться на сообщение, а реакция на сообщения зависит от текущего состояния агента, при этом в каждом состоянии могут быть свои уникальные подписки, а если агент не имеет подписки на сообщение в своем текущем состоянии, то сообщение выбрасывается.

Как именно рождались идеи SCADA Objectizer я уже не помню, но вспоминается, что большее влияние оказала книга "Объектно-ориентированный анализ: моделирование мира в состояниях" за авторством С.Шлеер и С.Меллор.

Не помню и когда именно появилось само название SCADA Objectizer. Почему-то кажется, что позже, году в 1997-ом, если не в 1998-ом. Но вот в том, что базовые принципы будущего SCADA Objectizer-а были сформулированы осенью 1995-го или зимой 1996-го практически уверен.

В общем, как-то очень уж долго я варюсь в этой теме агентов, асинхронно общающихся друг с другом посредством сообщений. Но, тем не менее, все еще love this game! Отличный все-таки был выбран заголовок для статьи 20 лет назад. До сих пор актуальный.


В Интернете все еще валяется руководство по программированию на SObjectizer-4 под скромным названием SObjectizer-4 Book 😲