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

GMT+4
[00:44:28] Kakadu вышел(а) из комнаты
[01:26:11] ygrek вышел(а) из комнаты
[01:26:14] ygrek вошёл(а) в комнату
[02:23:46] ygrek вышел(а) из комнаты
[03:37:03] letrec вошёл(а) в комнату
[04:42:16] letrec вышел(а) из комнаты
[07:20:40] komar вышел(а) из комнаты: Replaced by new connection
[07:20:40] komar вошёл(а) в комнату
[09:39:08] Typhon вошёл(а) в комнату
[10:06:00] ermine вошёл(а) в комнату
[10:27:09] Typhon вышел(а) из комнаты
[10:58:13] ygrek вошёл(а) в комнату
[11:30:59] gds вышел(а) из комнаты
[11:32:35] Typhon вошёл(а) в комнату
[11:38:06] ygrek вышел(а) из комнаты
[11:38:13] gds вошёл(а) в комнату
[13:26:15] shaggie вошёл(а) в комнату
[13:37:55] <gds> а не кажется ли вам, что строить эффективный код на моноидах -- как-то не очень хорошо?  напрашивается явно структура, в которой есть тип "всовываемого" значения, тип промежуточного значения с моноидальными свойствами, и тип результата.  чтобы внутри можно было бы использовать какое-либо промежуточное представление, а в качестве результата генерить уже честную структуру данных.  То есть, что-то типа такого: http://paste.in.ua/3228/
[13:41:32] <f[x]> исопльзование термина моноид рядом с кодом замедляет его в два раза
[13:42:14] <gds> жжош!
[13:43:11] <f[x]> правда же
[13:43:32] <f[x]> PR#5361 посмотри лучше
[13:44:05] <f[x]> для поднятия настроения
[13:45:38] <gds> посмотрел, было бы клёво.  А также "not_boxed" для type t = [ A | B ] всяких, чтобы Array.blit/fill оптимизировать.
[13:46:17] <f[x]> было бы клёво если бы для этого не нужно было имплементить частные случаи частных случаев в рантайме
[13:46:25] <f[x]> компилер туповат
[13:48:31] <gds> туповат, факт.
[14:13:49] <gds> вот вопрос.  хочется в "кадастре" кое-какими операциями расширить Num (техника стандартная -- module Num = struct include Num ...), но это будет означать зависимость от nums.cm[x]a.  Чо делать -- принять зависимость (и линковку nums.cm[x]a) как приемлемую, сделать подпакет, сделать функтор (не нравится, ибо рантайм-цена, которую можно и нужно избежать в данном случае).
[15:09:08] <f[x]> это же стандартная либа, не проблема имхо
[15:14:30] komar вышел(а) из комнаты: Replaced by new connection
[15:14:30] komar вошёл(а) в комнату
[15:16:25] <gds> понял, так и сделаю.
[15:31:42] <gds> lwt писали няшечки: http://paste.in.ua/3230/
[15:39:04] letrec вошёл(а) в комнату
[15:42:14] bobry вышел(а) из комнаты
[16:04:53] bobry вошёл(а) в комнату
[16:18:38] Kakadu вошёл(а) в комнату
[16:25:02] <gds> странная ерунда с libev: http://paste.in.ua/3231/
[16:25:06] <gds> почему такое может быть?
[16:41:39] <f[x]> -lev линкует супротив .so же
[16:42:55] <f[x]> гг, лучше бы сразу assert false писали если fd_passing нету
[16:45:20] <f[x]> ev_default_loop в хидере определён
[16:48:12] <gds> -lev -- ну ладно, сошка тоже есть,
$ strings /usr/lib/libev.so | grep ev_defau
ev_default_loop
ev_default_loop_ptr
[...]
[16:48:37] <gds> ну зачем же assert false, просто надо было прямо написать #if и всё такое.
[16:48:55] <f[x]> хм, а у меня не так
[16:49:12] <f[x]> $ readelf -s /usr/lib/libev.so | grep ev_default
    88: 00000000000033d0    18 FUNC    GLOBAL DEFAULT   12 ev_default_fork
   102: 0000000000009520    50 FUNC    GLOBAL DEFAULT   12 ev_default_destroy
   115: 000000000020ced8     8 OBJECT  GLOBAL DEFAULT   24 ev_default_loop_ptr
   123: 00000000000073a0   162 FUNC    GLOBAL DEFAULT   12 ev_default_loop_init
[16:49:44] <gds> в .h тоже есть функция, но не глядел, какие ифдефы там стоят.  ща убегаю, а погляжу, как прибегу.
[19:00:08] <gds> f[x]: а у меня --
$ readelf -s /usr/lib/libev.so | grep ev_default
    84: 0000000000007780   190 FUNC    GLOBAL DEFAULT   11 ev_default_loop
   119: 000000000020dd08     8 OBJECT  GLOBAL DEFAULT   23 ev_default_loop_ptr
однако
$ readlink /usr/lib/libev.so
libev.so.4.0.0
[19:06:37] <f[x]> значит у меня древняя libev
[19:06:51] <gds> или у меня, б.., слишком новая.
[19:07:07] <f[x]> минимальный пример есть?
[19:08:19] <gds> по логике, если ifdef'ы козлят, то
$ cpp /usr/include/ev.h  | grep ev_defau
struct ev_loop *ev_default_loop (unsigned int flags );
-- этого бы не было.
[19:08:27] <gds> пример -- сделаю.
[19:08:45] <f[x]> угу
[19:12:38] <gds> f[x]: так -- http://paste.in.ua/3232/ -- удобно, или как-то поудобнее желательно?
[19:15:12] <Kakadu> gds: а без .opt работает?
[19:15:39] <gds> Kakadu: ровно такой же эффект.
[19:16:27] <Kakadu> видимл у тебя libev старшее чем моя libevent-1.4-2
[19:16:37] <gds> а разве они сравнимы?
[19:16:51] <Kakadu> ой
[19:17:52] <Kakadu> ну у мен я libev4 версии  1:4.04-1
[19:18:13] <Kakadu> и ещё libev-dev и  libev-libevent-dev  стоят
[19:18:55] <f[x]> gds: ок
[19:18:56] <f[x]> ща
[19:18:59] <Kakadu> gds: а у тебя как?
[19:19:59] <f[x]> собирается :)
[19:20:26] <f[x]> libev-dev    1:3.8-1
[19:21:48] <gds> f[x]: срадь господдя.  libev сломали.
[19:21:57] <gds> Kakadu:
$ readlink /usr/lib/libev.so
libev.so.4.0.0
[19:22:21] <Kakadu> это у меня тоже так
[19:23:13] <f[x]> поставил 4.04 - тоже собирается
[19:24:52] <gds> попробую-ка я исключить камло из эксперимента.
[19:24:54] <f[x]> а что у тебя за линкер?
[19:25:15] <f[x]> я наблюдаю такое же сообщение только если убираю -ccopt -lev из строки
[19:25:32] <f[x]> т.е. подозреваю вариант с порядком опций
[19:25:41] <f[x]> ld --version
[19:26:42] <gds> исключил, http://paste.in.ua/3233/
[19:27:08] <gds> f[x]: линкер -- http://paste.in.ua/3234/
[19:27:12] <f[x]> ну ты чётко исключил, а -lev
[19:27:36] komar вышел(а) из комнаты: Replaced by new connection
[19:27:36] komar вошёл(а) в комнату
[19:27:42] <gds> мдааааа
[19:27:51] <gds> реально исключил!  всё!
[19:33:44] <f[x]> ну чё там?
[19:34:11] ftrvxmtrx вошёл(а) в комнату
[19:34:29] <f[x]> оно точно не находит где-нибудь какую-то левую libev?
[19:34:36] <f[x]> gds: ^^
[19:35:02] <gds> минимизировал, пробую пока сам, через пару минут отпишусь.
[19:35:37] <f[x]> strace -o /dev/stdout -f -e open | grep ev
[19:36:31] <gds> f[x]: вот, разница только в порядке -lev: http://paste.in.ua/3235/
[19:37:01] <f[x]> о
[19:37:07] <f[x]> так это точно линкер
[19:37:20] <f[x]> -ccopt -lev вместо -cclib ?
[19:37:29] <gds> ну это-то понятно, что -lлиба надо после .o, но это вроде таки камло?
[19:38:19] <gds> f[x]: "-cclib -lev" таки в камлокоманде.
[19:38:29] <f[x]> сделай -ccopt
[19:41:03] <f[x]> что-то я и линкер обновил, а всё равно не повторяется
[19:47:33] <gds> f[x]: все -cclib заменил на -ccopt, не помогло.  Присунул -cclib -lev в конец ком.строки -- получилось.  Заменил там же на -ccopt -lev -- тот же облом.
[19:48:00] <gds> f[x]: не только "все" сразу заменял -- сначала тот, который при -lev.
[19:48:08] <gds> тоже облом был.
[19:48:51] <f[x]> хм
[19:49:09] <f[x]> у меня -ccopt -lev передвигало -lev в конец
[19:50:41] <gds> а у меня при -ccopt -lev строка такая:
+ gcc -o 'a.out'   '-L/home/gds/dev/ovm/ocaml/lib' -lev -I/usr/include '/tmp/camlprim9abf74.c' '-L/usr/lib' 'lwtc.o' '-lcamlrun' -I'/home/gds/dev/ovm/ocaml/lib' -lm  -ldl -lcurses -lpthread
[19:50:42] <f[x]> бнопня какая-то
[19:50:44] <f[x]> о!
[19:51:10] <f[x]> комбинация 3.12.1 и --as-neeeded даёт то что ты описал
[19:51:16] <f[x]> гг
[19:51:30] <f[x]> французы опять всё поломали
[19:51:50] f[x] понимает почему он до сих пор сидит на 3.11.2 :)
[19:52:46] <gds> я_ничего_не_понял.jpg
[19:53:24] <f[x]> стоп
[19:53:31] <f[x]> 3.12.1 не решает
[19:53:38] <f[x]> но они таки поменяли эффект -ccopt
[19:55:07] <gds> верю, что поменяли.  кстати, у меня и не транк камла, и не самый свежий релиз.  наверное, надо обновить камло.
[19:55:58] <gds> с другой стороны, бардак наблюдается -- -I надо в начало, -l надо в конец, остальное надо не переупорядочивать.  сложная логика.
[19:56:40] <f[x]> http://paste.in.ua/3236/
[19:58:36] <f[x]> похожее на мантисе - http://caml.inria.fr/mantis/bug_view_advanced_page.php?bug_id=5260
[19:59:18] <gds> да, весомый пруф.
[20:00:14] <f[x]> бардак 100%
[20:00:18] <gds> пишем багу?
[20:00:59] <f[x]> я с этим уже кстати возился - http://repo.or.cz/w/mldonkey.git/commit/292182f68281744123703e7d5445b005b3d74285
[20:01:42] f[x] пас сейчас
[20:02:04] <f[x]> бага получается вида "у вас тут полный бардак - сделайте нормально"
[20:02:06] <gds> срань какая.
да от тебя уже всё есть -- пасту покажу им.
[20:02:29] <f[x]> скажут - ставьте -cc опции в правильное место :)
[20:03:19] <gds> так что характерно -- 3.12.x у меня на линупсе заводился хорошо!  сейчас, только после обновления системы, всё поломалось.
[20:05:38] <gds> путём тыка выяснил, что -cclib -lev надо после .c.  Короче, я им не доктор.  Пропатчу lwt и пусть они там верблюдом этосамое.
[20:05:52] <gds> потому что не знаю, как правильно, в том числе.
[20:07:34] <f[x]> это комбинированный эффект получается
[20:08:10] <f[x]> от binutils + 3.12 + кривая билд-система у lwt (и у много кого ещё)
[20:14:46] ftrvxmtrx вышел(а) из комнаты
[20:25:19] <gds> f[x]: а что binutils дают тут?
[20:26:06] letrec вышел(а) из комнаты
[20:26:27] <f[x]> ну они недавно включили --as-needed по дефолту
[20:26:56] <f[x]> либо дистр пропатчил
[20:27:45] <f[x]> http://wiki.debian.org/ToolChain/DSOLinking
[20:38:54] <gds> реакция варьируется от "дофига конкретики, нужной раз в сто лет" до "кое-что им бы кое-куда, чтобы голова лучше держалась".  Воздержусь.
[21:07:42] Typhon вышел(а) из комнаты
[21:26:46] shaggie вышел(а) из комнаты
[22:42:07] shaggie вошёл(а) в комнату
[22:45:10] ermine вышел(а) из комнаты
[23:01:44] Typhon вошёл(а) в комнату
[23:43:38] Typhon вышел(а) из комнаты: Replaced by new connection
[23:43:40] Typhon вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!