[14:58:20] <alexey.veselovsky> .
[15:50:35] <mister-kemet> /
[15:52:59] <alexey.veselovsky> у всех слешдот, а у нас будет дотслеш!
[17:50:21] <mister-kemet> осталось семантику придумать
[17:51:52] <vlad3> /me смеется
[17:52:18] <vlad3> сбылась мечта Страуструпа
[17:53:14] <vlad3> Жабаскрипт есть изкоробки во всех браузерах.
[17:55:48] <alexey.veselovsky> vlad2: а он о чем таком мечтал?
[17:58:47] <mister-kemet>
аха, дотслеш в активобероне жеж есть !
[17:59:37] <alexey.veselovsky> а это что такое?
[18:00:04] <vlad3> Он мечтал о том, что потоковый вывод будет эффективнее printf.
[18:00:29] <alexey.veselovsky> ну, это в плане использования стека
[18:00:34] <vlad3> Я помню нам еще препод в универе рассказывал.
[18:00:35] <alexey.veselovsky> а вот в плане быстродействия - я хз
[18:00:42] <mister-kemet> это операции с массивами
[18:01:06] <vlad3> На практике потоковый вывод оказался настоящим монстром..
[18:01:15] <alexey.veselovsky> printf это же ужасно - там же на каждый вызов этого принтфа запускается ПАРСЕР который разбирает форматную строчку, а потом пытается разгребать стек
[18:01:37] <vlad3> Типа.
[18:01:42] <vlad3> Как бы.
[18:02:02] <vlad3> Но ты посмотри во что превращается std::cout
[18:02:33] <alexey.veselovsky> в смысле?
[18:02:34] <vlad3> Понятно, что его можно сделать очень эффективным.
[18:02:46] <vlad3> Но не очень стандартным.
[18:03:07] <alexey.veselovsky> там же вроде compile-time магия в основном
[18:08:02] <vlad3> Там совершенно нечеловеческие абстракции внутри потоков.
[18:08:29] <vlad3> ; 5    :  std::cout << "Hello World!" << std::endl;

push OFFSET $SG21122
push OFFSET ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
push eax
call ?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z ; std::endl
add esp, 12     ; 0000000cH
[18:08:52] <vlad3> 120 кб асма
[18:09:09] <vlad3> после всех оптимизаций
[18:10:10] <vlad3> ; 3    : printf("Hello World!");

push OFFSET $SG1059
call _printf
add esp, 4
[18:10:36] <vlad3> 541 _байт_ асма
[18:12:23] <vlad3> На самом деле, чтобы лучше понять насколько там все запущенно, лучше всего попробовать реализовать свой std::istream, std::ostream
[18:13:10] <vlad3> в смысле свой поток, совместимый с STL
[18:14:10] <vlad3> Вполне практическая задача.
[18:14:55] <vlad3> Вот только такое я видел только в бусте (фигли субербизоны и не такое могут)
[18:15:14] <vlad3> А простой плебс лепит свои TStream.
[18:16:12] <vlad3> Ну и нас в коде тоже такое есть (фигли - мы ж тоже супербизоны).
[18:16:57] <vlad3> Только баги там находили спустя годы существования этого кода (для новых специфических условий).
[18:18:58] <vlad3> Это я все к тому, что да, предложение попробовать std::cout - было иронией :) И то, что оно сработало - дейсвительно неожиданно.
[18:19:12] <alexey.veselovsky> дык размер кода никого не волнует :-)
[18:19:35] <alexey.veselovsky> сколько там нагенерировано кода никак не кореллирует с тем, сколько оно при работе памяти отожрет
[18:20:04] <alexey.veselovsky> более того, размер кода также очень слабо связано с тем как быстро оно будет работать
[18:20:37] <vlad3> Ну трудно представить себе железку с кучей памяти и маленьким стеком.
[18:20:56] <alexey.veselovsky> ты не путай память для инструкций с памятью для данных
[18:21:11] <alexey.veselovsky> инструкции лежат, например на флеше, и места в ОЗУ не занимают вообще
[18:21:34] <alexey.veselovsky> vlad2: кстати! у меня изначально печаталось нечто вроде printf("%d", a); ну я и решил облегчить задачу и написал printf("%d", 42); дык оно стало жрать стека после этого БОЛЬШЕ
[18:21:48] <alexey.veselovsky> а вот std::cout повел себя ожидаемо - стал жрать стека меньше
[18:22:27] <vlad3> Ну размер кода тоже косвенно влияет на быстродействие. Не раз наблюдал, как опимизация по размеру оказывалась быстрее оптимизации по скорости.
[18:22:58] <vlad3> Личные бзики компиялтора.
[18:23:06] <vlad3> Это ты на чем ковыряешь?
[18:23:07] <vlad3> gcc?
[18:23:30] <alexey.veselovsky> gcc, да
[18:24:14] <alexey.veselovsky> ну, x86 штука смешная - там же нет флеша. зато есть кэш инструкций
[18:38:00] <alexey.veselovsky> vlad2: вот вызов cout'a:
[18:38:12] <alexey.veselovsky>  %1 = tail call %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([12 x i8]* @.str, i64 0, i64 0), i64 11)

[18:38:19] <alexey.veselovsky> где тут страшно?
[18:38:32] <alexey.veselovsky> из страшного - только манглинг имен
[18:42:00] <alexey.veselovsky> тащемто если сделать деманглинг, то:
[18:42:10] <alexey.veselovsky>  tail call void @std::ios_base::Init::Init()(%"class.std::ios_base::Init"* @std::__ioinit)
 %1 = tail call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.std::ios_base::Init"*)* @std::ios_base::Init::~Init() to void (i8*)*), i8* getelementptr inbounds (%"class.std::ios_base::Init"* @std::__ioinit, i64 0, i32 0), i8* bitcast (i8** @__dso_handle to i8*))

[18:45:49] <alexey.veselovsky> тащемто не вижу особых отличий от:
[18:45:54] <alexey.veselovsky> %1 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8]* @.str, i64 0, i64 0))
[18:50:51] <alexey.veselovsky> vlad2: посмотрел в дизасм целевой машины - там тоже ничего страшного. никаких 128 Кб асма там нет.
[18:50:57] <alexey.veselovsky> обычный call
[18:51:19] <alexey.veselovsky> точнее callq
[18:52:08] <vlad3> Не все прилинковалось ;)
[18:52:22] <alexey.veselovsky> в смысле? мы ведь про место вызова cout'a говорим?
[18:52:25] <vlad3> Ты посмотри исходный асм :)
[18:52:32] <alexey.veselovsky> или про потроха самого cout'a?
[18:54:07] <alexey.veselovsky> место вызова, то есть код функции main в случае принтфа и в случае cout'a не отличаются практически ничем.
[18:55:07] <alexey.veselovsky> а потроха что printf'a что cout'a страшны в любом случае :-) printf, кстати, жуткий тормоз - его пришлось выкинуть из микроконтроллера нашего, заменили рукописной функцией.
[18:55:20] <alexey.veselovsky> то есть даже оптимизированный под МК printf является тормозом
[19:08:39] <mister-kemet> как страшно жить )
[19:09:22] <alexey.veselovsky> ну не все же под суперскалярные пылесосы быдлокодить :-)
[19:11:03] <mister-kemet> нудв еуда, суперскаляры всё всосут )
[19:11:42] <alexey.veselovsky> только всю батарейку выжрут в один присест :-)
[19:13:09] <mister-kemet> а розетка с 220 на что?! пока в расее оне бесплатны, в отличии от
[19:13:38] <alexey.veselovsky> c розеткой по парку не побегаешь :-)
[19:13:55] <mister-kemet> я как-то в европы отправился, вот блин был шок
[19:14:15] <alexey.veselovsky> а что там?
[19:19:04] <alexey.veselovsky> гы. в макоси минимальный стек - 32Кб
[19:19:13] <alexey.veselovsky> в линухе - ЛЮБОЙ
[19:19:52] <alexey.veselovsky> причем в макоси если стек меньше заданного, оная макось НИЧЕГО не говорит что мол, обломись
[19:19:55] <alexey.veselovsky> все норм.
[19:20:01] <alexey.veselovsky> и даже работает
[19:20:07] <alexey.veselovsky> но работает НЕ ТАК
[19:20:25] <alexey.veselovsky> оно банально стек не инициализирует в результате
[19:20:31] <mister-kemet> да буржуи сместиели на кран не осилили )))  пришли мы в гости значит, ну там просим за стол, и всё такое, я говорю, руки бы помыть, мне салфетку протягивают, не, говорю, помыть бы, ну вон отвечают, захожу, там раковина и два крана торчатьт из стены 15 см друг от друга и ок 5 см из стены, я дооолго пялился на это чудо буржуйской мысли, вся пытался понять — КАК, ну елел помыдся потом спрашиваю, как же? так там пробка есть отвечают, ЗАЧЕМ??? ну так закрываешь раковину, наливаешь воды и фейсом в раковину )
[19:21:15] <alexey.veselovsky> ога. вода денег стоит!
[19:21:28] <alexey.veselovsky> а отсутствие смесителя - это защита от дурака-транжиры
[19:21:59] <mister-kemet> ну так )
[19:22:39] <mister-kemet> но самый прикол в другом
[19:23:59] <mister-kemet> на вопрос почему, отвечает — так один кран один поставщик, другой-другой поставщик, а если смеситель поставить — вода будет чужому поставщику перебегать!
[19:24:47] <alexey.veselovsky> O_O
[19:24:54] <alexey.veselovsky> а клапан сделать - не?
[19:25:10] <mister-kemet> а зачем макоси маленький стек, оно же десктопное
[19:25:49] <alexey.veselovsky> затем же зачем серверам (с 32 Гб ОЗУ) маленький стек (байт эдак в 512) :-)
[19:27:38] <mister-kemet> та какой клапан, там же два крана, и давление!
[19:27:53] <alexey.veselovsky> давление может быть разным
[19:28:11] <alexey.veselovsky> 100500 раз видел как у меня горячая вода заливалась в холодную трубу через смеситель
[19:29:55] <mister-kemet> что за смеситель такой, если есть двление, то не пойдет оно в обратку, потому что на выходе давлоения нема
[19:31:02] <alexey.veselovsky> ну вот смотри, у смесителя три трубы. в одной из них давление есть, в двух других нет. вопрос - куда пойдет вода?
[19:31:28] <mister-kemet> зависит о конструкции
[19:31:51] <alexey.veselovsky> ну во во всех мною встреченных конструкциях вода идет и туда и сюда :-)
[19:32:03] <alexey.veselovsky> а уж если кран пальцем заткнуть, то ваще однозначно :-)
[19:32:18] <mister-kemet> если конструкция правильная, т.е. это правильный смеситель, то вода пойдет только вперед ))
[19:32:41] <alexey.veselovsky> то есть там таки есть клапан? ;-)
[19:32:58] <mister-kemet> если заьткнуть, то может и пойдет
[19:34:04] <alexey.veselovsky> дас. макось суксь. легковесного concurrency (не знаю как это на русский перевести) тут не выйдет
[19:34:20] <mister-kemet> хз, не разбирал, надо эксперимент провести, пока можно ))
[19:34:32] <alexey.veselovsky> :-)
[19:35:29] <mister-kemet> ну я макось не пользую, мы одну штуку купили для експериметов
[19:36:48] <mister-kemet> у меня только вин хп виста севен и опенсуся
[19:39:02] <mister-kemet> в активномобероне таки ввели % как замену MOD и видимо \ как замену DIV
[19:42:14] <alexey.veselovsky> когда ввели?
[19:45:13] <mister-kemet> ну компилятор это понимает, а ввели это я так сказщзал,с активнымобероном все сложно репорта нету нового нужно все в компиляторе смотреть, об этом так и написано )
[19:45:47] <alexey.veselovsky> ужоз
[19:46:08] <alexey.veselovsky> и как вы этот постоянно меняющийся unstable будете в продакшн пропихивать?
[19:46:33] <mister-kemet> новый компилятор пишут и потихоньку изменения в язык вводят, перечисления уже появились
[19:48:53] <mister-kemet> так ядро практически не меняется, а все новые изменеия в языке совместимы со старыми и только расширяют язык
[19:50:00] <alexey.veselovsky> а вы что-то с этим компилятором делаете?
[19:50:29] <mister-kemet> ничего, только А2 им собираем )
[19:51:22] <alexey.veselovsky> то есть не фиксите, не тестите компайлер? а с A2 что-то делаете? в плане её разработки
[19:52:46] <mister-kemet> пока только эксперименты, вообще туда портирован сириус и сама А2 уже переписывается, так что сторого говоря, у нас уже модифицированная А2 и орининальным компилятором она не соберется
[19:53:25] <alexey.veselovsky> а вы какие-нибудь изменения в коде возвращаете обратно сообществу что A2 пилит?
[19:53:50] <mister-kemet> неа
[19:54:53] <alexey.veselovsky> что так? это же полезно было бы всем
[19:56:03] <mister-kemet> это слишком серьезные изменения, их точно не примут
[19:56:22] <alexey.veselovsky> ну вдруг что-то по мелочи есть
[19:56:29] <alexey.veselovsky> не верю я что мелкие огрехи не находятся
[19:56:35] <alexey.veselovsky> их хотя бы багрепортить надо
[19:56:53] <mister-kemet> по мелочи я отправлял пару раз, но чтото оно не прошло
[19:57:23] <mister-kemet> видимо им не надо )
[19:57:29] <alexey.veselovsky> ужас
[19:57:35] <mister-kemet> они же новую ось пилят
[19:57:56] <alexey.veselovsky> дооолго пилят!
[19:58:11] <alexey.veselovsky> а что там с многозадачностью? и что с изоляцией памяти?
[19:59:16] <mister-kemet> я так понял А2 они рассматривают как учебную и в продакшн она не пойдет, а ошибки видимо студенты правят правят и правят и так каждый сесместр т000 ЕСЛИ В ТРАНКЕ ПОРАВИТЬ, ТО НАД ЧЕМ ТОГДА СТУДЕНТАМ РАБОТАТЬ )
[19:59:43] <alexey.veselovsky> :-D
[20:00:22] <mister-kemet> с изоляцией ни как, только программно, многозадачность вполне вменяемая вроде
[20:00:38] <alexey.veselovsky> каков оверхед по памяти на один поток?
[20:00:52] <alexey.veselovsky> (то есть размер стека + структуры данных в шедулере/ядре)
[20:02:43] <mister-kemet> лично я не смотрел, у меня ж функции несколько иные — пинать всех чтоб работали и зарплату им платить )
[20:03:17] <alexey.veselovsky> ога. и изменениями в компиляторе пакостить :-)
[20:03:31] <mister-kemet> так это святое )
[20:11:42] <alexey.veselovsky> ПЕРЕХОДИТЕ НА С++!
[20:11:48] <alexey.veselovsky> и будет вам счастье :-)
[21:29:00] <valexеy> .
[21:57:43] <valexеy> vlad2: я понимаю что js есть в каждом браузере. но зачем компилятору то в браузере пускаться а не на сервере?
[22:49:00] <vlad2> Потому что серверу и так есть чем заняться.
[23:18:24] <valexеy> vlad2: это например?
[23:18:55] <valexеy> вон, у llvm все хорошо с этим :-)
[23:19:18] <valexеy> чем вот ему еще заниматься? http://llvm.org/demo/
[23:53:13] <vlad2> application server
[23:53:24] <vlad2> он другой всякой херней занимается