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

GMT+4
[00:54:09] Kakadu вышел(а) из комнаты
[03:14:24] Typhon вышел(а) из комнаты
[03:46:28] letrec вошёл(а) в комнату
[04:02:13] letrec вышел(а) из комнаты
[04:06:59] letrec вошёл(а) в комнату
[06:05:55] letrec вышел(а) из комнаты
[06:06:13] letrec вошёл(а) в комнату
[08:06:56] zert вошёл(а) в комнату
[10:10:11] Typhon вошёл(а) в комнату
[10:44:54] bobry вошёл(а) в комнату
[10:54:45] bobry вышел(а) из комнаты
[11:15:24] ermine вошёл(а) в комнату
[11:41:49] shaggie вошёл(а) в комнату
[12:04:19] bobry вошёл(а) в комнату
[12:16:40] bobry вышел(а) из комнаты
[12:30:59] <f[x]> лягушатники опять сервер уронили?
[12:32:30] <ermine> чо ты к нему пристал?
[12:33:30] <f[x]> дык, утренний ритуал - проснулся, умылся (опционально), посмотрел багтрекер, позавтракал
[12:35:16] <ermine> а во сколько ты встаешь?
[12:37:59] <f[x]> теоретически в 7
[12:38:59] <ermine> долго ж ты пытаешься понять, что сервер лежит :)
[12:39:32] <f[x]> таймауты надо подкрутить, ага
[12:42:19] <ermine> а еще давно пора слезть с модема в 300 бод
[12:43:25] <f[x]> откуда ты знаешь?! o_O
[12:44:49] <ermine> вчера видела модем, который супруг вынул из шкафа и отложил в кучу раритетов
[12:45:09] <ermine> классический черный курьер
[12:46:30] ermine как-то недавно видела страшный сон про свой парсер xml и вознамерилась его чуток переделать
[12:47:37] <ermine> там было какое-то странное видение символьного стрима
[12:47:47] <ermine> надо пробовать
[12:49:32] Kakadu вошёл(а) в комнату
[12:51:00] <ermine> Kakadu: тебе еще не снятся кошмары про core?
[12:51:26] <Kakadu> ermine: Если бы они мне снились про коре
[12:52:37] <ermine> жаль
[12:59:12] <Kakadu> ermine: ты мне предлагаешь разобраться во фряхе и всё пофиксить? :-)
[13:00:50] sceptik вошёл(а) в комнату
[13:00:57] sceptik вышел(а) из комнаты
[13:00:57] sceptik вошёл(а) в комнату
[13:01:01] <ermine> Kakadu: ну у тебя два варианта - скомпилить кору под венду и слезть с коры
[13:01:41] <Kakadu> ermine: а как ты скомпилила oUnit падвенду?
[13:03:37] <ermine> Kakadu: у меня венды нет, а под фрей проблем не было с ним
[13:04:24] <Kakadu> ermine: а зачем тогда мне компилять коре падвенду?
[13:04:57] <ermine> Kakadu: чтобы потом не страдать со сборкой горгоны под венду
[13:05:21] ermine смотрит на Kakadu глазами полной идиотки
[13:05:40] <Kakadu> всёравно lablqt не скомпилится пад венду
[13:06:05] <Kakadu> не знаю почему, но полюбому не скомпилится
[13:06:11] <ermine> почему? есть же пся под вендой?
[13:06:16] <Kakadu> gds подтвердит
[13:06:40] <ermine> а как же пся?! ее зачморить везде надо!
[13:07:40] <Kakadu> не знаю почему, но наверняка. Венда такая венда
[13:09:27] <ermine> ну тогда хз, к венде присоединяется и фря тогда
[13:11:04] bobry вошёл(а) в комнату
[13:26:22] <gds> чо/где?  qt падвендой есть, вроде бы.
[13:26:44] <zert> куте везде есть
[13:26:47] <zert> даже на андроиде
[13:27:39] <Kakadu> gds: я про то, что lablqt нереально скомпилить на венде
[13:31:20] <bobry> Kakadu: какие новости lablqt?
[13:31:43] <Kakadu> bobry: я внимательно посмотрел и понял что надо переделать
[13:36:37] <Kakadu> принципы проектирования коры, кому интересно: http://ocaml.janestreet.com/?q=node/28
[13:40:21] <bobry> мински про них в effective ml рассказывал
[13:40:46] <Kakadu> bobry: который в гарварде лекция?
[13:41:27] <bobry> я не помню что за универ там — видимо гарвард ага
[13:41:29] <gds> интересно.  я из этого не использую только "t идёт первым" -- наоборот, делаю t последним, так как типичный шаблон -- пропускать t через цепочку преобразований.  и не использую "Comparable with type ..." в модулях, но это у меня по-другому будет (собственно, то, что сейчас делаю).
[13:52:54] letrec вышел(а) из комнаты
[13:55:45] <Kakadu> мне нравится, что у них есть типа find_exn: ... -> 'a и вместе с ними find: ... -> 'a option
[13:58:16] <gds> это да.  но я пошёл ещё дальше: find_opt, find_exn, find_res : ... -> [= `Ok of 'a | `Error of exn ], find_m в контексте монад, умеющих ошибки, find_all для возврата результата в виде списка.  яснее некуда стало, в том числе, когда от просто find избавился.
[13:59:14] <Kakadu> а я до сих пор с монадами не дружу
[14:00:44] <gds> понадобится -- подружишься.  ("не умеешь -- заставим", или как там.)
[14:01:16] sceptik вышел(а) из комнаты
[14:02:57] <Kakadu> такие вот мысли по поводу наследования.
Если  в кути класс не абстрактный, то в инкапсулирующем его камлёвом классе будут методы (соответствующие виртуальным методам исходного класса) типа
set_override_for_data,
set_override_for_items,
set_override_for_keyPressEvent
куда мы будем передавать лямбды, которые в сишном коде будут вызываться, если они были переданы и метод базового класса если не были переданы.
Если же класс абстрактный то при создании объекта мы передаем лямбды для реализации чистовиртуальных функций, и далее как в случае выше
[14:05:29] bobry вышел(а) из комнаты
[14:05:39] bobry вошёл(а) в комнату
[14:21:27] <Kakadu> ermine: http://groups.google.com/group/ocaml-core/browse_thread/thread/fe5ed7acb09569cf
адепт хочет полный список ошибок после всех фиксов
[14:21:37] <gds> Kakadu: получится ли сделать так, чтобы был окамловский класс и можно было бы от него унаследоваться?
[14:41:06] <gds> Kakadu: более того, я не понял, как будут происходить вызовы во всех разных случаях.  Если хочешь, опиши все варианты для всех комбинаций: 1. абстрактный ли плюсовый класс, от которого наследуемся, 2. переопределили ли метод, 3. ну и какие возможные расклады я ещё упустил.
[14:41:51] <Kakadu> gds: это я сейчас рассматривал вариант без наследования вообще
[14:41:54] <Kakadu> как в х-е
[14:42:41] komar вышел(а) из комнаты
[14:43:14] <gds> понял.  Неинтересно так :)  С другой стороны, хз как сделать правильно.  Я ещё не понял ту проблему, так как был в состоянии интеллектуального упадка до сегодняшнего дня примерно.
[14:45:43] <Kakadu> Если тебе не лень, то можешь попробовать скомпилить мой текущий вариант с наследованием: https://github.com/Kakadu/lablqt/tree/master/inher
[14:45:57] <gds> Kakadu: если понимаешь проблему и видишь, что вариантов нет -- забей на "эстетику" и сделай как видишь, наверное.
с другой стороны, жопой чую, что явно выставлять какие-то лямбды -- мало нужно, так как всегда можно создать класс с "эталонными" пустыми методами, и при вызовах проверять, переопределён ли метод путём физического сравнения лямбды текущей с эталонной.
[14:46:27] <gds> попозже попробую скомпилить, ближе к вечеру, наверное.
[15:20:35] letrec вошёл(а) в комнату
[15:27:54] <ermine> тут у меня опять из-за sexplib кора не компилится
[15:29:24] <ermine> Kakadu: у тебя какая версия sexplib?
[15:30:21] <f[x]> Kakadu: кстати пожалуйся (раз ты уже в коре-листе) чтобы выставляли минимальные требуемые версии для зависимостей в _oasis
[15:31:45] <Kakadu> ermine: на сколько я понимаю их сайт --- с 7.0.2 должно работать
[15:34:46] <ermine> уже 02?
[15:35:00] <ermine> ладно, пока надоело
[15:35:13] <Kakadu> ну у меня дома вроде 7.0.3
[15:35:17] <ermine> все равно импликиты функций в unix_stubs.c остались
[15:38:16] bobry вышел(а) из комнаты
[15:40:24] komar вошёл(а) в комнату
[15:58:00] <gds> таки ounit хорош.  наколбасил тестов (в том числе с их генерацией -- они же, фактически, unit -> unit по типу) -- и фиксишь баги.  "FAILED: Cases: 45 Tried: 45 Errors: 4 Failures: 10 Skip:0 Todo:0".
[17:24:23] ermine поковыряла кору, она почти собирается, но больше пока ничего дешевого в голову не приходит
[17:32:24] <ermine> зря полезни в кору, короче. ых-ых
[17:40:19] <gds> пушнул кое-что в кадастр.  помнится, рассказывал про отладку и show, теперь могу и показать: например, см. https://bitbucket.org/gds/cadastr/src/27f8eda43f94/src/cd_Array.ml#cl-203 про использование аргументов ?tkey и ?tval ниже.  (реальная печать закомментирована.)
[17:42:44] Kakadu вышел(а) из комнаты: Replaced by new connection
[17:42:45] Kakadu вошёл(а) в комнату
[18:46:53] Kakadu вышел(а) из комнаты
[19:13:40] <f[x]> из-за этого камля постоянно забываю в сишном коде запятые
[19:20:43] <gds> а для чего забываешь, для sequence или в аргументах?
[19:20:59] <ermine> пиши на камле по-сишнему, пиши на цэ по-камловски!
[19:21:11] <gds> и в итоге будет всё как на фортране!
[19:21:41] <f[x]> в аргументах
[19:23:03] <ermine> а как можно в камле в скобках не ставить запятые?!
[19:26:22] Kakadu вошёл(а) в комнату
[19:39:27] <gds> кстати, про let open M in и манатки -- кое-когда удобно: https://bitbucket.org/gds/cadastr/src/27f8eda43f94/test/test.ml#cl-358
[19:42:21] <Kakadu> gds: у тебя там время для ковыряния в наследовании не появилось?
[19:54:56] <gds> Kakadu: сейчас натестю сливалку read-write maps with multiple/shadowing bindings (собственно, сейчас копипастю код, который показал), и уж потом займусь.
а скажи, что нужно для сборки, кроме inher/* ?
[19:56:27] <ermine> это будет вместо коры?
[19:56:50] <gds> вместо коры будут батарейки, хехе
[19:57:26] <ermine> ну давай сначала скомпилю!
[19:57:36] ermine понеслась искать исходники
[19:58:48] <gds> да ладно тебе, пока там мало интересного.  readme почитай, разве что.
[19:59:29] <ermine> 1.4.1 pk?
[20:00:17] <gds> а, если ты про батарейки, то бери самый свежак, и в батарейках интересное есть.
[20:00:18] <ermine> gds: я серьезно, надо наставить Kakadu на путь истинный
[20:00:49] <gds> ermine: не знаю.  Про плюсы и qt вопрос важнее, чем про core.
[20:02:39] <ermine> хм, оно хочет камомиле
[20:04:47] <Kakadu> gds: клонировать нада всё, не только inher
[20:05:03] <gds> клонировать-то да, а для сборки inher что нужно?
[20:05:11] <Kakadu> make набрать
[20:05:35] <ermine> компиляю камомиле
[20:05:47] zert вышел(а) из комнаты
[20:06:53] <ermine> компиляю батарейки отопления
[20:07:28] <ermine> скомпилилось!
[20:07:47] <ermine> и поставила
[20:07:57] ermine в ожидании чуда смотрит на Kakadu
[20:08:39] <Kakadu> чудо было на выходных, когда я покончил с Ведьмаком
[20:18:58] <gds> Kakadu: на предупреждения внимания не обращать, точно? http://paste.in.ua/3174/
[20:19:36] letrec вышел(а) из комнаты
[20:27:47] <Kakadu> забей на них
[20:28:40] <Kakadu> там проблема в том, что код крешится когда я пытаюсь вызвать чистовиртуальный метод, реализованный в подклассе
[20:29:11] <gds> Kakadu: так -- http://paste.in.ua/3175/ -- ?
[20:29:30] <Kakadu> да
[20:29:55] <gds> проблему понял, сейчас буду чесать репу.
[20:31:05] <Kakadu> А - это как бэ кутишный класс к которому наследуемся
АА - обертка над ним, где мы реализовываем все функции как вызов камля
WrapperClass --- это такой класс, где есть поле типа value для камлёвого объекта
[20:33:36] <gds> хорошо, что объяснил-конкретизировал.  если что, спрошу непонятное.
[20:36:25] <gds> я туплю -- в плюсеках есть аргументы конструкторов?  new Someclass(1, true, "asd") всякое.
[20:36:34] <Kakadu> да
[20:36:53] <f[x]> как всё запущено o_O
[20:37:02] <f[x]> нно!
[20:37:56] <gds> ну да.  Трогал их палочкой года два назад, а до этого -- где-то в 2005г.  Разумеется запущенно.
[20:38:26] <gds> а может сразу camlobj передавать в конструктор AA?
[20:38:54] <gds> кстати, сходу заметил, что есть CAMLlocal*, но нет CAMLreturn -- мне как бы ссыкотно.
[20:39:21] <gds> это-то я смогу дописать, а вот про конструкторы и camlobj -- это надо манул читать, может допишешь?
[20:39:23] shaggie вышел(а) из комнаты
[20:40:01] <Kakadu> gds: вроде CAMLreturn компилится для функций, которые возврщают value, не?
[20:40:17] <gds> CAMLreturn -- как бы закрытие CAMLlocal блока, как я помню.
[20:41:01] <gds> кстати, сходу ещё: надо бы register_global_root, но это я тоже смогу дописать.
[20:41:22] <Kakadu> что ты хочешь регистрировать?
[20:41:56] <f[x]> CAMLreturnT если не value возвращаешь
[20:42:05] <Kakadu> ну, ОК, про камлоретурн ты прав
[20:42:18] <f[x]> кривобиндингота!
[20:43:28] <gds> про "регистрировать" -- нашёл уже.
[20:46:13] f[x] при этом пофиксил у себя Val_int на Int_val :)
[20:47:50] <Kakadu> запушил
[21:00:49] <gds> Kakadu: A::foo должен вызвать A::boo, но, так как он виртуальный и переопределён в наследнике методом AA::boo, должен вызваться именно AA::boo, и вот как раз сообщения "inside AA::boo" мы и не видим, хотя должны были бы видеть.  Правильно?
[21:05:58] <Kakadu> да
[21:08:53] <gds> Kakadu: а почему внутри class AA этот метод объявлен как "virtual void boo() {" -- вроде он для AA не является виртуальным?  Однако этого момента я тоже не помню.
[21:09:51] <Kakadu> gds: по-моему виртуальность это пожизненно
[21:10:01] <gds> давайте же спросим экспертов.
[21:12:24] <gds> с другой стороны, без virtual тоже не работает.  но камлоспецифичного в этой проблеме ничего не вижу -- могу для доказательства заменить камлоспецифичное на плюсоспецифичное, но, по прикидкам, всё останется так же.
или что-то камлоспецифичное есть?
[21:18:34] <Kakadu> камлоспецифичны только биндинги
[21:18:55] <Kakadu> не шаря в камле легко можно свалить мои все проблемы на то, что я в камле налажал
[21:19:17] <Kakadu> f[x]: ты тут вроде шаришь и в камле. и в плюсах
[21:25:33] shaggie вошёл(а) в комнату
[21:36:14] <gds> Kakadu: а разве можно так делать? --
  OCamlBindingObject *o = (OCamlBindingObject*) cpp_obj;
ведь там не просто OCamlBindingObject, а очень даже
class AA : public A, protected OCamlBindingObject {
[21:36:48] <Kakadu> имхо, да
[21:37:05] <gds> версия: вызов метода o->setCamlObj затирает что-то из полей объекта => фейл.
[21:39:07] <Kakadu> gds: Я пока не понимаю как оно может затирать. Чтобы случился пиздец как у нас  надо чтобы оно затерло таблицу виртуальных методов
[21:39:45] <gds> может её и трёт, хз.  Мне от этих строк довольно-таки стрёмно.
[21:48:00] <gds> Kakadu: http://paste.in.ua/3176/
[21:48:50] <Kakadu> gds: Что ты сделал?!?!?
[21:50:07] <gds> починил, ёмоё.  давай доступ, пушну.
[21:50:38] Typhon вышел(а) из комнаты
[21:52:15] <Kakadu> gds: добавил тебя в Collobarators
[21:52:44] <gds> ой, а чото hg-git не умеет пушить в "git@github.com:Kakadu/lablqt.git" -- что это за урл такой?  Обычно "git://github.com/Kakadu/lablqt.git" был.
[21:53:43] <Kakadu> git://github.com/Kakadu/lablqt.git --- read-only
git@github.com:Kakadu/lablqt.git --- норм урл
[21:59:25] <gds> Kakadu: есть!  https://github.com/Kakadu/lablqt/commits/master
[21:59:49] <gds> кстати, для hg-git правильный урл должен быть "git+ssh://git@github.com:Kakadu/lablqt.git"
[22:00:56] <gds> кстати, я там многое писал "по гуглу", а сам dynamic_cast скопировал из википедии (!), причём русскоязычной (!!11111).  лучше проверить это дело на корректность.
[22:07:51] <gds> (то есть, я рассчитываю, вы все прекрасно понимаете, как хреново я знаю эти плюсы.  я этим не хвастаюсь, это скорее печально, но объём памяти ограничен.)
[22:09:07] <Kakadu> gds: но по-любому получается что я плюсы знаю ещё хуже чем ты, а камло тем паче
[22:10:35] <gds> ой не знаю.  конкретные факты какие-то я помню, а на деле -- мрачно всё.
кстати, dynamic_cast -- чисто proof of concept для доказательства того, откуда бага.  на деле, наверное, вообще надо конструктору давать камлообъект -- то есть, избавиться от dynamic_cast и set caml obj.
[22:12:05] <Kakadu> gds: но тогда в камле появится метод set_cpp_obj ибо никак не создать два объекта одновременно и передать самих себя накрест
[22:12:33] ermine вышел(а) из комнаты
[22:14:17] <gds> Kakadu: можно и без, вроде: http://paste.in.ua/3178/ -- в initializer можно передать self какой-то функции (конструктору, например).
[22:21:47] bobry вышел(а) из комнаты
[22:23:20] bobry вошёл(а) в комнату
[22:26:47] <Kakadu> gds: в #c_plus_рlus говорят, что dynamic_cast знает про смещения при множественном наследовании (так как юзает RTTI) и поэтому у меня теперь не падает при вызове виртуального метода
[22:27:45] <gds> dynamic_cast вызывает правильный set caml obj.  dynamic_cast не используется при вызовах foo/boo
[22:28:32] <gds> о мой язык кривой.  надеюсь, кое-как понятна мысль.
[22:58:34] <Kakadu> если честно, то мысля твоя нифига не понятна была
[22:58:46] <Kakadu> но опыты показывают вот что
[22:59:31] <Kakadu> если оставить си-каст, но  приписать в WrapperClass.h виртуальный деструктор, то абстрактный метод вызывается, но всё падает так как там _camlobj == 0
[22:59:44] <Kakadu> а с dynamic_cast он не 0
[22:59:47] <Kakadu> магия
[23:05:56] <gds> мысль уточню.  она состоит в том, что раскладка полей объектов классов AA и OCamlBindingObject разная, и тупо кастовать -- не вариант.  dynamic_cast делает что-то другое.
далее, какие-то факи нагуглились, и там указывается, что наличие хотя бы одного виртуального метода в классе вызывает появление vtbl.  что ты и добился добавлением _виртуального_ деструктора.
[23:07:39] ygrek вошёл(а) в комнату
[23:11:27] ygrek вышел(а) из комнаты
[23:12:15] <Kakadu> ох уж это С++
[23:12:27] <Kakadu> а я его в универе сдал
[23:12:33] <Kakadu> и х-ь в универе сдал
[23:21:03] Typhon вошёл(а) в комнату
[23:22:57] ygrek вошёл(а) в комнату
[23:23:46] gds вышел(а) из комнаты
[23:42:16] <ygrek> http://juick.com/dmz/1571617
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!