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

Ошибка Chris-а или странная логика

Нашел баг в Boost.Asio (Boost 1.42 и 1.43 - другие просто не проверял).
Самое неприятное заключается в том, что в первых версиях Boost.Asio такого не было и в том, что это скорее довольно грубая логическая ошибка, чем опечатка.

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

Добавил проект 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 года.