[00:43:24] <vlad2> Все-таки иногда осознаешь, что это очень даже хорошо, что в C++ нет рефлекшина.
[00:44:13] <vlad2> Потому как легко выкидывать ненужное и переколбашивать структуры без риска сломать какую-нибудь сериализацию.
[01:12:22] <valexеy> vlad2: ну рефлекшн это ж толика динамической типизации по сути :-)
[01:12:44] <vlad2> Угу.
[01:15:52] <valexеy> со всеми вытекающими в виде сюрпризов в рантайме
[01:16:03] <valexеy> ну и методика борьбы та же - юниттесты везде :-)
[01:16:15] <valexеy> что не сделает компилятор, то сделаем сами, руками!
[02:21:02] <vlad2> Зато сериализация не руками ;)
[02:21:32] <valexеy> а для сериализации не руками рефлекшн в рантайме и не нужен тащемто :-)
[02:25:18] <vlad2> Даже если не в рантайме. Все равно можно ставить крест на "выкидавании".
[02:52:50] <valexеy> нельзя. ведь будет ошибка компиляции
[08:38:49] <vlad3> Не будет ошибки. Просто сломается сериализация (молча).
[08:39:39] <vlad3> Т.е. "старые" данные не прочитаются "новым" кодом и наоборот.
[09:08:08] <vlad3> Читаю Вирта Comiler Construction.
[09:08:21] <vlad3> Чуствую разочарование.
[09:10:39] <vlad3> Простые вещи показываются с помощью диковинных структур данных.
[09:14:08] <vlad3> Первый свой парсер/вычислитель выражений (с переменными!) я писал еще на третьем курсе универа. Такое чувство, что тогда я бы просто не понял что ж здесь на самом деле у Вирта имеется ввиду.
[09:22:29] <vlad3> Блин, неужели ни один редактор не предложил хоть отформатировать код нормально.
[09:36:04] <egp> vlad3: а ты погляди в AOS - кучи вручную абы как форматированного кода
[10:01:28] <vlad3> Фиг с ней - с AOS или BB. А тут книга...
[18:41:26] <vlad2> http://www.vesti.ru/doc.html?id=904876
[18:44:45] <valexey> vlad2: ты там не глянул исходники того что на форум я форварднул?
[18:45:21] <vlad2> Да, глянул.
[18:45:25] <valexey> да, а про Вирта - я вроде там все понимаю. Другое дело что до того я свердлова проработал + самостоятельно с грамматиками работал.
[18:45:30] <valexey> vlad2: и каг?
[18:46:09] <vlad2> Трудно сказать. Но это точно не замена корбе и дкому.
[18:46:24] <valexey> чойта?
[18:46:28] <vlad2> В смысле, возможно, что оно покроет какие-то специфические кэйсы.
[18:46:45] <vlad2> Все крайне низкоуровнево.
[18:47:05] <vlad2> Че там происходит - даже на примерах трудно понять за горой какого-то сетап-кода.
[18:47:27] <vlad2> корба/дком - распределенные объектные системы.
[18:47:40] <vlad2> дком - это, собственно, распределенный ком
[18:47:51] <vlad2> У меня была поделка под него.
[18:47:53] <valexey> да, на этом дкоме OPC работает
[18:48:02] <valexey> /me ковырялся с этим на предыдущей работе
[18:48:19] <vlad2> корба - более глобально и не от M$
[18:48:53] <valexey> и на этой корбе когда-то все межпроцессное десктопное взаимодействие в линуксе строилось
[18:48:58] <valexey> потом выпилили ибо оверкилл
[18:49:19] <vlad2> Для межпроцессного - точно оверкилл. Оно и для сетевого скорее всего оверкилл :)
[18:49:25] <valexey> :-)
[18:49:31] <valexey> а для какого не оверкилл? :-)
[18:50:05] <valexey> /me как увидел пост Ильи про то что ком и корбу заменили жабой и дотнетом, так и сел. даже прокомментировать это дело рука не поднялась.
[18:50:12] <vlad2> Для мега жабьей распределенной системы (те самые 600 метров кода в jar)
[18:51:01] <vlad2> Ну, видомо он имел ввиду, что там оно все из коробки как-то работает.
[18:51:12] <vlad2> И вникать даже нет смысла, чтоб набыдлокодить.
[18:51:13] <valexey> Да это ж вообще разные вещи!
[18:51:22] <valexey> Ну то есть вообще разные.
[18:52:23] <valexey> .net позволяет грубо говоря иметь один язык с разными синтаксисами и махонькими вариациями семантики, и тогда когда это все в одном адресном пространстве это все легко взаимодействует.
[18:52:33] <vlad2> Короче, объектной системы я в этой поделке не увидел. Возможно она есть, но погребена под тоннами сишного кода (там даже не плюсы).
[18:52:39] <valexey> А ком и корба позволяет скрещивать вообще разные языки даже на разных машинах.
[18:53:42] <valexey> Это ж какую надо фантазию иметь чтобы их противопоставлять?
[18:54:19] <valexey> Но если у нас "большое приложение в 3000 строк кода", то конечно и корба и ком будут оверкилом :-) Да и .net тоже.
[18:54:19] <vlad2> Ну дотнет как бы тоже полиязыковый ;)
[18:54:40] <vlad2> Множество языков бесконечно, но замкнуто ;)
[18:54:45] <valexey> vlad2: гыде .net полиязыковый? покажи мне на .net'e два действительно РАЗНЫХ языка.
[18:54:58] <vlad2> немерле и шарп? :)
[18:54:59] <valexey> А не один и тот же язык с другим синтаксисом.
[18:55:08] <vlad2> Хотя шарп туда идет, но ему еще далеко :)
[18:55:25] <valexey> Все что в немерле есть - это макросы поверх. После компиляции это тот же самый шарп :-)
[18:56:03] <valexey> Скажем так, найди мне на .net'e хоть один не ООП-язык с которым тот же шарп может легко интероперировать
[18:56:28] <valexey> Ибо даже с F# возникают проблемы.
[18:56:50] <valexey> А уж какие проблемы использовать Scala-либы из явы...
[18:58:28] <vlad2> Ну я же сказал - "замкнуто" ;)
[18:58:34] <valexey> При этом Corba та же в этом плане ничуть не лучше кроме одного - она не создает иллюзий что все будет легко и просто. Там сразу понятно что вот есть внутренняя кухна приложения, а вот торчат из нее интерфейсы наружу. И данные таки придется конвертировать во вне.
[18:59:02] <valexey> /me предпочитает жить без иллюзий
[19:00:04] <valexey> вау! у sf.net'a новый интерфейс!
[19:00:21] <vlad2> Угу. Буквально вчера пытался экспознуть старый плбюсовый код в .net и питон.
[19:00:42] <vlad2> Взял и захерачил в качестве экспознутой проперти сложную плоюбсовую структуру.
[19:00:53] <vlad2> И оно блин, скомпилировалось!
[19:01:01] <vlad2> Иллюзия ж, блин.
[19:01:11] <vlad2> Как только я к этой проперти полезу из питона...
[19:01:25] <vlad2> можно делать савки какие именно ошибки оно будет говорить :)
[19:01:31] <vlad2> Как раз сейчас этим занимаюсь.
[19:01:32] <valexey> :-)
[19:02:19] <vlad2> Там не то, что совсем сложная структура. Ну вектора векторов и все такое. Но тем не менее - не родные массивы .net.
[19:02:51] <valexey> "Для Linux можно собрать с Питоном, установив библиотеку и пересобрав, заменив в app Makefile на Makefile.with_python."
[19:03:24] <vlad2> Makelove.with_python :)
[19:04:12] <valexey> о, да.
[19:04:32] <vlad2> Хотя правильнее "to", но не важно.
[19:05:24] <valexey> вообще, у него примеры не правильно написаны
[19:05:40] <valexey> они должны показывать технологию а не реализовывать полноценные приложения
[19:05:54] <valexey> с хелпами, разбором параметров и так далее
[19:06:03] <valexey> если выкинуть мусор этот, то будет вполне прилично
[19:07:06] <vlad2> Вообще там много понаписано. Инетересно, сколько он времени угрохал на это.
[19:07:46] <vlad2> В нашем мега приложении, кстати, тоже (была) своя (tm) распределенная объектная херня.
[19:08:28] <vlad2> Выпилили нах (почти, в клтенте остались куски) с переходом на веб сервисы.
[19:09:03] <valexey> ну для веб-сервисов ведь тоже протокол нужно как-то определять
[19:09:11] <vlad2> json
[19:09:28] <vlad2> (с модификациями, конечно)
[19:09:32] <vlad2> Но без зауми
[19:09:42] <vlad2> Таки народ учится
[19:10:17] <valexey> ну, json это json, но ему же еще и схема нужна
[19:10:28] <valexey> то есть определять типы сообщений а не только их структуру
[19:10:32] <valexey> /* stuctures marchalling */

#define TA_STRUCT(struct_name, struct_descr) typedef struct { struct_descr } struct_name; const char *g_##struct_name = "typedef struct { " #struct_descr " } " #struct_name; TaRTTI g_rtti_##struct_name;

#define TA_RTTI(struct_name, iface_name) taParseToRTTI(g_##struct_name, iface_name, &g_rtti_##struct_name)
[19:11:18] <vlad2> Да, я и говорю - с модификациями :)
[19:11:44] <vlad2> Угу, это оно.
[19:11:58] <vlad2> Сишный RTTI - бессмысленный и беспощадный :)
[19:13:39] <valexey> /me тоже подобным развлекался в свое время
[19:14:34] <vlad2> На самом деле COM очень легковесен. Если брать COM без ничего (без оберток над ним). Но зато какие-то проблемы (тот де маршгаллинг) там уже решены и инфраструктуроа присутствует.
[19:14:51] <valexey> Зато теперь у меня есть в проекте такое:
[19:14:54] <valexey> #define CONNECTION(src, sel, ValType, dst, code) @{@"src":src, @"sel":@#sel,\
@"dst":dst, @"block" : ^(id s, id trg){ValType val = [s sel]; {code}}}

[19:15:00] <vlad2> (и без COM Automation)
[19:15:48] <vlad2> Узнаю мерзкий обэектив с. Откуда?
[19:16:01] <valexey> из моего поделия же :-)
[19:16:22] <valexey> чтобы не размазывать связи по всему проекту, а иметь их все в одном месте табличкой
[19:17:21] <valexey> в результате получается табличка из строк навроде:
[19:17:24] <valexey>        CONNECTION(hrmCalc, pulse, UInt8, socketSynapse, {[trg setPulse:val];}),
       CONNECTION(hrmCalc, pulse, UInt8, self, {[trg pulse:val];}),
[19:18:22] <valexey> на самом деле можно от типа избавиться думаю. но это уже усложнение
[19:22:19] <valexey> как понимаешь, вычислительные узлы друг про друга ничего не знают вообще
[19:23:15] <valexey> даже на уровне интерфейсов "листнера"
[19:26:04] <vlad2> Дык, динамика такая динамика :)
[19:28:35] <valexey> да не. в плане динамической типизации тут же ничего не используется.
[19:28:56] <valexey> то есть ровно то же я смог бы и на плюсах нарисовать.
[19:29:44] <valexey> в данном случае просто лямбды решают :-)
[19:29:49] <vlad2> А sel - это что? :)
[19:30:54] <valexey> селектор. с тем же успехом туда можно передать указатель на функцию-член
[19:31:02] <valexey> или на мембер сразу
[19:31:07] <valexey> (на поле)
[19:31:21] <valexey> на плюсах, на самом деле, было бы еще выше уровнем и еще кошерней
[19:31:24] <valexey> да и быстрее
[19:32:55] <valexey> vlad2: сегодня на собеседовании пытали парня while'ом
[19:33:09] <valexey> запретив использовать break и continue :-D
[19:33:18] <vlad2> Хе-хе :)
[19:33:36] <vlad2> info21 тебя одобряет :)
[19:33:40] <valexey> парень растерялся и долго-долго переписывал поиск одного элемента в массиве
[19:33:47] <valexey> с for'а с брейком на такой while
[19:33:57] <valexey> потом переписал. с ошибкой
[19:34:36] <valexey> (ошибка классическая: while (arr[i]!=42 && i<len) i++; )
[19:34:59] <valexey> её почему-то совершают ВСЕ
[19:36:41] <valexey> кстати, это наводит на мысли, что если у человека отнять привычный инструмент и дать ему чуть другой, но полностью эквивалентный старому, он резко начинает делать дурные ошибки. и производительность резко падает.
[19:37:00] <valexey> хорошо если всего раза в два падает.
[19:39:20] <valexey> кстати, поэтому же народ на бумажке программирует сильно хреновей чем на компе. инструмент другой. не привычно. рефлексы пробуксовывают и излишне все это отвлекает моск от задачи
[19:40:06] <valexey> чорт. надо в следующий раз собеседующих звать с их ноутами. чтобы уменьшить стресс
[19:40:45] <valexey> или я слишком гуманен? :-)
[19:41:22] <vlad2> Да не, с ноутами хорошая идея.
[19:41:30] <vlad2> Так вот. Ошибка:
[19:41:47] <vlad2> exceptions.AttributeError: 'class_t' object has no attribute 'property1'
[19:42:06] <vlad2> Ye и какого хера оно тогда компилировалось, если все равно не экспознулось?
[19:42:52] <valexey> у меня ощущение, что это исключение в питоне вылезло :-)
[19:42:54] <vlad2> Видмо оно может быть использовано из C++/CLI :)
[19:43:03] <valexey> брр
[19:43:12] <vlad2> Дык, оно мне и нужно в питоне.
[19:43:26] <valexey> ну, у плюсов то все хорошо - на нет и суда нет.
[19:43:30] <vlad2> А в C++/CLI оно мне не нужно - у меня там и так все экспознуто в виде нэйтив C++.
[19:43:37] <valexey> а питон ожидает что там это будет и у него все опадает в рантайме :-)
[19:44:20] <vlad2> Короче, пошел переписывать структурку в дотнетном виде (с галочками, массивами, как полагается).
[19:44:33] <valexey> ужоз!
[19:45:03] <valexey> да, с ноутами еще хорошо тем, что собеседующим удобней будет сидеть на той же стороне стола где и собеседуемый. то есть не будет противостояния :-)
[19:45:15] <valexey> психология, понимаешь!
[19:53:25] <valexey> YES!
[19:53:32] <valexey> /me сумел уронить свое приложение
[19:58:04] <valexey> Во!  У меня же там лог писался!
[19:58:23] <valexey> Значит не зря уронил :-)
[20:00:17] <valexey> vlad2: а не знаешь какого-нибудь хитрожопого способа сделать так, чтобы при записи в stderr записывалось и в stderr и в другой файл/поток? То есть не извне программы это сделать, а изнутни. Шела, как понимаешь, у меня нет и tee мне не доступно
[20:01:03] <valexey> упс. 33 метра логов накопилось.
[20:26:05] <vlad2> Дык, какая-нибудь логгинг либа - тысячи их.
[20:26:18] <vlad2> Вот в питоне, например, из коробки ;)
[20:40:33] <vlad2> Однако народ неравнодушен к парсерам.
[20:42:08] <valexey> ога. хотя это не самое интересное в компиляторе
[22:56:34] <vlad2> Гы. Оно даже енумы не экспозает (питон валится на поптыке доступа к такой проперти).
[23:38:25] <TRUE> <vlad2>: А вот как расшифровывается "term"
[23:38:43] <TRUE> оно расшифровывается как "член"
[23:39:03] <TRUE> "Если вы понимаете, о чём я"...
[23:39:08] <TRUE> <valexey>: yandex.com
[23:39:16] <TRUE> а ya.ru не пробовал?