[01:06:33] <valexey_> vlad2: может в локал-тред сторадж класть?
[01:09:44] <vlad2> Все равно его надо синхронизировать в какой-то момент.
[01:10:58] <valexey_> дык включение/отключение лога - штука редкая же
[01:19:02] <valexey_> ну а вообще, делаем банально - держим указатель на функцию логгирования. если лог отключаем, то указатель будет указывать на функцию-пустышку которая ничего не делает.
[01:19:09] <valexey_> и всё. даже ветвлений не будет.
[01:20:11] <valexey_> при частом вызове код функции-пустышки попадет в кэш инструкций процессора (ога, все 5-10 инструкций попадут), и времени занимать не будет вообще.
[01:28:27] <vlad2> пустышка не катит - потому что для ее вызова надо будет аргументы посчитать, а это очень накладно
[01:28:38] <vlad2> Так что явная проверка логать/не логать все равно будет.
[01:32:21] <valexey_> погоди, а что ты там такое логаешь, что оно накладно?
[01:32:37] <valexey_> И что мешает сделать ленивое вычисление аргументов?
[01:41:35] <vlad2> Смотри:
[01:42:35] <vlad2> LOG(boost::format("do something, param1: %1%, params2: %2") % param1 % param2);
[01:42:50] <vlad2> Ленивость будет заключаться в том, что:
[01:44:28] <vlad2> #define LOG(x) if (ilogger* logger = log_is_enabled("some_specific_logging_key")) logger->log(x)
[01:44:59] <vlad2> собственно надо сделать быстрой log_is_enabled(char const* key)
[01:45:12] <vlad2> быстрой для случая, когда логгинг выключен
[01:46:44] <vlad2> приесм выключен только для "some_specific_logging_key", для других вещей он может быть включен
[01:46:54] <valexey_> log_enabled(bool key){return key;}
[01:47:04] <valexey_> :-)
[01:47:51] <vlad2> Не, key задается извне (в текстовом файле прописывает что мы хотим логать в данный момент).
[01:48:53] <valexey_> это зависит уже от приложения.
[01:49:33] <valexey_> ну, то есть что мешает при изменении конф-файла пересчитать этот ключ и опять же хранить его в виде тупо bool'а
[01:49:50] <vlad2> Ну да. Хранить где?
[01:50:15] <vlad2> Для примера предсавь, что читается файл из одного потока, а логать хочет другой.
[01:51:13] <vlad2> В смысле это все решаемо (мьютексов напихал и вперед).
[01:51:19] <vlad2> Нот хочется быстро :)
[01:51:32] <valexey_> в локал-стораджах каждого из потоков :-) впрочем, это ж bool. туда можно записать атомарно в общую память и не париться
[01:51:39] <vlad2> Т.е. лок полноценного мьютекса - это не быстро :)
[01:52:02] <valexey_> ну, то есть swap values или как оно там называется. атомарная инструкция процессора. мьютексы не нужны
[02:03:30] <valexey_> ну и вообще, если хочется не выходить за рамки языка, то вот: http://en.cppreference.com/w/cpp/atomic
[02:04:08] <valexey_> "Objects of atomic types are the only C++ objects that are free from data races; that is, if one thread writes to an atomic object while another thread reads from it, the behavior is well-defined."
[02:04:26] <valexey_> и никаких мьютексов
[02:04:29] <vlad2> Ага-ага. Щаз я возьму свой gcc4.2...
[02:04:54] <valexey_> в 4.2 есть билтинсы для этого
[02:04:59] <valexey_> в студии - тоже
[02:06:05] <valexey_> например вот: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683560(v=vs.85).aspx
[02:06:27] <valexey_> но это конечно внеязыковые возможности
[02:06:31] <valexey_> ну и gcc: TYPE __sync_val_compare_and_swap(TYPE *ptr, TYPE oldval TYPE newval);
[02:07:11] <valexey_> вообще, атомарные операции в gcc: http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html
[02:08:28] <vlad2> Не, у меня пока скорее теоретически изыскания
[02:08:38] <vlad2> Т.е., атомарные операции это еще не все.
[02:08:51] <valexey_> ну, практические вот - атомарные операции и привет :-)
[02:09:05] <vlad2> Сам луукап можно убстрить. Потому как там сейчас совсем не bool, а именно строковый литерал.
[02:14:57] <valexey_> ну, в общем я слишком далек от твоего контекста, поэтому что-то умное посоветовать не могу :-)
[02:25:27] <vlad2> Вобщем да, там нужен целый комплекс мер :)
[02:41:05] <vlad2> Есть сторонняя компонента плюсовая, которая пнри компиляции выдает варнинг "MFC > такой версии не поддерживается, обратитесь к нам за апдейтом".
[02:41:22] <vlad2> Для прикола сейчас глянул, что стало с этой конторой.
[02:41:29] <vlad2> Корнтора жива.
[02:41:32] <vlad2> С одной стороны.
[02:41:45] <vlad2> С другой стороны она занимается клепанием вебсайтов.
[02:41:55] <vlad2> Вот так вот. Веб победил.
[02:43:19] <valexey_> ну не на MFC же оставаться!
[02:44:31] <vlad2> Ну можно было под айпады пойти программить... Зачем хе сразу веб?
[02:45:51] <vlad2> (да, я знаю, что на моей совести компилятор О7 на жабаскрипте ;)
[02:46:50] <valexey_> :-D
[02:47:22] <valexey_> vlad2: ну, js не обязательно для веба! можно же и под десктоп программить (и запускать на node.js!)
[02:47:44] <vlad2> Это двойное извращение ;)
[02:47:57] <valexey_> http://habrahabr.ru/post/153013/
[02:47:59] <valexey_> во!
[02:48:27] <vlad2> Т.е. если писание на жабаскрипте под браузер еще можно опрадвать типа "а куда деваться", то вот писать на жаюаскрипте не под браузер...
[02:48:36] <valexey_> http://habrahabr.ru/post/155771/
[02:48:57] <valexey_> ну, по факту там браузера кусок + node.js :-D
[02:49:06] <vlad2> Даже читать дальше тайтле не хочу. Тошнит :)
[02:49:47] <valexey_> Чо это? Вот эта хрень + твой компилятор Oberon-07/11 = новое поколение BlackBox'а!
[02:50:01] <valexey_> c реально динамической загрузкой и выгрузкой!
[02:50:03] <valexey_> :-D
[02:51:25] <valexey_> на секундочку - оттуда можно и сишные либы вызывать! ну, из node.js то есть.
[02:51:30] <vlad2> Закопайте :)
[02:51:32] <valexey_> можно биндинги (да, на js) писать.
[02:51:46] <valexey_> поздно. скорее оно закопает всё остальное уже :-)
[02:52:21] <valexey_> Если уж даже мелкософт этот js поддерживает, и эта поддержка есть в студии... Мелкомягкая облачная платформа поддерживает node.js тоже
[02:58:50] <valexey_> ну и метро-приложения можно на js полностью писать
[02:58:55] <valexey_> и под Tizen тоже
[02:59:01] <valexey_> и под Firefox OS тоже
[02:59:35] <valexey_> Чуешь сколько платформ покроет твой компилятор? :-D
[03:43:58] <vlad2> Если б еще это был компилятор не оберона, а чего-то более человеческого...
[04:26:00] <vlad2> Няшка питон. Обожаю.
[04:26:33] <vlad2> Только что спас мне несколько минут долбаний отказавшись запускать код "if a = b"
[04:26:57] <vlad2> А жабаскрипт сосет.
[04:31:51] <vlad2> Могу пари заключить сколько проживет Firefox OS :)
[04:36:00] <vlad2> До того как ее перепишут на другом языке (что там будет внизу мне все равно).
[04:50:37] <valexey_> ну, хз. яндекс же выкинул перл и заменил его на node.js
[04:50:57] <valexey_> теперь оно у них формирует главную страницу
[04:51:03] <valexey_> то есть страницу выдачи поиска
[04:51:09] <valexey_> *результатов поиска
[04:51:56] <valexey_> ну и вообще, теперь хорошим тоном считается сервера на node.js писать :-)
[04:53:20] <vlad2> О да. Выкинули перл. Молодцы.
[04:53:36] <vlad2> Если б они выкинули питон и поставили жабаскрипт - я бы оценил ;)
[04:54:12] <valexey_> ну, я знаю когда выкидывали С++ и ставили node.js :-)
[04:54:32] <vlad2> Наверное байтораздирающая история :)
[04:55:04] <valexey_> ну, мотивация типо такая - пусть веб-сервером тоже вебщики занимаются.
[04:55:25] <valexey_> типо проще код серверного бекенда и браузерного фронтенда синхронизировать
[04:57:52] <valexey_> хуяк-хуяк и в продакшн!
[04:59:48] <valexey_> http://appjs.org/
[04:59:50] <valexey_> :-D
[06:44:46] <vlad2> глючный аплстор ни за что не хочет апдейтить глючный икскод
[22:47:24] <valexey_> eugene386: Когда эти воннаби хакиры у меня спрашивают, какая операционная система стоит на моем компьютере, я честно отвечаю, что семерка.
eugene386: Debian GNU/Linux 7.0