[00:25:00] <valexey> vlad2: http://habrahabr.ru/post/187316/
[00:25:01] <valexey> :-D
[22:01:44] <vlad2> /me залечил конструирование map с нуля на каждом следущем поиске :)
[22:03:56] <vlad2> Типа оно должно было кэштроваться, но с вершин абстракций было не видно, что оно конструировалось каждый раз до до поиска в кеше.
[22:06:49] <jordan36957> Я нуб и не понял. Это такой суровый программерский юмор. :-)
[22:39:17] <vlad2> Ну представь, что тебе надо (быстро) сказать есть такой элемент в контйнере или нет.
[22:39:49] <vlad2> Ты, конечно, сортируешь контейнер и начинаешь быстро искать.
[22:41:40] <vlad2> Бага была в том, что контейнер содавался/сортировался на _каждой_ операции поиска. Что делает операцию сортировки совершенно бессмысленной.
[22:42:33] <vlad2> Потому что быстрый поиск после сортировки работает только для случая "один раз отсортировал, много раз ищешь (быстро)".
[22:46:14] <jordan36957> :-) Ну да я почти так и думал. :-) В общем понял.
[23:03:19] <valexey> да уж. тупой поиск без сортировки - это O(n)
[23:04:18] <valexey> а сортировка сама по себе O(n*log(n))
[23:04:26] <valexey> (а в худшем случае - O(n^2))
[23:04:41] <valexey> а потом еще и поиск за логарифм :-)
[23:06:46] <valexey> (впрочем, худший случай он для быстрой сортировки, а не сортировки слиянием)
[23:18:51] <vlad2> вобщем хреново в плюсах с ленивой инициализацией... даже темплейтв не спасают... только макросы :)
[23:20:49] <valexey> э?
[23:45:12] <vlad2> Ну тот же map проинитить. Один разю
[23:45:22] <vlad2> Типа:
[23:45:44] <vlad2> map_t f(){
[23:46:26] <vlad2> static map_t map = boost::assign::list_of<T>( ....много-много айтемов.... );
[23:46:30] <vlad2> return map; }
[23:46:37] <vlad2> Работает.
[23:46:53] <vlad2> Темепрь усложняем задачу: должно работать в мультитрединге.
[23:47:44] <vlad2> Заводим функцию, которая с учетом мультитрединга правильно инитит static.
[23:48:57] <valexey> это ж не ленивая инициализация, это ж банальный синглетон вроде, не?
[23:49:05] <vlad2> проблема: теперь мы хотим вот это значение для инициализации (boost::assign::list_of) передать в функцию, коорая правильно инитит static этим значением. Не вычисляя этого значения :)
[23:50:00] <vlad2> Т.е. мы хотим что-то типа:
[23:50:11] <vlad2> map_t const& f(){
[23:50:43] <vlad2> return init_static<T>( boost::assign::list_of<Y>( .... ) ); }
[23:50:48] <valexey> а в какой момент должна произойти инициация?
[23:50:53] <valexey> ой, инициализация в смысле/
[23:51:12] <vlad2> _НО_ вот этот boost::assign_of должен быть вызван _один_ раз.
[23:51:30] <vlad2> Т.е. мы хотим на самом деле как-то так:
[23:52:10] <vlad2> return init_static<T>( <anonymous function>{ return boost::assign::list_of } );
[23:52:38] <vlad2> B вот я пока ничего не придумал, кроме явного разнесения на две функции.
[23:52:46] <vlad2> Ну или макросы, которых не хочется.
[23:52:58] <vlad2> Т.е. сейча соно у меня работает вот так:
[23:53:18] <vlad2> map_t make_map() {return boost::assing::list_of ...}
[23:53:42] <vlad2> map_t const& map() {return init_static( &make_map ); }
[23:53:47] <valexey> для ленивости один фиг обертки нужно лепить в энергичном языке
[23:53:58] <valexey> т.е. это не проблема плюсов, это проблема любого энергичного языка
[23:54:21] <vlad2> анонимные функции в моем гипотетическом примере спасли бы ситуацию.ю
[23:54:30] <vlad2> Или хотя бы просто локальные функции.
[23:55:02] <valexey> ну, они же есть в плюсах!
[23:55:12] <valexey> и анонимные и локальные :-)
[23:55:19] <valexey> просто используй современные плюсы :-)
[23:55:31] <vlad2> Да ну тебя :)
[23:55:35] <vlad2> У меня gcc4.2
[23:56:02] <valexey> переходите на шланг уже!
[23:56:16] <valexey> кончайте насиловать труп :-)
[23:59:17] <valexey> http://www.opennet.ru/opennews/art.shtml?num=37484