понедельник, 29 сентября 2014 г.

[prog.c++] Новое в SObjectizer-5.5

Весь сентябрь шла плотная и напряженная работа над следующей версией SObjectizer - 5.5.0. Вроде бы все очевидные вещи, которые хотелось сделать, сделаны. Некоторые не очевидные вещи отложены "до разъяснения". Фактически, версия 5.5.0 готова. И, если все будет нормально, в среду, 1-го октября, состоится релиз. В этом же посте попробую описать, чем новая версия будет отличаться от предыдущих.

Нового в новой версии как раз совсем не много. Гораздо важнее то, чего в новой версии уже нет :)

А нет ACE Framework-а. Нет совсем.

Это означает, что для использования SObjectizer нужен только сам SObjectizer. Не нужно тащить к себе в зависимости 8MiB архив с ACE. Не нужно бабахаться с его компиляцией. Хорошая экономия, сил, времени и нервов.

Без ACE SObjectizer может спокойно жить под разными компиляторами. Хоть под VC++, хоть под MinGW, хоть под Clang. Не знаю как кому, но когда у меня появилась возможность пользоваться нормальным 64-битовым MinGW-w64 под Windows, это меня очень сильно порадовало. Ну и clang++ под Linux-ом -- это тоже очень приятное дополнение. Возможно, при необходимости можно будет и под FreeBSD попробовать, и под MacOS, и еще где-нибудь.

В общем, отказ от ACE-овского наследия в ядре SObjectizer -- это очень большой шаг вперед.

Последней штукой из ACE, которая крепко держала SObjectizer, был ACE-овский механизм таймерных очередей, на котором работали отложенные и периодические сообщения. Теперь вместо ACE задействована библиотека timertt. Соответственно, в SObjectizer добавилась так же возможность задавать тип таймерного механизма (wheel, heap, list), который должен использоваться SObjectizer RunTime.

В раздел с документацией добавлено описание еще нескольких примеров. Конечно, качество этих описаний (в частности, качество английского) -- это отдельный вопрос. Но общая тенденция меня лично не может не радовать:

Ну а что до качества перевода, то это уже техническая проблема. Если кому-то действительно будет нужно, то все это исправляется в рабочем порядке.

Есть еще одно существенное отличие грядущего релиза от предыдущих, хотя уже больше со знаком "минус". Все идет к тому, что в этот раз будет релиз только ядра SObjectizer-а, библиотеки so_5. А вот полной сборки, т.е. so-assembly, с подпроектами so_sysconf, so_log, so_5_transport, mbapi в этот раз не будет. Тут простое житейское дело: меня на такой объем уже не хватает, у моих коллег нет времени. Поэтому данные подпроекты живут "по остаточному принципу". Впрочем, если кто-то их использует, то пусть даст знать, попробуем решить вопрос :)

Вот как-то так. По сути, релиз версии 5.5.0 должен означать важную веху в развитии SObjectizer. Ведь, действительно, все очевидные вещи, которые напрашивались к реализации (синхронное взаимодействие агентов, например, или отказ от ACE), реализованы. Что не реализовано (защита агентов от перегрузки или же оптимизация работы с динамической памятью в многопоточной среде, или использование lock-free структур данных), то требует намного более тщательной и осторожной проработки, многократных предварительных экспериментов... И, главное: показанных практикой сценариев использования SObjectizer, на которых все это будет не просто востребовано, а даст объективно наблюдаемое/измеряемое улучшение.

Так что, надеюсь, версия 5.5.0 -- это та точка, после которой нужно будет сосредотачиваться уже не столько на самом SObjectizer, сколько на его практической применимости в различных сферах. А это уже совсем другая история.

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