[07:51:33] <vаlexey> ххх: Еще одна одногруппница вышла замуж, а чего добился ты?
ууу: Ну, я купил Е-75...
[08:06:19] <vаlexey> хм. забавно http://special.habrahabr.ru/microsoft/events/imaginecup/
[08:06:21] <vаlexey> гм
[09:39:20] <geniepro> http://fit4brain.com/1519
[09:39:39] <geniepro> vаlexey: http://fit4brain.com/wp-content/uploads/files/f1/russian-in-cats-11.jpg
[10:38:01] <kpmý> http://www.opennet.ru/opennews/art.shtml?num=40869 миссия ethz - исправлять косяки за итшниками всего мира
[10:39:45] <kpmý> .
[10:39:47] <тихий бот> kpmý, 2 - 4
[10:41:17] <geniepro> http://www.image.kg/images/2014/10/20/7nR4K.jpg
[10:55:49] <geniepro> http://www.image.kg/images/2014/10/19/eGsEw.jpg
[12:10:09] <vаlexey> kpmý: скретисть С++ и PHP - это значит подчищать? ;-)
[12:12:37] <geniepro> vаlexey: о_О эм? там же вроде про джит-транслятор из питона в с++, при чём здесь пхп?
[12:12:51] <vаlexey> а, ну питон с С++
[12:12:53] <vаlexey> тоже неплохо
[12:13:16] <geniepro> почему просто не зделать компилятор из питона в с++?
[12:13:44] <vаlexey> не эффективно же, без сборки статистики по типам
[12:13:49] <vаlexey> жид эффективней будет
[12:53:33] <kpmý> .lem
[12:53:35] <тихий бот> kpmý, Земля падает на Солнце и все гибнут.
[13:00:01] <Jordan> Подскажите в чём ошибка.
[13:00:20] <Jordan> код си
[13:00:24] <Jordan> struct GUI_Widget
{
size_t Type;
struct GUI_Rect Size;
char * Label;
struct GUI_Widget * Next;
struct GUI_Widget * Priv;
union
{
struct GUI_Button
{
size_t stat;
};
struct GUI_Menu
{
struct GUI_WidgetList * List;
};
struct GUI_SubMenu
{
struct GUI_WidgetList * List;
};
};
};
struct GUI_WidgetList
{
struct GUI_Widget * Head;
struct GUI_Widget * Tail;
};
[13:01:05] <Jordan> struct GUI_Widget * GUI_MenuNew(const char * Label)
{
struct GUI_Widget * P = GUI_WidgetNew(Root, GUI_WIDGET_MENU);
P->Label = strdup(Label);
P.GUI_Menu->List = GUI_WidgetList(); здесь ошибка ругается на GUI_Main
return P;
}
[13:01:19] <Jordan> P.GUI_Menu->List = GUI_WidgetList(); здесь ошибка ругается на GUI_Main
[13:02:17] <Jordan> Это меню, которое содержит список виджетов. Создаётся меню и инициализируется список функцией GUI_WidgetList()
[13:02:46] <Jordan> Как тогда обращаться к полю GUI_Menu
[13:03:10] <Jordan> Может привести весь код?
[13:10:23] <geniepro> Jordan: какое сообщение-то? и что за GUI_Main?
[13:11:45] <Jordan> In file included from main.c:6:
GUI.h:144: error: struct or union expected
[13:11:46] <geniepro> вот это вообще сомнительный код:
union
{
struct GUI_Button
{
size_t stat;
};
struct GUI_Menu
{
struct GUI_WidgetList * List;
};
struct GUI_SubMenu
{
struct GUI_WidgetList * List;
};
};
[13:12:04] <geniepro> пиши уж лучше сразу на плюсах -- проще и надёжнее будет
[13:12:41] <Jordan> В этом коде и смысл. Есть некая универсальная структура, на основе которой и создаются все виджеты
[13:13:14] <Jordan> GUI_Main нет, это я ошибся ругается на GUI_Menu
[13:13:59] <geniepro> > P.GUI_Menu->List = GUI_WidgetList();
GUI_WidgetList() -- тут у тебя структура в результате
а P.GUI_Menu->List = ожидает указатель на структуру
[13:14:14] <geniepro> попробуй так:
P.GUI_Menu->List = &GUI_WidgetList();
[13:14:20] <vаlexey> /me жадно припал к паяльнику
[13:15:56] <geniepro> вот эти вот структуры
[13:16:06] <geniepro> struct GUI_Button
{
size_t stat;
};
struct GUI_Menu
{
struct GUI_WidgetList * List;
};
struct GUI_SubMenu
{
struct GUI_WidgetList * List;
};
лучше вывести в отдельные типы
[13:16:30] <geniepro> это более технологично
[13:16:51] <geniepro> vаlexey: получил радиодетальки?
[13:17:03] <vаlexey> неа
[13:17:12] <vаlexey> но у меня и без них есть тут что попаять :-)
[13:18:14] <vаlexey> нужно тут одну штучку по i2c завести
[13:19:12] <Jordan> & не работает
[13:19:28] <Jordan> struct GUI_WidgetList * GUI_WidgetListNew()
{
struct GUI_WidgetList * P = calloc(1, sizeof(struct GUI_WidgetList));
assert(P != NULL);
P->Head = NULL;
P->Tail = NULL;
return P;
}
[13:19:35] <Jordan> Возвращает указатель
[13:21:43] <vаlexey> Jordan: что такое GUI_Main?
[13:21:58] <Jordan> описался, GUI_Menu
[13:21:59] <vаlexey> а, меню
[13:22:00] <vаlexey> ок
[13:23:11] <vаlexey> Jordan: P.GUI_Menu->List -- может быть P->GUI_Menu->List ?
[13:24:36] <geniepro> кстати да: struct GUI_Widget * P
[13:26:11] <Jordan> P->GUI_Menu->List выдаёт not found GUI_Menu
[13:26:36] <Jordan> Может весь код привести относящийся к ошибке?
[13:27:17] <vаlexey> я бы тоже недоумевал
[13:27:22] <vаlexey> у тебя ж там полей нет :-)
[13:27:28] <vаlexey> вот как думаешь, что это делает:
[13:27:32] <vаlexey> union
{
struct GUI_Button
{
size_t stat;
};
struct GUI_Menu
{
struct GUI_WidgetList * List;
};
struct GUI_SubMenu
{
struct GUI_WidgetList * List;
};
};
[13:27:32] <Jordan> как нет?
[13:27:51] <vаlexey> я лично тут не вижу ни одного поля типа GUI_Menu например :-)
[13:27:52] <Jordan> объединение структур
[13:27:56] <vаlexey> а ты видишь?
[13:28:01] <Jordan> Вижу
[13:28:08] <Jordan> Как тогда?
[13:28:10] <vаlexey> ок, как это поле называется?
[13:28:24] <vаlexey> Не его тип, а само поле
[13:28:33] <Jordan> Поле чего?
[13:29:02] <vаlexey> поле объединения, очевидно.
[13:29:03] <Jordan> Я не понимаю
[13:29:20] <vаlexey> я вижу новый тип - юнион. отлично. и в нем ровно НОЛЬ полей.
[13:29:32] <vаlexey> зато объявлены типы внутри :-)
[13:30:10] <geniepro> говорю же -- нажо эти подтипы в отдельные типы вывести, а затем указать поля этих типов, раз уж захотелось идти по такому пути
[13:30:24] <Jordan> Дошло
[13:30:28] <vаlexey> geniepro: это то как раз не обязательно
[13:30:45] <geniepro> за такой код только один приговор -- растрелять!!!
[13:30:47] <Jordan> Как без выноса полей, удобно когда всё в одном месте
[13:30:51] <vаlexey> то есть я так как у него тоже делаю иногда. но, блин. поля то объявлять тоже надо :-)
[13:31:03] <geniepro> Jordan: сегодня удобно, а завтра потеря контроля
[13:31:05] <vаlexey> Jordan: без выноса типов, возможно ты имел ввиду?
[13:31:17] <Jordan> Да
[13:31:17] <vаlexey> Jordan: примерчег на юнион: http://msdn.microsoft.com/en-us/library/5dxy4b7b.aspx
[13:31:30] <vаlexey> Jordan: но типы не обязательно выносить же
[13:31:34] <Jordan> geniepro В си подругому не сделать
[13:31:46] <vаlexey> сделать :-)
[13:32:33] <Jordan> Как?
[13:32:35] <тихий бот> каком кверху
[13:32:38] <vаlexey> union
{
struct GUI_Button
{
size_t stat;
} button_field;
struct GUI_Menu
{
struct GUI_WidgetList * List;
} menu_field;
struct GUI_SubMenu
{
struct GUI_WidgetList * List;
} sub_menu_field;
};
[13:32:43] <vаlexey> очевидно же :-)
[13:32:44] <geniepro> типа того, но отвратно же:
union
{
struct TGUI_Button
{
size_t stat;
}GUI_Button;
struct TGUI_Menu
{
struct GUI_WidgetList * List;
}GUI_Menu;
struct TGUI_SubMenu
{
struct GUI_WidgetList * List;
}GUI_SubMenu;
};
[13:33:13] <vаlexey> а за превикс T - надо убивать. на месте
[13:33:28] <Jordan> Понял, блин вот я тормоз
[13:33:32] <geniepro> дельфисты смотрят на тебя... снисходительно
[13:33:43] <geniepro> *на валексея
[13:33:51] <vаlexey> в первую очередь делфистов и расстрелять
[13:33:54] <Jordan> Спасибо, сейчас буду переписывать
[13:34:32] <vаlexey> всегда пжлст
[13:35:25] <Jordan> Чем префикс Т плох? Унификация же
[13:36:25] <vаlexey> префиксы не нужны
[13:36:27] <vаlexey> совсем
[13:36:27] <тихий бот> от слова совсем
[13:36:36] <geniepro> я лично не вижу чем AMenuClass лучше чем TMenu
[13:36:44] <vаlexey> одинаково убого, да
[13:37:18] <vаlexey> потому что человеческий моск в первую очередь смотри на начало слова. а там бесполезная буква ничего не говорящая о сути штуки. названия не читабельными становятся.
[13:37:22] <vаlexey> поэтому - нинужно!
[13:37:46] <geniepro> в дельфях был популярен такой стиль:
type
PMenu = ^TMenu;
TMenu = record ...
[13:37:51] <Jordan> Всё равно ошибка та же
[13:38:09] <vаlexey> Jordan: что логично.
[13:38:18] <vаlexey> ибо у тебя нет и поля типа юниона этого :-D
[13:38:36] <vаlexey> у тебя просто объявлен безымянный тип-объединение. и нигде не используется :-D
[13:39:02] <geniepro> говорю же -- надо все подтипы выносить отдельно, что бы не ломать мозг ни себе ни другим!!!
растрелять!!!
[13:39:33] <vаlexey> тут нед подтипов :-)
[13:39:46] <vаlexey> ну и если тип используется ровно один раз в одном месте, то смысла его вытаскивать обычно нет
[13:40:16] <Jordan> Я вообще не прнимаю, как это юнион исправить. Что объявлять то?
[13:40:21] <vаlexey> вообще это отдельное искусство - знать когда что вынести отдельно, а когда объявить по месту
[13:40:25] <vаlexey> тут нет догм
[13:40:36] <vаlexey> Jordan ПЕРЕМЕННУЮ!!!11
[13:40:46] <vаlexey> union - это тоже объявление ТИПА, как и struct
[13:40:52] <geniepro> union
{
...
} widgets;
[13:40:57] <vаlexey> где у тебя переменная с этим типом?
[13:41:20] <vаlexey> geniepro: не говори как исправить, а говори как понять
[13:41:56] <geniepro> это слишком долго -- проще уж сказать ему, какую книгу ему надо прочитать )))
[13:42:19] <vаlexey> нифига. во-первых книга не будет прочтена. во-вторых будет еще 100500 вопросов аналогичных
[13:42:23] <vаlexey> если система не понята
[13:42:50] <vаlexey> ыыы Jordan
[13:42:53] <vаlexey> jq
[13:42:54] <Jordan> Та же ошибка P.W.GUI_Menu_Field->List = GUI_WidgetList();
[13:42:55] <vаlexey> ой
[13:42:58] <vаlexey> http://lenta.ru/news/2014/10/20/smartwatch/
[13:43:01] <vаlexey> во
[13:43:06] <vаlexey> Jordan: что говорит?
[13:43:24] <vаlexey> Jordan: P у тебя указатель
[13:43:36] <vаlexey> кто разименовывать будет чтобы потом через точечку наяривать?
[13:44:30] <Jordan> Я начинаю, постепенно впадать в ступор
[13:44:47] <vаlexey> P-ЮW.GUI_Menu_Field->List = GUI_WidgetList();
[13:44:51] <vаlexey> P-ЮW.GUI_Menu_Field->List = GUI_WidgetList();
[13:44:53] <vаlexey> тьху
[13:44:57] <vаlexey> P-ЮW.GUI_Menu_Field->List = GUI_WidgetList();
[13:45:00] <vаlexey> P-ЮW.GUI_Menu_Field->List = GUI_WidgetList();
[13:45:05] <vаlexey> P->W.GUI_Menu_Field->List = GUI_WidgetList();
[13:45:07] <vаlexey> во
[13:45:19] <Jordan> Я так делал
[13:45:23] <geniepro> Jordan: если у тебя переменная объявлена со звёздочкой, то потом обращаться к её полям надо через стрелочку
[13:45:26] <vаlexey> и? что говорит?
[13:45:47] <Jordan> pointer expected
[13:45:55] <vаlexey> что, блин, логично
[13:46:05] <Jordan> Ты издеваешься?
[13:46:07] <vаlexey> давай проблемный код
[13:46:31] <vаlexey> и давай GUI_Widget
[13:46:40] <vаlexey> в текущем состоянии
[13:47:20] <Jordan> struct GUI_Widget
{
size_t Type;
struct GUI_Rect Size;
char * Label;
struct GUI_Widget * Next;
struct GUI_Widget * Priv;
union
{
struct GUI_Button
{
size_t stat;
} GUI_Button_Field;
struct GUI_Menu
{
struct GUI_WidgetList * List;
} GUI_Menu_Field;
struct GUI_SubMenu
{
struct GUI_WidgetList * List;
} GUI_SubMenu_Field;
} W;
};
[13:48:11] <vаlexey> P->W.GUI_Menu_Field.List = GUI_WidgetList();
[13:48:21] <geniepro> Jordan: GUI_WidgetList(); возвращает у тебя структуру, а надо указатель на неё
[13:48:48] <Jordan> struct GUI_WidgetList * GUI_WidgetListNew()
{
struct GUI_WidgetList * P = calloc(1, sizeof(struct GUI_WidgetList));
assert(P != NULL);
P->Head = NULL;
P->Tail = NULL;
return P;
}
[13:48:57] <Jordan> Именно указатель
[13:49:12] <geniepro> Jordan: и что? ты ту приводишь GUI_WidgetListNew() а не GUI_WidgetList();
[13:49:22] <geniepro> New -- нету
[13:49:31] <vаlexey> geniepro: это Си, тут нет new :-)
[13:49:44] <geniepro> vаlexey: о_О ты что там куришь? )))
[13:49:58] <geniepro> попробуй P->W.GUI_Menu_Field.List = GUI_WidgetListNew();
[13:51:01] <geniepro> Jordan: и освой уже оператор typedef, что бы не писать постоянно struct
[13:51:28] <Jordan> Работает, оно работает.!!!
[13:51:42] <vаlexey> Jordan: и советую внимательно смотреть не только на строчку где ошибка, но и на текст что компилятор пишет - он обычно довольно подробно говорит в чем именно состоит ошибка.
[13:51:58] <Jordan> Я tcc компилю
[13:52:29] <vаlexey> бывает
[13:52:49] <vаlexey> А теперь контрольный вопрос - какого типа у тебя поле GUI_Menu_Field и почему там не прокатывала -> ?
[13:53:16] <kpmý> говноеды
[13:53:35] <geniepro> kpmý: полегче! на бубероне у него вопросов было бы не меньше ))))
[13:53:52] <vаlexey> особенно если учесть качество компиляторов обероновских :-)
[13:53:55] <Jordan> Пока не знаю, так как там * List? А GUI_WidgetListNew я описался когда написал GUI_WidgetList
[13:54:03] <geniepro> хотя может и меньше -- типов, определяемых внутри других типов, в обероне вроде нет, как и в хаскелле
[13:54:37] <vаlexey> Jordan: не-ет. Так какой тип у означенного поля?
[13:54:44] <Jordan> В обероне, не так сделано GUI?
[13:54:48] <kpmý> geniepro: откуда инфа)
[13:54:56] <geniepro> kpmý: а нафига в модуле-2 были подмодули?
[13:55:18] <Jordan> vаlexey понял
[13:55:32] <vаlexey> Jordan: понял - озвучь!
[13:55:40] <Jordan> Там объявление структуры, а не указатель на структуру
[13:55:47] <kpmý> geniepro: зачем писать на модуле, если есть кп
[13:55:58] <Jordan> Потому нужен доступ через .
[13:56:02] <Jordan> А не -Ю
[13:56:07] <Jordan> ->
[13:56:51] <vаlexey> там объявление поля структурного типа, а не указателя на структурный тип
[13:57:07] <vаlexey> (Объявление структуры же - это объявление ТИПА, а не переменной/поля)
[13:57:59] <Jordan> Я же правильно ответил
[13:58:01] <vаlexey> это программирование, тут важно четко выражать мысль :-)
[13:58:28] <geniepro> Jordan> Там объявление структуры, а не указатель на структуру
структура -- это тип
поле структурного типа -- это не тип
[13:58:36] <Jordan> Пристыженным ушёл пить чай :-)
[13:58:46] <vаlexey> :-)
[13:59:31] <Jordan> Может программирование не моё, я уже что то сомневаюсь...
[13:59:56] <vаlexey> вопрос сноровки и привычки ;-)
[14:00:17] <vаlexey> но сишечка (чистая сишечка) еще тот язык :-)
[14:00:19] <Jordan> Кофеку выпью, и с новыми силами
[14:00:45] <Jordan> *Кофейку
[14:01:42] <Jordan> Я просто тне ожидал, что я настолько нуб. Писал же всё нормаьно, тут union все мозги выернул.
[14:01:51] <Jordan> *вывернул
[14:02:03] <geniepro> Jordan: вот почему вирт его выкинул из оберона )))
[14:02:39] <vаlexey> а бывает :-) это знаешь, как если смотреть скажем на макет в изометрии - привык с одной стороны, и вроде бы ориентируешься, а потом взял и повернул макет, и уже всё. заблудился.
[14:02:45] <Jordan> Он остался, но в более удобоваримом стиле
[14:03:05] <Jordan> vаlexey В точку, как то так
[14:03:16] <vаlexey> не, юниона в обероне нет совсем. и это уныло. поэтому приходится пользовать SYSTEM
[14:03:46] <Jordan> Как же тогда, пхать разные типы в однуструктуру?
[14:03:56] <Jordan> Смысл юниона в этом
[14:04:06] <kpmý> хуйня это, а не смысл
[14:04:13] <vаlexey> э? ты про что сейчас? про какой язык?
[14:04:19] <Jordan> Оберон
[14:04:28] <vаlexey> kpmý: ога-ога, SYSTEM.PACK наше всё! :-)
[14:04:39] <geniepro> Jordan> Как же тогда, пхать разные типы в однуструктуру?
наследование же -- ООП
[14:04:51] <vаlexey> Jordan: через ООП указатели и такую-то матерь
[14:04:59] <vаlexey> ну подумаешь, фрагментация памяти, фигня!
[14:05:04] <Jordan> В С++ через наследование удобно
[14:05:14] <vаlexey> ну и оверхед, да
[14:05:25] <Jordan> Какой оверхед?
[14:05:30] <Jordan> Что там внутрях?
[14:05:33] <Jordan> Творится
[14:05:34] <geniepro> Jordan: ну вот вирт посомтрел на с++ и увидел что это хорошо и сказал: да будет наследование в обероне!!!
[14:05:40] <vаlexey> а там внутрях жесть и содомия
[14:06:12] <vаlexey> в смысле там будут приведения типов с проверкой в рантайме, там будет промахи мимо кэша и так далее
[14:06:14] <Jordan> geniepro Понял
[14:06:23] <geniepro> Jordan: учи хацкель блеать!!!
[14:08:40] <vаlexey> ну и не говоря о том, что если тебе нужно скажем некую структуру лежащую в памяти отобразить в твои данные чтобы с этим поработать, то в Обероне придется по байтикам это дело КОПИРОВАТЬ в структуры свои. Либо придется писать специальные геттеры-сеттеры которые по байтикам же будут туда обращаться. В общем, УГ и SYSTEM на ровном месте.
[14:08:55] <Jordan> С безымянным юнионом, работает
[14:09:08] <vаlexey> э? хто?
[14:09:30] <Jordan> Я сделал юнион безымянным, чтоб W не писать
[14:10:15] <vаlexey> угу
[14:10:22] <geniepro> Jordan: можно сделать вообще без юниона -- тоже будет работать
[14:10:55] <Jordan> Как? Как тогда роизводить доступ к разным типам?
[14:11:53] <kpmý> vаlexey: а нехуй заниматься перверсией и лезть в память
[14:12:02] <kpmý> ишь блять чего удумали, память у них
[14:12:03] <geniepro> В языке C++ существует специальный тип объединения, называемый анонимным объединением. В анонимном объединении не содержится имени класса и не объявляются никакие объекты. Анонимное объединение просто уведомляет компилятор о том, что его переменные-члены должны иметь одну и туже область памяти. Однако к самим переменным можно обращаться напрямую, не прибегая к обычному синтаксису операторов "точка" и "стрелка".
разве в tcc есть поддержка анонимных юнионов? о_О
[14:12:26] <vаlexey> kpmý: а что ж делать то? программы то работают на реальном железе, увы.
[14:12:28] <geniepro> Jordan> Как? Как тогда роизводить доступ к разным типам?
а оно надо? ))
[14:13:14] <Jordan> geniepro Да, мне нужно в одном списке содержать разные типы, для итерации по ним
[14:13:23] <geniepro> Jordan: я не понял зачем нужно вот это:
struct TGUI_Menu
{
struct GUI_WidgetList * List;
}GUI_Menu;
struct TGUI_SubMenu
{
struct GUI_WidgetList * List;
}GUI_SubMenu;
ведь это один и тот же тип по сути
[14:13:24] <kpmý> vаlexey: у вас абосракции текут
[14:14:15] <vаlexey> где? ;-)
[14:14:25] <kpmý> там
[14:14:35] <vаlexey> Ну, там-то у всех текут...
[14:14:44] <geniepro> kpmý: езжай в самару-городок, поучи иордана уму-разуму )))
[14:14:48] <vаlexey> Что-то где-то подтекает -- прижимай, держи!
[14:15:09] <Jordan> geniepro Для меню, которое сожержит другие виджеты. создаю GUI_Menu, потом добавляю SubMenu
[14:15:42] <geniepro> Jordan: а в чём разница между меню и подменю? а не одно ли и то же это?
[14:16:08] <Jordan> SubMenu можно добавить только в Menu, не иначе
[14:16:15] <Jordan> Типизация
[14:16:39] <geniepro> и в чём смысл? почему бы в меню не добавить другое меню?
[14:16:59] <kpmý> макаки делали поди
[14:17:09] <geniepro> Jordan> Типизация
ты уверен что тут у тебя эта типизация работает?
[14:17:29] <Jordan> geniepro Почему Ирдана, у меня имя есть Евгений
[14:17:50] <geniepro> Jordan: ну у тебя же ник Иордан )))
[14:18:12] <Jordan> geniepro Да, лучше оставить только GUI_Menu
[14:18:46] <kpmý> еврей наверное)
[14:19:53] <Jordan> Таки вы не пхавы, я таки чисто руський, вон брата мойшу спростите.
[14:20:29] <vаlexey> Он таки да, подтвегждаю!
[14:20:40] <Jordan> :-D
[14:20:42] <тихий бот> вахахахаха
[14:23:00] <Jordan> Я искал, редкий ник, а не Evg=+100500
[14:23:42] <Jordan> На реке иордан, крестили Ииисуса Христа. Потому мне ник понравился
[14:23:56] <vаlexey> что, все ЕвгеНики заняты :-)
[14:24:32] <Jordan> Я при регистрации для почты
[14:24:39] <vаlexey> Jordan: в библии петля времени? ну, то есть его крестили в честь того что его на этом кресте будут слегка мучить до смерти? ;-)
[14:24:48] <Jordan> Потом начал под этим ником всюду регистрироваться форумы и т.д
[14:25:29] <Jordan> vаlexey Для того что бы полностью испольнить закон
[14:25:40] <vаlexey> э?
[14:26:05] <vаlexey> самого понятия крещения ДО распятия не могло же быть. по определению
[14:26:56] <Jordan> мне надобно креститься от Тебя, и Ты ли приходишь ко мне?
[14:26:58] <Jordan> оставь теперь, ибо так надлежит нам исполнить всякую правду
[14:28:37] <Jordan> Действо, то было
[14:28:43] <geniepro> vаlexey: https://ru.wikipedia.org/wiki/%CA%F0%E5%F9%E5%ED%E8%E5_%C3%EE%F1%EF%EE%E4%ED%E5
Согласно евангельскому рассказу, к Иоанну Крестителю, находившемуся у реки Иордан в Вифаваре (Ин. 1:28), пришёл Иисус Христос (в 30-летнем возрасте — Лк. 3:23) с целью принять крещение.
[14:28:47] <vаlexey> как можно креститься, до того как распяли на кресте? или он там подсмотрел спойлер (или, что вернее, специально так себя вел) о том, что его казнят и именно таким образом, а последователи из этого сделают культ?
[14:29:09] <geniepro> то было другое крещение, никак не связанное с T-образным распятием
[14:29:18] <Jordan> Да, о распятии было известно, ещё в ветхом завете
[14:29:23] <vаlexey> дык само понятие КРЕЩЕНИЕ от слова крест
[14:29:51] <vаlexey> эмм.. ветхий завет... ок. проконсультируюсь со знакомыми иудеями. они большие спецы по ветхому завету.
[14:31:23] <Jordan> 12. Посему Я дам Ему часть между великими, и с сильными будет делить добычу, за то, что предал душу Свою на смерть, и к злодеям причтен был, тогда как Он понес на Себе грех многих и за преступников сделался ходатаем.
(Исаия 53:12)
[14:32:47] <Jordan> vаlexey Иудеи ещё ждут месссию.
[14:32:53] <geniepro> Креще́ние (греч. βάπτισμα — «погружение в воду») — первое и важнейшее христианское таинство. Признаётся всеми христианскими конфессиями, хотя и не в одинаковом смысле.
Через крещение человек становится членом Церкви. Только после крещения человек получает возможность участвовать во всех остальных церковных таинствах, и прежде всего, в евхаристии. Таинство крещения состоит либо в погружении (однократном или троекратном — в зависимости от конфессии) человека в воду, либо в обливании принимающего крещение человека, с произношением священником установленных молитв.
при чём здесь крест??? о_О
[14:33:19] <Jordan> vаlexey Иисуса Христа они не признают
[14:33:39] <Jordan> geniepro Алексей мат часть не знает
[14:33:41] <kpmý> когда нибудь чувак в экзоскелете с гравицапой попадет в прошлое и всех удивит
[14:34:03] <kpmý> вся проблема в том, специально ли он это сделает или случайно
[14:35:05] <vаlexey> geniepro: из словообразования? ;-)
[14:35:15] <vаlexey> возможно это кривость русской терминологии конечно
[14:35:36] <vаlexey> да, кривость русской терминологии
[14:36:17] <geniepro> vаlexey: ну там при крещении нательный крестик жертве вешают -- может из-за этого называют крещением?
[14:36:32] <vаlexey> что-то мне кажется, что нательного крестика у Христа не было :-)
[14:37:15] <vаlexey> о, по английски правильней этот термин звучит - Baptism
[14:38:08] <geniepro> vаlexey: так нательный крестик вешают крещёным в память о христе, естественно у самого христа его не было )
[14:38:42] <vаlexey> короче, какое-то православие не достаточно ортодоксальное. новдел какой-то
[14:38:43] <vаlexey> фи
[14:38:54] <Jordan> ээээ...
[14:39:28] <Jordan> Православие утвердилось в 600 году. Когда были опровергнуты многие ереси
[14:39:57] <Jordan> Была единая православная вера.
[14:40:05] <Jordan> ортодоксия
[14:40:08] <vаlexey> ересь нельзя опровергнуть. ибо это всего лишь ответвление веры, другая ветвь. форк
[14:40:20] <geniepro> vаlexey: ну, православие и католицизм были когда-то одним и тем же, а протестантизм (где есть и баптизм) -- это новодел, да
[14:40:33] <Jordan> Может в программировании и нельзя ;-)
[14:40:42] <geniepro> vаlexey: ересь -- это же неверная трактовка учения
[14:40:53] <geniepro> ошибка то бишь
[14:40:56] <Jordan> Католицизм появился через 600 лет
[14:40:56] <vаlexey> ну, то есть к тому времени (600 лет) окончательно и бесповоротно умерли все свидетели и свидетели свидетелей. очевидно что все окончательно забылось как оно было на самом деле
[14:41:02] <vаlexey> geniepro: а неа
[14:41:21] <vаlexey> ересь - это просто отдельное учение, или направление: http://ru.wikipedia.org/wiki/%D0%95%D1%80%D0%B5%D1%81%D1%8C
[14:41:26] <Jordan> vаlexey Остались евангелия и жития святых отцов, которые утверждали веру
[14:41:41] <Jordan> Святоотеческая преемственность
[14:42:11] <vаlexey> да даже одно то, что сейчас повсеместно крестят младенцев - уже выдает новодел в оном православии
[14:42:12] <Jordan> Православие опирается, на предания святых отцов.
[14:42:28] <vаlexey> ибо изначально то как бэ было принято что креститься человек должен осознанно. сам.
[14:42:54] <Jordan> vаlexey Традиция, и желание родителей воспитать в православии
[14:43:08] <vаlexey> Ересь!
[14:43:12] <Jordan> Нет
[14:43:14] <vаlexey> И слабость духа!
[14:44:31] <vаlexey> Если хочешь воспитать в православии - воспритывай! Примером, делом. Так воспитывай, чтобы ребенок достигнув совершеннолетия сам, добровольно и осознанно пошел креститься!
[14:44:47] <Jordan> Алексей ты не первый кто обвиняет, на все такие "каверзные" вопросы есть ответы. Ищущий да обрящет
[14:45:20] <kpmý> Си Крест Крест
[14:45:43] <Jordan> Там всё же плюс плюс
[14:45:46] <vаlexey> Слабость духа и слабость веры! Раньше этого не требовалось! А теперь всё. Только уповать на значение по умолчанию у религии. Фи.
[14:45:58] <vаlexey> Надеясь что человеку станет просто лениво что-либо менять.
[14:46:14] <vаlexey> kpmý: да! а программисты на нем - истинные крестоносцы!
[14:47:00] <Jordan> vаlexey Слишком поверностно судишь.
[14:47:07] <Jordan> *поверхностно
[14:47:40] <vаlexey> что вижу, то пою :-) ну и вообще, у меня обед. развлекаюсь ;-)
[14:49:13] <vаlexey> понятно что ресурсов у РПЦ много, поэтому на любой вопрос, будет их ответ, ага. Особенно учитывая что все версии не фальсифицируемы, побеждает тот, у кого в руках больше ресурсов (в т.ч. бабла).
[14:49:24] <vаlexey> ну и кто к власти поближе.
[14:50:20] <kpmý> забаньте валексея за политоту!
[14:50:49] <vаlexey> не, это хуже. это религия :-)
[14:52:35] <Jordan> vаlexey Нет, ответы не сами по себе, а святых отцов жившых в разное время. Православие понимают, через святых отцов которые, жили во Христе.
[14:52:46] <Jordan> Какого ли бо наводела нет
[14:52:54] <vаlexey> /me представил себе эту картину
[14:53:06] <vаlexey> /me содрогнулся
[14:53:33] <vаlexey> и когда же они жили?
[14:53:45] <Jordan> Жили в разное время, в разных культурах, но пиали об одном и том же
[14:54:01] <Jordan> В разное время
[14:54:10] <vаlexey> ну, то есть они не современники Христа
[14:54:20] <Jordan> Современнки
[14:54:22] <Jordan> Апостолы
[14:54:31] <Jordan> И после апостолов
[14:54:38] <vаlexey> дык, ты ж говоришь. что в разное время жили и в разных культурах :-)
[14:54:38] <geniepro> илова не хватает в этой дискуссии ))
[14:56:04] <vаlexey> ну, какбы тоесть, современникам еще можно верить (при условии что сохранились оригиналы их рукописей) с поправкой на личный интерес, и неизбежное искажение истины при устной либо письменной передаче. Ну, то есть там процентов 40 правды наверно есть таки.
[14:56:17] <Jordan> vаlexey 12 апостолов вышли из еврейской среды, так же были апостолы от 70, апостолы от 500, в деяниях апостоло всё это есть
[14:56:21] <vаlexey> Если же это сказания из уст в уста, то там от истины примерно 0 остался.
[14:56:42] <Jordan> vаlexey Евангелия написаны, Апостолами
[14:57:11] <Jordan> Письменность была, проблеи в запис не было. Всё записывали
[14:57:33] <Jordan> Как раз православие, зиждится на письменном предании
[14:58:06] <vаlexey> если это те самые хмыри, что лично знали христа, вместе с ним там выпивали, если, спали, и если оригиналы сохранились (а они сохранились? и их исследовали? что радиоуглеродный анализ показывает?), то им можно доверять процентов на 40 наверно :-)
[14:58:31] <vаlexey> если же они переписывались, то каждая перепись уменьшает достоверность на порядок.
[14:58:31] <Jordan> Оригиналы есть
[14:58:42] <vаlexey> да, перевод на другой язык - тоже на порядок уменьшает достоверность
[14:58:51] <vаlexey> кстати, на каком языке они писаны?
[15:00:15] <Jordan> https://ru.wikipedia.org/wiki/Новый_Завет#.D0.90.D0.B2.D1.82.D0.BE.D1.80.D1.81.D1.82.D0.B2.D0.BE
[15:00:24] <Jordan> смпроблема языков
[15:00:48] <vаlexey> "все Евангелия (и Деяния) являются анонимными текстами, а авторы этих текстов не известны"
[15:00:53] <vаlexey> анонимусы
[15:01:39] <vаlexey> "В самом тексте Евангелия каких-либо указаний на личность автора не содержится, и, по мнению большинства ученых, Евангелие от Матфея не было написано очевидцами"
[15:01:58] <vаlexey> "Текст Евангелия с ходом времени претерпел ряд изменений, осуществить реконструкцию оригинального текста в наше время не представляется возможным"
[15:02:06] <Jordan> Смотри, скольок сходств в евангелиях
[15:02:12] <vаlexey> ну, какбэ тоесть....
[15:02:21] <Jordan> Какого либо яркого отличия среди них нет
[15:02:41] <vаlexey> ну понятно что они друг у друга переписывали. коллективное творчество, фигли?
[15:03:25] <kpmý> talkr.im упал :(
[15:04:53] <vаlexey> исследователи говорят, что каждое следующее базировалось на предыдущем. так что, почему бы и нет? очевидно что если я захочу написать фанфик, то я буду основываться на оригинальном произведении, и чем меньше будет противоречий с оригинальным, тем более благоприятно воспримут мой фанфик фаны.
[15:06:09] <geniepro> vаlexey: напиши фанфик "Гарри Поттер и крещение Христа" )))
[15:06:41] <vаlexey> geniepro: а меня оба лагеря фанов не порвут на ленточки? ;-)
[15:09:13] <vаlexey> http://www.youtube.com/watch?v=894D90JCPcs
[15:12:34] <Jordan> ну какбе да :-)
[15:19:18] <vаlexey> Эпично! http://www.youtube.com/watch?v=h67JpMyrOVE
[15:22:42] <Jordan> Игра?
[15:23:25] <vаlexey> Мир!
[15:23:40] <vаlexey> Точнее - целая вселенная.
[15:23:43] <Jordan> Заставка игры? Или просто ролик
[15:25:00] <vаlexey> Ролик внутри одной из игры по этой вселенной. (но вселенная не только из игр состоит)
[15:27:02] <geniepro> http://haile-rastafari.livejournal.com/91909.html
[15:27:04] <vаlexey> "Сражайтесь за Императора, и вы, возможно, умрёте.
Не сражайтесь за Императора, и вы обязательно умрёте.
Нам нравится делать ваш выбор проще."
[15:31:42] <geniepro> vаlexey> Эпично! http://www.youtube.com/watch?v=h67JpMyrOVE
чо за фигня?
[15:34:25] <geniepro> vаlexey> http://www.youtube.com/watch?v=894D90JCPcs
к этим словам-паразитам ещё надо добавить "короче"
[15:37:01] <geniepro> https://www.youtube.com/watch?v=ilLU3SQ3moQ
[15:37:59] <Jordan> https://www.youtube.com/watch?feature=player_detailpage&v=aefHm2ZPFI8#t=14
[15:49:45] <s6_gajim> где иловб. пусь меня на одинэс надрачивает
[15:50:10] <Jordan> Почему так пример
[15:50:17] <Jordan> typedef struct
{
size_t X;
size_t Y;
} GUI_Point;
[15:50:20] <geniepro> s6_gajim: окстись!
[15:50:43] <s6_gajim> а чё кститься-то geniepro
[15:50:48] <s6_gajim> м?
[15:50:57] <geniepro> s6_gajim: ты катишься по наклонной!!!
[15:51:04] <Jordan> Но в union
[15:51:21] <s6_gajim> geniepro, с чего это?
[15:51:29] <Jordan> union
{
typedef struct
{
size_t stat;
}GUI_Button ;
};
[15:51:36] <geniepro> 1С -- неверный путь! учи хацкель!!!
[15:51:39] <Jordan> Уже не работае
[15:51:43] <Jordan> *работает
[15:51:50] <s6_gajim> зачем хацкель. за него в иркутске не платят
[15:51:56] <s6_gajim> а за 1с платят
[15:52:11] <Jordan> Да, я об 1 С думал
[15:52:11] <geniepro> typedef -- оператор определения синонима для типа -- его, видимо, нельзя пихать внутрь определения типа
[15:52:30] <Jordan> geniepro ок
[15:53:53] <s6_gajim> geniepro, да ты тролль просто , вот
[15:54:37] <acidtech23> за что больше всего платят?
[15:54:53] <geniepro> s6_gajim: да нифига! я же о тебе беспокоюсь -- ты же с 1С совсем поплохеешь, хаскеллем мозги прочищай )))
[15:54:58] <s6_gajim> за эксплуатацию людей acidtech23
[15:55:03] <acidtech23> правильно, за Verilog, VHDL
[15:55:22] <geniepro> acidtech23: да нифига -- за махинации на фондовой бирже!!!
[15:55:45] <s6_gajim> geniepro, мои мозги и так не засорены, нечего их прочищать
[15:59:11] <vаlexey> http://lurkmore.so/images/b/bc/Living_Saint.jpg
[16:07:43] <geniepro> vаlexey: нафига ангелам крылья? о_О
[16:08:04] <vаlexey> для пафоса же!
[16:08:14] <vаlexey> пафос - это топливо для ангела!
[16:09:40] <Jordan> бронелифчик, смешно
[16:10:44] <vаlexey> ну, насколько я вижу, это таки полный доспех
[16:13:34] <geniepro> vаlexey: ну как же полный? самая главная часть -- голова, в которую кладут еду -- не защищена от слова совсем )))
[16:13:54] <geniepro> совсем
[16:14:01] <geniepro> кличко
[16:14:07] <geniepro> бот умер ((
[16:14:17] <geniepro> б-г тоже умер ))
[16:14:19] <vаlexey> насколько я понимаю, им не нужно.
[16:14:27] <geniepro> почему не нужно?
[16:14:33] <Jordan> geniepro б-г?
[16:14:35] <vаlexey> психополе
[16:14:43] <vаlexey> впрочем, они еще и возрожденцы
[16:14:46] <geniepro> тогда им вообще доспех нинужен
[16:14:48] <Jordan> б-г обычно пишут иудеи
[16:15:03] <geniepro> vаlexey: хочешь сказать -- они зомби???
[16:15:25] <vаlexey> почти :-) вот как раз после возрождения частенько и крылышки появляются ;-)
[16:16:55] <Jordan> О чём вообще речь идёт?
[16:17:45] <geniepro> Jordan: об ангелах смерти, вестимо )
[16:17:57] <vаlexey> о Сестрах
[16:29:08] <vаlexey> http://fc04.deviantart.net/fs70/f/2010/142/2/4/Commission__techpriest_by_ceressiass.jpg
[16:55:53] <geniepro> кличко
[16:55:56] <тихий бот> Мы сможем дать горячую воду. Чтобы холодная вода превратилась в горячую, ее нужно подогреть. Понятно. Для этого нужен газ. Состояние с газом... Мы ждем когда нам дадут газ, газа нет
[17:44:22] <Jordan> В принципе, си не так плох, код пишется. И даже нормально работается с ужасным char*
[17:44:59] <Jordan> Но явно узнать размер массива, печалит
[17:45:12] <Jordan> Невозможность узнать размер массива
[17:45:18] <Jordan> Динамического
[17:51:44] <vаlexey> Jordan: а в общем случае в Си это и не возможно.
[17:51:52] <vаlexey> Там же нет массивов "динамических"
[17:52:01] <vаlexey> то есть нет даже операции выделения массивов
[17:52:06] <Jordan> Можно забабахать свой массив
[17:52:15] <Jordan> Но неудобно
[17:52:40] <Jordan> Или явно передавать размер массива в функция, как сейчас и делают
[17:52:48] <Jordan> *функцию
[17:52:53] <vаlexey> либо чем-то его терминировать :-)
[17:52:57] <vаlexey> как те же строки
[17:54:05] <Jordan> размр массива, это детская болезнь, которая не лечится
[17:54:09] <Jordan> В си
[17:54:19] <vаlexey> ну нету в Си массивов :-) забудь
[17:54:25] <Jordan> Так и будут, переполнения и т.д и т.п
[17:54:25] <vаlexey> в языке их нет ;-) считай
[17:54:36] <Jordan> Ну так ввели бы их в новый стандарт
[17:54:52] <Jordan> Стал бы более безопасным
[17:55:01] <Jordan> Был бы оберон с синтаксисом си
[17:55:04] <vаlexey> а смысл? смысл встраивать массивы в язык? нужен механизм который позволил бы массивы делать либой
[17:55:10] <vаlexey> в и С++ такой механизм есть
[17:55:14] <vаlexey> остальное не нужно
[17:55:26] <Jordan> Опыт паскаля, модулы, оберона?
[17:55:31] <vаlexey> ибо под абстракцией массива тебе может разное потребоваться
[17:55:38] <vаlexey> например иметь разреженный массив
[17:56:04] <Jordan> Это который список списков?
[17:56:24] <Jordan> А не, это список с пропусками
[17:56:33] <vаlexey> это который с пропусками. там разные реализации бывают
[17:56:52] <vаlexey> тот, в котором, грубо говоря, много нулей
[17:57:02] <vаlexey> и не имеет смысл их всех хранить в явном виде
[17:58:00] <Jordan> Раз так, в язык нужно вводить ещё и список, так как две структуры на которых всё строится
[17:58:14] <Jordan> Массив и список, всё остальное на основе их
[18:00:15] <Jordan> В обероне массив прост и безопасен, а на его основе уже можно строить любые другие возможные структуры. Но главное это базис
[18:02:55] <Jordan> С другой стороны, механизмы в с++ удобны, зачем от них отказываться
[18:03:12] <vаlexey> Jordan: базис - это с одной стороны, работа с железом напрямую по возможности. а с другой стороны - инструменты для построения абстракций поверх этого
[18:03:24] <vаlexey> при наличии этих двух штук все остальное не нужно
[18:03:35] <vаlexey> ни массив в языке, ни список
[18:04:46] <vаlexey> более того - массива и списка в языке не достаточно
[18:05:19] <Jordan> что еще?
[18:06:35] <vаlexey> а фиг знает. мало ли что придумаем :-)
[18:06:48] <vаlexey> кстати, зачем тебе список если у тебя есть указатели и структуры?
[18:08:05] <Jordan> чуть проще
[18:09:25] <vаlexey> лишняя сущность. абсолютно.
[18:09:56] <Jordan> Да
[19:30:03] <vlad2> /me ставит Yosemite
[19:32:22] <geniepro> https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/10647006_630846887032940_6122369330372553267_n.jpg?oh=2ebc2e51747e7f32059fbbea6dd8dbb3&oe=54EF1169&__gda__=1421008849_516ae70feed8d83df4ef8c2da83ebb8e
[19:33:47] <vlad2> XCode че-то ставит, не иначе поддержку swift.
[19:40:45] <geniepro> http://netsplit.com/happy-10th-birthday-ubuntu
[19:48:07] <vаlexey> vlad2: неа
[19:48:16] <vаlexey> там апдейт еще не пришел вроде как
[19:48:32] <vаlexey> а Юсемити я уже поставил на один из макбуков, да
[19:49:02] <vаlexey> geniepro: меньше читай лосиные репосты - здоровее будешь :-)
[19:49:52] <geniepro> vаlexey: да нормально
[19:50:03] <geniepro> правду надо знать -- тебе тоже не мешает )))
[19:50:13] <vаlexey> это которую? ;-)
[19:50:58] <vаlexey> если бы это были посты, так сказать из первых рук, это имело бы смысл. а просто политический форвард в колличестве десятков в сутки - смысла не имеет.
[19:51:00] <geniepro> но эта медуза, если она и правда напечатала ту статью про русскую подлодку -- без всяких доказательств -- действительно ннарушила свои принципы -- печатать факты, а не домыслы
[19:51:13] <vаlexey> там НЕТ статьи под этим названием
[19:51:16] <geniepro> так какой уровень доверия к этой медузе?
[19:51:28] <geniepro> ну значит грохнули уже, опомнились
[19:51:32] <vаlexey> нет
[19:51:33] <тихий бот> Нет, не нет...
[19:52:10] <vаlexey> там группа статей под общим заголовком. заголовок был сформирован по названию первой статье, а название первой статьи - из заявления этих шведов.
[19:53:15] <vаlexey> суть в том, что прежде чем форварднуть Владимир Лось даже не потрудился сходить на сайт медузы и посмотреть что там к чему.
[19:53:15] <geniepro> https://meduza.io/topic/russkaya-podlodka-v-shvetsii
[19:53:24] <vаlexey> угу. статьи под таким названием нет.
[19:54:11] <vаlexey> в общем, не ищите сенсации там где её нет
[19:54:39] <geniepro> если это так, как ты говоришь, им следовало бы взять слово русская в кавычки -- а если они не понимают, что они должны были это сделать, значит они непрофессиональны
[19:55:11] <vаlexey> у них сайт только запустился, как обычно накладок будет много первое время
[19:55:41] <vаlexey> заголовок конечно желтоватый, и можно было более адекватный придумать
[19:55:44] <geniepro> накладки недопустимы, если они хотят иметь авторитет
а в данном случае это не накладка, а обычная небрежность
[19:55:56] <vаlexey> заковычивать не надо при этом ничего, ибо противоположный смысл получается.
[19:56:51] <geniepro> ну да, именно противоположный и должен быть -- нет же доказательств, что там была русская подлодка
а значит они напечатали клевету -- и пофигу что нет статьи -- есть заголовок, а это министатья по сути
[19:57:25] <vаlexey> но при этом она может быть русской
[19:57:27] <geniepro> ну или они должны были вопросительный знак в конце поставить
[19:57:41] <geniepro> может быть, а может и не быть -- неизвестно им
[19:57:49] <geniepro> а они утверждают, что точно знают
[19:57:50] <vаlexey> поэтому если в кавычках - ты отрицаешь что она русская. что может быть опять таки не правдой
[19:57:58] <vаlexey> короче, аккуратней надо :-)
[19:58:24] <geniepro> ну и что значит русская подлодка? почему не российская?
[19:59:46] <vаlexey> Ну, вдруг она украинская? :-)
[20:01:40] <geniepro> украинские подлодки все в степях же...
[20:05:14] <vаlexey> а это новая разработка. пляжная.
[20:07:14] <s6_gajim> test
[20:07:15] <тихий бот> s6_gajim, тоже пассед
[20:07:15] <Жаба> s6_gajim, passed
[20:39:24] <Jordan> https://www.youtube.com/watch?v=FjH7KxftVPA
[20:39:31] <Jordan> Угар и содомия!
[20:39:44] <Jordan> Интернет по талонам!.
[20:40:43] <Jordan> смотреть с 55 секунды
[20:42:10] <Jordan> Возможно, что вброс для поднятия рейтинга
[22:05:19] <Jordan> До конца разобрался с union и typedef
[22:05:34] <vаlexey> хоррошо :-)
[22:06:49] <Jordan> Работа спорится. Я решил, гуй на си добить. Именно на си. Хочется проект осилить. Скоро залью на гит хаб
[22:07:08] <Jordan> 0.1.0 версию
[22:07:11] <Jordan> :-)
[22:08:23] <Jordan> Я сейчас ковыряю исходники freeglut
[22:08:36] <Jordan> Как пример
[22:09:07] <Jordan> Довольно понятный код на си
[22:10:29] <Jordan> Там своё гуи, окна, менюшки и вроде кнопки
[22:12:46] <Jordan> Смотрел gtk, код связанный с GtkWidget у них там без union сделано, но как то хитро, через сишный ооп.