Home
Objective Caml
ocaml@conference.jabber.ru
Вторник, 1 ноября 2011< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | http://camlunity.ru/ (теперь с git доступом!) | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ
Конфигурация комнаты
Участники комнаты

GMT+3
[00:40:59] Typhon вышел(а) из комнаты
[00:48:58] Kakadu вышел(а) из комнаты
[04:03:06] klapaucius вышел(а) из комнаты
[06:22:01] vshender вошёл(а) в комнату
[06:24:00] vshender вышел(а) из комнаты
[06:38:06] bobry вышел(а) из комнаты
[06:38:19] bobry вошёл(а) в комнату
[08:22:24] gds вошёл(а) в комнату
[09:10:20] shaggie вошёл(а) в комнату
[09:45:04] ermine вошёл(а) в комнату
[09:45:14] ygrek вошёл(а) в комнату
[10:48:11] Kakadu вошёл(а) в комнату
[10:48:28] <Kakadu> gds: что такое тохес?
[10:49:05] <gds> то же самое, что и тухес, разное произношение просто.
[10:50:45] <Kakadu> ну ты блин одессит хренов
[10:50:50] <Kakadu> никогда не слышал
[10:51:16] <gds> да, одесса рядом, 120км.
[11:36:55] ygrek вышел(а) из комнаты
[12:28:12] ygrek вошёл(а) в комнату
[12:33:23] <Kakadu> gds: а сильно запарно из камлевых исходников получить .dll или не?
[12:38:11] <gds> Kakadu: не сильно.  camlidl погляди, в том числе.  кроме того, CAMLexport или типа того необходимо использовать.  кроме того, надо инициализировать/деинициализировать камловский рантайм.  а ещё можно у mrm спросить, он точно такое делал.  хотя не он один.
[12:39:13] <Kakadu> просто мне на работе надо будет, возможно, пописать плагинчик на Сишечке и я думаю как бы с неё соскочить
[12:39:18] <Kakadu> gds: спасибо
[12:39:29] <gds> ну вот так и соскочить, в правильную сторону думаешь.
[12:43:52] <gds> Kakadu: кстати вот, может проще будет сделать сначала пробную .so под линукс, а потом портировать падвенду.  как бы разобьёшь проблему на две части: собственно so/dll и конкретные вендовые проблемы.
[12:48:16] <Kakadu> но на линуксе хрень протестить то что получилось
[12:48:29] <Kakadu> целевая программа сугубо вендовая
[12:57:29] <gds> не обязательно делать .so с хитрой логикой.  достаточно, чтобы она, например, предоставляла сишную функцию, которой дают строку, а она возвращает целое число.  (не наоборот, так как с выделением памяти всегда сложнее.)
[13:21:48] <Kakadu> ну я примерно понял идею
[13:25:38] <gds> Kakadu: кстати, заодно напиши нормальный туториал с примерами.
[13:29:11] ygrek вышел(а) из комнаты
[13:29:50] <Kakadu> для венды?
[13:30:13] <Kakadu> просто всё ещё сорваться может. (надеюсь что не сорвется)
[13:30:28] <gds> для всех платформ надо уметь такое делать.
[13:38:39] <f[x]> по моему опыту делать dll'ку достаточно грустно
[13:38:54] <f[x]> плюс проблемы с тредами
[13:39:44] <f[x]> проще COM сервер делать :)
[13:42:05] <Kakadu> я хз что такое ком-сервер
[13:42:10] <Kakadu> я слышал только про ком-порт
[13:42:35] <Kakadu> и ещё ком это специальный формат запускаемых файлов в досе
[13:42:41] <f[x]> ipc виндовый такой
[13:57:45] <Kakadu> и ещё мы хотели поговорить про протектеды
[13:58:12] <gds> ну вот, вопросы задал вчера.
[14:02:07] <Kakadu> я помню вопрос f[x] зачем нужны протектеды: в кути, чтобы обрабатывать нажатие на кнопку надо переопредельить метод keyPressEvent у виджета. Следовательно надо протектеды выставлять в камлёвую сторону и в камле переопределять.
[14:02:34] <gds> ровно та же картина, что и с public.
[14:03:41] <Kakadu> просто я сейчас в твин-классе не заменяю вызовы пабликов на вызовы камла?
[14:03:53] <Kakadu> в смысле не вопрос а точка в конце
[14:04:07] <Kakadu> надо?
[14:05:54] <f[x]> критерий ведь не видимость метода, а переопределимость
[14:06:10] <f[x]> разве метод не может быть и пабликом и предназначаться для переопрределения в потомке?
[14:06:18] <f[x]> чисто с плюсовой точки зрения
[14:06:27] <gds> вот-вот.
[14:07:03] <Kakadu> я запостил в #qt как это в кути принято
[14:07:25] <Kakadu> пока можно обсудить какой метод можно переопределять, а какой нет
[14:08:49] <gds> зачем ограничивать -- все переопределять и всё.
[14:11:31] <Kakadu> gds:  <f[x]> критерий ведь не видимость метода, а переопределимость
[14:12:12] <gds> ну правильно.  все методы можно переопределять, вроде.  или нет?  нет же в плюсеках final-методов?
[14:12:24] <gds> или я путаю тёплое с мягким?
[14:14:30] <Kakadu> ещё мысль: положем мы в близнеце переопределили метод
он вызывает камлёвый код (камлёвый метод)
а камлёвый метод вызывает си++сныйметод
цикл должен получится: мы переопределили virtual method A::foo, из A_twin выщывали камло, которое вызывало вызов метода foo как метода класса A и так как меотд виртуальный то вызовется A_twin::foo
[14:17:59] <gds> минуточку, переопределяем же AA::foo: https://docs.google.com/drawings/d/1xzeGCR1meb93jo6QEa8PzZlprxjjqFliZ6qe9rJ5NEo/edit -- или нет?
[14:18:46] <Kakadu> gds: в twin-объекте
[14:18:48] <Kakadu> да
[14:20:20] <gds> вызов пойдёт так: twin -> ocaml object -> qt object
[14:20:37] <gds> мне как раз для мыслей о подобном dataflow нужна была схемка.
[14:20:39] <Kakadu> twin -> ocaml object -> qt object -> twin!!!!
[14:21:05] <gds> почему qt object будет вызывать twin?
[14:21:21] <Kakadu> потому что наследование и виртуал
[14:22:02] bobry вышел(а) из комнаты
[14:22:32] bobry вошёл(а) в комнату
[14:23:51] <gds> Kakadu: но из камла надо вызывать метод qt-объекта, Так Победим.
[14:24:43] <Kakadu> gds:?
[14:24:54] <gds> Kakadu: !
[14:28:16] <Kakadu> какой метод?
[14:28:26] <gds> qt-объекта.
[14:29:10] bobry вышел(а) из комнаты
[14:29:21] <Kakadu> вызовется A_twin::foo
[14:32:43] <gds> плохо.  Надо чтобы вызвался A::foo
[14:33:02] <Kakadu> сейчас в #qt мне чтонить объяснят.
[14:33:15] <Kakadu> gds: джоинься если интересно пофлеймить
[14:33:45] <gds> у меня такое жопочувствие, что всё это реализуется вполне, причём с одним, максимум двумя слоями плюсовых объектов.
[14:34:31] bobry вошёл(а) в комнату
[14:34:33] <gds> не, флейм не очень интересен.  я тут долбаюсь с другим делом, которое принесёт больше радости в камло, чем моя ЕАВИСТЬ в #qt.
[14:37:04] <f[x]> обмазаться двумя слоями плюсовых объектов и наслаждаться жизнью
[14:37:07] <f[x]> тем что от неё останется
[14:37:49] <gds> "суп из страуструпа -- жесть"
[14:38:19] <gds> f[x]: это биндинги, там можно обмазываться несвежим C++ и кодогенерить.
[14:52:36] bobry вошёл(а) в комнату
[15:00:01] bobry вышел(а) из комнаты
[15:03:06] bobry вошёл(а) в комнату
[15:10:14] <Kakadu> кажется я нащупал решение: в классе близнеце будет на каждый метод базового класс 2 своих метода
один будет вызывать камль
второй будет вызывать метод базового класса
и в камле по дефолту будет стоять вызов второго
[15:18:27] <Kakadu> https://docs.google.com/drawings/d/1xzeGCR1meb93jo6QEa8PzZlprxjjqFliZ6qe9rJ5NEo/edit
[15:22:27] klapaucius вошёл(а) в комнату
[15:28:07] <gds> Kakadu: мне кажется, что это надо уложить в одну концепцию, построенную поверх указателей на код.  А именно, как-то избавиться от "переопределён в камле" или нет (от отдельного признака), и сделать именно что вызов двух методов.
[15:32:09] <Kakadu> чутка переделал
[15:32:28] <Kakadu> я не имел ввиду что в рантайме налдо будет проверять был ли метод переопределен
[15:32:45] bobry вышел(а) из комнаты
[15:35:46] bobry вошёл(а) в комнату
[15:38:10] <gds> Kakadu: это очень хорошо, давай дорисуем (потом слайдэ в репку можно будет кинуть, кстати).
Вот, обновил, "вызов метода из qt'шных недр" -- куда пойдёт?  Как пойдёт?
[15:41:45] <Kakadu> оно пойдет в камло. если метод переопределен, то вызовется переопределенное, иначе вызовется из камла тот же метод не-твин-класса
[15:47:08] <gds> то есть, камлообъектов на схеме тоже нужно два нарисовать, правильно?
[15:47:26] <gds> чтобы исключить "если".
[15:51:53] <Kakadu> ну типа того, но   я хз как это норм нарисовать
[15:53:38] <gds> вот там, слева-внизу, нарисовал объёкт some obj, в котором вызов метода -- стрелка слева, а реакция на вызов -- в коробочках, в зависимости от переопределённости.  понятно, что 1. достаточно рассмотреть один метод, чтобы без тупаницы, 2. из коробочек стрелка "не переопределён" должна идти в объект-родитель.
[15:59:33] bobry вышел(а) из комнаты
[16:03:46] bobry вошёл(а) в комнату
[16:16:45] bobry вышел(а) из комнаты
[16:58:18] letrec вошёл(а) в комнату
[16:58:47] letrec вышел(а) из комнаты
[16:59:17] letrec вошёл(а) в комнату
[17:27:22] <Kakadu> угу
[17:27:29] <Kakadu> надо теперь это аккуратно закодитьб
[17:49:16] <gds> Kakadu: картина не полная.  а начал переделывать -- хрень какая-то выходит.  цель -- хочется, чтобы "развилки" были только внутри объекта по его графам "переопределён" vs "не переопределён".  но не могу сообразить, как правильно сделать.  и картина, опять же, не ясна.
[18:09:31] Kakadu вышел(а) из комнаты
[18:46:02] shaggie вышел(а) из комнаты
[18:47:55] Typhon вышел(а) из комнаты
[18:50:35] Kakadu вошёл(а) в комнату
[18:53:47] <Kakadu> gds: а кривые стрлочки можно рисовать?
[18:54:34] <gds> Kakadu: ну я как-то нарисовал, композицией дуги и стрелки, но вполне приемлемо, как я поглядел, просто ломаная из стрелок.  2-3 сегмента для выразительности -- очень даже ок.
[18:57:49] <gds> Kakadu: call caml code должно только в один объект ломиться.  по идее, в самый последний -- тот, который потомок.
[18:58:42] <Kakadu> я продолжаю настаивать на рассматривании двух случаев
[18:58:52] <gds> про "переопределено" и "нет"?
[18:59:22] <Kakadu> да
[18:59:55] <gds> ща нарисую.  Подумал, что можно легко представить это (причём наглядно).  Сообщу, как закончу.
[19:12:23] <gds> Kakadu: вот такую _нотацию_ я предлагаю: https://docs.google.com/drawings/d/11TXc1twetjB-9bots7SGsPTPfIQhwmRXe8nr7owQj7g/edit .  Смысл в том, что 1. вызов входит в конкретный метод, а разбор случаев уже виден из-за того, куда и какие стрелки идут.  2. видны оба случая на картине.  3. не дублируются стрелки, которые в другом случае шли бы как к foo() переопределённому, так и к bar() непереопределённому.
Если чо, вроде копипастится оно между разными рисунками.
[19:13:48] <Kakadu> меня смущает только то, как ты это скомпонуешь всё целиком
[19:14:05] <Kakadu> и ещё мне хочется найти более специализированную онлайн рисовалку
[19:18:09] <gds> а что целиком?  надо только два пути проследить, сходу.  вызов метода из камла и вызов метода из qt.  ну, там, стрелки разноцветные сделать, хз.
вообще, я предпочитаю разбивать задачи на настолько простые, чтобы они помещались в голову всегда.  тут же, с qt, надо иметь схему в голове.  несколько раз пробовал построить и явно не справляюсь.  вывод: надо как-то зарисовать или прочими способами сделать так, чтобы взгляд на монитор / на лист бугаги давал полную общую схему.
[19:21:24] <Kakadu> я пока попробую порисовать в https://creately.com/app
[19:24:12] <gds> вошёл, давай урло рисунка, если получится.
[19:42:47] <gds> кстати, у меня на практике был случай, когда человек порядка 2..3 месяцев сравнивал trac vs redmine vs others, с их плагинами, расширениями, прочими аспектами, вместо того, чтобы работать (хотя в работе был выбор -- админить, кодить, программировать, архитектить, прожект-менеджерить -- нельзя сказать, что он это делал из-за того, что "тупо кодить не прёт" или "всё уже наменеджерено").
[19:46:02] АК вышел(а) из комнаты
[19:46:30] <gds> (ну, не совсем "вместо", были и другие дела, вырывающие мозг на корню у данного человека.  но я бы точно по-другому сделал.  google -> "trac" vs "redmine", "trac говно" vs "redmine говно", дальше несложная арифметика, дальше "берём то, что есть, а для отсутствующей функциональности -- либо миграция на другую систему (хоть копипаст), либо плагины дописать")
[20:02:55] gds вышел(а) из комнаты
[20:09:36] gds вошёл(а) в комнату
[20:20:25] letrec вышел(а) из комнаты
[20:49:19] <Kakadu> блин, как же пофиксить этот strlen
[20:51:15] <Kakadu> я в шоке. strlen пофиксился когда я сделал для gcc -О5 вместо -О0
[20:52:34] <f[x]> годный фикс
[20:57:32] АК вошёл(а) в комнату
[21:10:29] <Kakadu> напомните, чтобы деюажить было лучше как собирать камло: в натив или custom?
[21:17:14] shaggie вошёл(а) в комнату
[21:20:51] <Kakadu> NB. фикс фиксит если только компилять в натив
[21:24:39] ermine вышел(а) из комнаты
[21:32:36] <Kakadu> кто живой скажите веское слово: http://paste.in.ua/3260/
[21:33:42] <gds> а что там вообще показано?  кровь кишки разэтосамое -- вижу.
[21:34:14] <Kakadu> https://github.com/Kakadu/lablqt/tree/new2/inher
компилябельно
[21:34:30] <Kakadu> падает после нажатия любой кнопки
[21:40:28] <gds> Kakadu: весьма кэповское предположение, но дело в том, что криво вызываешь метод, ибо caml_sendN -- вызов метода камловского объекта.
[21:42:14] <Kakadu> gds: ocaml-3.12.0$ cat asmcomp/cmmgen.ml | grep Message -A 20
[21:42:39] <Kakadu> я тоже умею капитанствоваться)
[21:54:05] <gds> как вариант -- перед caml_*_public_method посмотри тег объекта, у которого берёшь, также интересен хеш тега, и интересно, какой именно объект был всунут в биндинги (есть ли у него метод с таким хешем).
[21:55:29] <Kakadu> ммм. если такого метода нет, то вроде caml_get_public_method должен падать....
[21:55:35] <Kakadu> но метод находится
[21:57:04] <gds> тег объекта -- Tag_val или как-то так.  Должно быть то, что в Obj.object_tag.
про метод -- хрен знает точно.  Может посмотреть, какой именно метод находится?  Точно ли он "хороший"?
[21:59:58] <Kakadu> тэг у объекта хороший --- 248 как и надо
[22:02:59] <Kakadu> gds: как ты хочешь проверять хорошесть метода?
[22:03:59] <gds> посмотреть тег результата, например.  Посмотреть, совпадает ли с тем, что даёт printf "%i\n" ((Obj.magic obj#meth) : int).
[22:07:54] <Kakadu> а %i это что?
[22:08:15] ygrek вошёл(а) в комнату
[22:09:08] <Kakadu> просто мне дикое что-то печатает
[22:09:47] <gds> %i -- это вывод целых чисел.  можно ещё %x, если в сишечьке %x тоже.
[22:09:48] <Kakadu> в сишечке %i == %d
[22:10:26] <Kakadu> у меня в камле печататется существенно другое
[22:10:52] <Kakadu> setting caml objs = fdb94428
(Obj.magic aa#keyPressEvent) =  70121764462756
tag of camlobj is 248
inside QWidget_twin::keyPressedEvent, camlobj = fdb94428
tag of meth is 247
calling callback of meth = fdb94660
Segmentation fault
[22:11:26] <ygrek> писать надо просто без багов!
[22:11:30] <ygrek> тогда и багов не будет
[22:14:05] <Kakadu> ygrek: я даже боюсь тебя просить посмотерть. там же опять makefile!
[22:17:23] <gds> Kakadu: ещё можно посмотреть на (Obj.tag (Obj.repr aa#keyPressEvent)), вдруг в камле что-то криво.  (а то и вызвать этот метод, например, чисто для теста.)
[22:31:58] <Kakadu> что-то сам метод в лоб не вызывается
[22:32:05] <Kakadu> sigsegv
[22:32:20] <Kakadu> #0  0x00007ffff704908a in QWidget::keyPressEvent(QKeyEvent*) () from /usr/lib/libQtGui.so.4
#1  0x000000000041f163 in qWidget_twin_super_keyPressEvent (self=6691152, arg0=0) at AA.cpp:40
#2  0x000000000042d3ac in caml_c_call ()
[22:36:58] <gds> пост http://ru-declarative.livejournal.com/101375.html , в котором многие ВНЕЗАПНО понимают различие между целочисленными арифметиками с фиксированной и с произвольной точностью, и радости автоматических приведений типов на манер c/c++ и прочего перла.
[22:37:05] gds спатке
[22:37:24] gds вышел(а) из комнаты
[22:52:00] shaggie вышел(а) из комнаты
[22:52:18] <ygrek> gds: насчёт callcc - прими две миллиОлега
[23:21:08] Kakadu вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!