суббота, 3 июля 2010 г.

Упрощаем (и ускоряем?) код за счет избавления от шаблонов

Добавил проект echo_server2 и echo_server3.

1) echo_server2 - почти калька с echo_server, но за счет forward-declarations решена проблема с использованием шаблонов (есть шаблоны - нет разделения интерфейса от реализации, точнее нет раздельной компиляции - а без нее нет и "серьезного тяжеловесного" проекта)

2) echo_server3 - новый подход (заброшеный по глупой причине после ухода с первого места работы), позволяющий использовать традиционную (открываем книжки по ACE - да-да те самые 2 единственные) архитектуру с интерфейсами в качестве обработчиков завершения операций. Однако в отличие от ACE, тут все удобнее + есть поддержка asio custom memory allocation (которую можно использовать и как "удерживатель operation-lifetime-bounded ресурсов - т.е. для того же, для чего в echo_server дополнительно служил параметр шаблона handler). Малого того, что мне удалось полностью выбросить мой же "костыль" handler_storage (видимо не зря Chris его до сих пор игнорировал), так еще и код стал эффективнее, проще, быстрее + появились новые возможности (будут представлены позже) для построения "внутренних" очередей активного объекта с применением asio custom memory allocation.

Кроме того, теперь asio-samples собираются как в Visual Studio 2010 (мне в ней интересны по большей части только меньший объем получаемого кода и поддержка lvalue references - очень важной "фичи" для boost::shared_ptr), так и с иcпользованием Intel C++ Compiler 11.1 (спасибо Intel за evaluation-версию). Для Visual Studio 2010 пришлось покопаться в boost/config, чтобы включить поддержку lvalue references в Boost 1.43 (странно, что ее нет "из коробки"). А вот для Intel-а -
больше. Но это трудно назвать виной Intel - скорее это мое недопонимание каких-то параметров компиляции и некоторая "отсталость" (наверное неслучайная) поддержки C++0x в Boost 1.43 "under Intel C++ Compiler 11.1".

P.S. Думаю написать статью для Хабра - не ради инвайта (не откажусь конечно), но ради того, чтобы получить хоть какую-то критику, коей у меня нет вот уже 2 года.

2 комментария:

Marat комментирует...

Updated: Изменил echo_server. Все же способ хранения handler-a, используемый в этом проекте будет более правильным с теоретической точки зрения и менее error-prone с практической, т.к. реально handler должен удерживаться не самим активным объектом а scheduler-ом. Чему противоречат как echo_server2, так и echo_server3. Указанные проекты оставляю как есть (все таки samples) - никакого дальнейшего развития не планирую (ну разве что исправление багов).

Marat комментирует...

See async_basics2 as a continuation.