[12:23:04] <valexey> hi
[12:33:32] <Дмитрий85> привет
[13:15:46] <valexey> "Несмотря на то, что можно было пить «пульке» (pulque), сброженный напиток с невысоким содержанием алкоголя, ацтекам запрещалось напиваться до достижения шестидесятилетнего возраста; нарушение этого запрета каралось смертью."
[15:20:20] <geniepro> то есть огненная вода была известна ещё до прихода бледнолицых? о_О
[15:21:03] <valexey> ога. только ты не путай Ацтеков с дикарями из северной америки
[15:23:02] <geniepro> о_О да там тоже цивилизации всякие были. наверное...
[15:30:52] <valexey> в северной то? вроде бы нет, не особо
[15:31:02] <valexey> ну, то есть где-то на уровне чукчей
[19:56:47] <vlad2> valexey: в порядке разминки :)
[19:56:56] <vlad2> #include <iostream>

struct X
   {
   X(){}
   X(X const&){std::cout << "copy" << std::endl;}
   };

X f()
   {
   return X();
   }

void f2(X const&)
   {
   }

int main()
   {
   f2(f());
   X x = f();
   X x2 = x;
   return 0;
   }
[19:57:03] <valexey> ойблин
[19:57:15] <vlad2> Вопрос: сколько раз вызовется конструктор копирования :)
[19:57:46] <valexey> так ничестно!!1 опять этот каварный вопрос! компилятор же может соптимизировать и некоторые копировани опустить!
[19:58:08] <vlad2> Я просто решил не поленится и проверить таки на своем компиляторе :)
[19:58:23] <vlad2> Комипилил без оптимизации.
[19:58:29] <vlad2> Вызывает только один раз.
[19:58:39] <vlad2> В последнем случае.
[19:59:12] <valexey> может оно там злобно заинлайнило функцию?
[19:59:22] <vlad2> Сейчас попробую f() вынести в другую единицу компиляции.
[19:59:33] <valexey> Блин. Сестра хочет начать что-то писать на питоне. ДЛЯ ДУШИ!!1 Отговариваю как могу…
[19:59:35] <vlad2> Дык, без оптимизации компилил.
[19:59:50] <valexey> Не поддается!!1
[19:59:50] <vlad2> Питон - это хорошо, ты же знаешь :)
[20:00:10] <vlad2> Это лучшее, что можно поиметь от динамического языка.
[20:00:13] <valexey> Это богомерзко! Динамическая типизация + мутабельность переменных же!
[20:00:23] <valexey> Нифига. Erlang лучше - там мутабельности нет
[20:00:25] <vlad2> Почти как оберон, только динамика. Все грабли вылизаны.
[20:00:30] <valexey> И вообще, смысл в динамических языках?
[20:00:42] <vlad2> Дешево и сердито :)
[20:00:55] <valexey> vlad2: кстати, оно действительно как оберон. То есть в плане метрик грамматики
[20:01:32] <valexey> Не тех примитивных синтаксических метрик что Свердлов считал, а правильных метрик. Скажем по числу нетерминалов на класс (класс внутри грамматики, к ООП это не имеет отношения)
[20:02:09] <valexey> Да, в а питоне еще плохо что эти его объективные недостатки маскируются гламурным синтаксисом.  Вот js - сразу видно что говно. А питон - нет.
[20:02:49] <valexey> Хотя, находятся люди искренне полагающие js вершиной языкостроения… И их все больше… таких ущербных.
[20:02:57] <vlad2> С двумя единицами - тоже оптимизит, сволочь :)
[20:03:15] <vlad2> Курто. Пойду уберу один #ifdef.
[20:05:55] <vlad2> Там был #ifdef для мака - нужен был вызов промежуточной фукции. Поскольку оно один фиг оптимизится - можно убрать :)
[20:06:16] <vlad2> Не говори мне про js - ты знаешь, что я про него думаю :)
[20:06:20] <valexey> ужас. какие умные компилеры пошли…
[20:06:44] <valexey> На огромное число программеров считает что js это тру и его надо пихать везде - и на сервер в логику, и на десктоп и в браузер
[20:07:40] <valexey> я даже не знаю как лечить таких… электрошоком может быть? или блекбоксом?
[20:07:46] <valexey> хотя последнее слишком не гуманно…
[20:13:19] <vlad2> ХЗ. Может асмом? :)
[20:13:49] <vlad2> На что тоьлко не пойдешь, лишь бы #iffef не писать. Смотри что придумал:
[20:13:53] <valexey> скажут что в асме тоже динамическая типизация (и модульности там нет нормальной, ога), только синтаксис устарел
[20:13:54] <vlad2> boost::mpl::if_< boost::is_same<jschar,wchar_t>,string_t const&,string_t>::type
string_from_unicode( std::wstring const& s )
[20:14:16] <valexey> o_O
[20:14:24] <valexey> маньяк!
[20:14:32] <vlad2> Смысл этого конструкта:
[20:14:44] <vlad2> #ifdef MAC
[20:14:58] <vlad2> string_t string_from_unicode(...);
[20:15:00] <vlad2> #else
[20:15:15] <vlad2> string_t const& string_from_unciode(...)
[20:15:16] <vlad2> #endif
[20:15:33] <valexey> да я понял
[20:15:50] <vlad2> Поскольку на винде jschar совпадет с wchar_t - то можно соптимизить - анрнуть ту же херню.
[20:16:01] <valexey> а кто такой jschar?
[20:17:55] <vlad2> Это юникодный символ жабаскриптового движка.
[20:18:03] <vlad2> (мозиловского)
[20:18:08] <valexey> ублин
[20:18:20] <valexey> а в виндах и в 32 и в 64 битах оно совпадает?
[20:18:32] <vlad2> Да, должно.
[20:18:33] <valexey> а в PPC - не совпадает в обоих битностях?
[20:18:44] <valexey> ибо пипец ведь и 64битный бывает
[20:18:46] <valexey> G5
[20:18:50] <vlad2> Впрочем теперь без #ifdef пофиг - должно рабоать везде :)
[20:18:59] <valexey> Ж-)
[20:19:23] <vlad2> В Win64 64 бита только у указателей и size_t.
[20:19:35] <vlad2> Все остальные размеры (int) - те же.
[20:19:44] <valexey> это зависит от компилятора
[20:19:51] <valexey> у gcc под виндой вроде как нюансы имеются
[20:19:52] <vlad2> Ну типа.
[20:20:01] <vlad2> Тем хуже для него ;)
[20:20:22] <vlad2> Если там wchar_t - 64, то можно поиметь ненужного гемора.
[20:21:07] <valexey> угу. но зачем бы вычар такого размера я не представляю. ибо ucs-4 (он же utf-32) в себе содержит ВСЕ
[20:21:10] <valexey> вообще все
[20:21:38] <valexey> все и еще немного
[20:24:02] <vlad2> Не, там тоже вроде бывают суррогаты :)
[20:24:08] <valexey> неа
[20:24:14] <valexey> суррогаты бывают в utf-16
[20:24:27] <valexey> (его подмножество - ucs-2)
[20:24:31] <vlad2> Хм. Ну может. Давно уже доку изучал маковскую.
[20:24:44] <valexey> а я недавно эти юникодные хрени курил
[20:24:51] <valexey> а кстати, вот для кроссплатформенности, что должно быть в языке с типами? int32, очевидно, кроссплатформенности не добавляет. просто int - не дает вообще никаких гарантий.
[20:25:36] <valexey> единственное что я вижу - это типы объявлять как в Аде - c указанием минимального требуемого диапазона значений или битности.
[20:26:19] <vlad2> int - он тоже для кроссплатформенности, но не для бинарной, а для ммм... оптимизационной. Т.е. вычисления с int скорее всего будут эффиктивны на люой платформе.
[20:26:25] <valexey> c соответствующими правилами конвертаций. что из большего в меньший низя. из меньшего в больший - зя.
[20:26:43] <valexey> угу. но и подход Ады ничему не противоречит
[20:27:10] <valexey> Сказал что тебе нужно целое в диапазоне от 10 до 200, оно может под него и байт выделить и 4 байта - в зависимости от платформы
[20:27:20] <vlad2> Подход ады подразумевает больше думать при написании - сколько ж битов нужно для вычисления.
[20:27:21] <valexey> Но гарантирует что в этом оно поместится. Не будет переполнений
[20:27:35] <valexey> Скорее не про биты думать, а про диапазон значений сразу
[20:27:38] <vlad2> И все рано можно ошибиться (вспоминаем Ариан5)
[20:28:08] <valexey> В Ариане защиты руками отключили. То есть все механизмы по контролю типов там были отключены намерянно.
[20:28:09] <vlad2> Так что лично я бы выбрал "меньше париться с размерностью - больше тестовЭ
[20:28:21] <valexey> Так то Ада не дала бы конвертировать из флоата в инт.
[20:28:39] <valexey> по крайней мере без проверок.
[20:30:55] <valexey> Просто скажем сишечка не даст ведь нормально использовать 20ти битные числа. А тесты на микроконтроллере… Ну ты понимаешь - это сложно. То есть автоматизированно прогнать все очень сложно. Особенно если учесть что там алгоритмы сильно зависят от аналоговой части.
[20:31:25] <valexey> Кстати, у Ариана была примерно та же байда помноженная на мульён. Правда у них и бюджет был другой :-)
[20:32:23] <valexey> vlad2: вчера студенты напоролись на замечательный баг - баг был на стыке жабы и плюсцов
[20:32:44] <valexey> была функция jboolean blablabla() {return foo;}
[20:32:51] <valexey> где foo - это сишный int
[20:33:01] <valexey> отгадай, где тут проблема? ;-)
[20:33:58] <vlad2> jboolean это какой-нибудь char и оно нихрена не сконвертилось в 0/1?
[20:34:23] <valexey> ога. то есть оно содержало нуль когда foo нулем не был
[20:34:37] <valexey> в результате фикс: return foo==0;
[20:34:47] <valexey> стажеры это дело день ловили :-)
[20:34:51] <vlad2> bool(foo) :)
[20:35:14] <vlad2> Хе-хе :) Старый сишник сразу сказал :)
[20:35:18] <valexey> попутно переписали код целого модуля. от этого код стал идеалогически лучше (хотя он все еще страшен)
[20:35:41] <valexey> vlad2: ну, дело в том, что на эту функцию полдня никто вообще не смотрел :-)
[20:36:27] <valexey> этот модуль по сути - интеллектуальный фильтр данных. баг выглядел так - в него пихаем данные, и в определенный момент из него начинает переть просто тупо константа. то есть на экране вместо пульса - прямая.
[20:36:37] <valexey> математика там унутре хитрая.
[20:36:46] <valexey> поэтому, как понимаешь, грешили на вообще все и сразу
[20:37:01] <valexey> + невозможность походить по сишному коду дебаггером
[20:37:17] <valexey> + невозможность вести из сишного кода логи
[20:38:25] <valexey> = веселая ловля бага :-)
[20:38:44] <vlad2> Дык, диагностика нужна хоть какая-то. Хоть светодиодом.
[20:39:10] <valexey> ну, они навострились вытаскивать нужное в жабу и оттуда логгировать :-)
[20:39:18] <valexey> прокачали смекалку
[20:46:14] <vlad2> Не, не завалит Губанов info21 :)
[20:46:21] <vlad2> Весовые категории нете :)
[20:46:35] <valexey> угу. info21 на пару левелов круче :-)
[20:46:39] <valexey> прокачался!
[20:49:55] <valexey> о! опять нашел прелесть: http://is.ifmo.ru/unimod-projects/plates/ когда-то находил, потом потерял. теперь вот опять нашел. забавная штука в плане упражнений по программингу и соревнований
[20:52:30] <vlad2> А Дмитрий85 это кто?
[20:53:35] <valexey> не знаю
[20:53:56] <valexey> version Дмитрий85
[20:53:58] <Жаба> valexey, Дмитрий85 have Psi+ 0.15.5185 (Jan 22 2012) on Windows XP
[20:54:06] <valexey> виндузятник :-)
[20:54:15] <valexey> но не типичный
[20:55:09] <vlad2> В смысле он с оборонкора или где? :)
[20:55:28] <valexey> не знаю. возможно что да.
[21:01:49] <Дмитрий85> vlad2: можно сказать оберонщик :) нигде не участвую активно, просто читаю оберонкоре и данную джаббер комнату
[21:02:46] <valexey> а оберспейс читаешь? ;-)
[21:03:13] <Дмитрий85> читаю :)
[21:04:14] <valexey> у нас там конечно как-то слишком спокойно.  вроде бы и вентилятор есть, и субстанция для наброса имеется, но никто не набрасывает так, чтобы оно разлетелось достаточно широко и сильно :-)
[21:06:11] <valexey> кстати а насколько оправданно писать некий модуль в ББ а в боевом режиме использовать GPCP?
[21:07:00] <Дмитрий85> vlad2: я тут был пару дней назад, расказывал о своих интересах
http://77.37.168.14:8080/oberon@conference.jabber.ru/2012/01/19.html
[21:07:05] <valexey> я просто все думаю про КП под линухом. С автоматической компиляцией исходников (билд-ферма, ога. с прогоном тестов). Что-то по моему ББ под линукс хреново автоматизируется и достаточно бажный.
[21:07:59] <valexey> GPCP выглядит более стабильным. Да и jvm в случае чего не даст программе пойти в разнос.
[21:11:39] <valexey> Гм. А как в идеалогии ББ выглядят потоковые данные? То есть нечто ограниченное - я понимаю, это там просто документ или фрагмент документа. Это смотрится там даже няшней чем в юниксовой консоли. А вот поток как? Нечто бесконечное. Что в юниксовой консоли через пайпы делается. То есть как такое вот потоковое нечто в ББ тестировать? В юниксах я сделаю просто ./myprog < test.file и все. myprog не будет знать что это на самом деле файл и что там конечное число данных. А в ББ?
[21:15:06] <vlad2> Ну там у них эти, бегунки :)
[21:15:20] <valexey> и по чему же этот бегунок бегать будет?
[21:15:49] <valexey> сколь я понимаю, из модуля ББ хрен до stdin доберешься.
[21:16:16] <valexey> внутри ББ потоков не наблюдается. Только какие-то невнятные сообщения летают (которые до кучи в полете модифицируются)
[21:16:33] <valexey> И все это завязано на main loop виндовозный
[21:17:15] <vlad2> Ну почему нен доберешься?
[21:17:36] <valexey> ну а где он там? запускать ББ с консоли?
[21:17:50] <valexey> Алсо это ж надо не блокирующее чтения из stdin организовывать
[21:17:55] <valexey> иначе весь ББ встанет колом
[21:18:14] <valexey> ведь он же однопоточный.
[21:33:20] <valexey> то есть по сути это ж надо писать для ББ нечто вроде драйвера для stdin, который воткнется в этот main loop и будет асинхронно доставать данные из stdin, и по мере доставания через message bus рассылать уведомления обработчикам
[21:34:04] <valexey> по моему, это получается какой-то феерический пипец. проще stdin заэмулировать через tcp/ip - для этого в ББ драйвер уже готов :-D
[21:38:03] <vlad2> stdin есть у гуевых виндовых прог, никуда не делся.
[21:38:25] <vlad2> По поводу проблем с многопоточностью - да, полный комплект 6)
[21:38:47] <valexey> дык я знаю что есть. и знаю что оттуда надо либо не блокирующе читать, либо читать в отдельном потоке.
[21:38:58] <valexey> иначе гуйня висанет
[21:41:19] <valexey> как в любом фреймворке, в ББ при попытке сделать шаг влево-вправо от генеральной линии партии напарываемся на какие-то жуткие трудности.
[21:41:34] <valexey> приходится либо пилить сам фреймворк, либо какие-то костыли строить
[21:51:10] <vlad2> Угу.
[21:52:24] <valexey> vlad2: а что тебе больше нравится - json или xml? ;-) для мелочи всякой
[21:55:06] <vlad2> json
[21:55:29] <valexey> аналогично. это гут. хоть оно и из js свои корни берет :-)
[21:56:50] <vlad2> Да, мерзкий js имеет к нему отношение :)
[21:57:44] <valexey> клуб ненавистников js :-)
[22:09:40] <vlad2> Блин, компилятор не ловит сравнение разных енумов...
[22:09:49] <vlad2> Недоделанные енумы в плюсах.
[23:45:07] <valexey> да я вообще ни одного нормального языка не видел
[23:45:11] <valexey> все какие-то недоделанные
[23:45:14] <valexey> ущербные
[23:45:34] <valexey> почти во всех модули не кошерные.
[23:45:58] <valexey> а в которых кошерные, там например деструкторов нет, ну или чего-нибудь для автоматического менеджмента ресурсов