Home
Objective Caml
ocaml@conference.jabber.ru
Четверг, 10 марта 2011< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Вики -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+3
[00:04:12] <ygrek> видимо этого не избежать
[00:05:05] <ygrek> совместимым образом в текущую схему непонятно как впихнуть
[00:05:40] <ygrek> и вместо того чтобы ещё пару лет думать как это сделать и теоретически обосновать, лучше наколбасить работающее решение :)
[00:32:25] ygrek вышел(а) из комнаты
[00:37:17] Kakadu вышел(а) из комнаты
[00:43:39] gds вышел(а) из комнаты
[00:49:45] <Typhon> а давно findlib при установке ворнингами гадит? http://paste.in.ua/1876/ -- раньше то ли не было, то ли не замечал
[01:23:58] gds вошёл(а) в комнату
[01:24:57] gds вышел(а) из комнаты
[01:59:24] <Typhon> а что, для oasis'а нету бутстрапера? руками кумарит ставить все депендансы на чистую машинку (а я как раз этим занимаюсь). или это инсталлер для этого? а то он какой-то графический, я его испугался :-)
[03:13:48] ftrvxmtrx вышел(а) из комнаты
[03:49:08] <Typhon> в extunix зело толково устроено всё, но и обвязки с config.h, ifdef
[03:49:15] <Typhon> 'ами достаточно :-)
[03:49:27] <Typhon> btw, https://forge.ocamlcore.org/projects/caml-foreign/ -- кто-то трогал?
[05:22:01] Typhon вышел(а) из комнаты
[05:37:51] iNode вышел(а) из комнаты
[07:24:00] iNode вошёл(а) в комнату
[09:01:29] gds вошёл(а) в комнату
[11:03:35] <gds> что-то глючит у меня падвендой с постгресом при сборке в нативкод.
с "<my.{byte,native}> : thread" запускается "ocamlfind ocamlopt threads.cmxa -thread -linkpkg -package postgresql" и выдаёт "File "_none_", line 1, characters 0-1:Error: Files D:/OVerbld/ocaml/lib/threads/threads.cmxa and D:/OVerbld/ocaml/lib/threads/threads.cmxa both define a module named Thread"
с "<my.{byte,native}> : -thread" запускается то же самое, только без упоминаний про "thread" в тексте команды сборки my.native, и выдаёт "ocamlfind: Error from package `postgresql': This library requires multi-threading support"
в какую сторону копать?
[11:07:20] <gds> в байткод собирается с "<my.{byte,native}> : thread" нормально.
[11:11:17] superbobry вошёл(а) в комнату
[11:18:13] superbobry вышел(а) из комнаты: Be right back.
[11:18:16] superbobry вошёл(а) в комнату
[11:24:51] Typhon вошёл(а) в комнату
[11:35:42] <Typhon> gds: а что-нибудь другое, что -threads хочет как собирается? понять бы пакет глючит, винда или оверблд
[11:39:26] Kakadu вошёл(а) в комнату
[11:40:47] <gds> искал по "-mt" в meta-файлах, и только postgresql-ocaml так реагирует на отсутствие ключа -thread, то есть, не знаю, как проверить на другом пакете.
[12:05:06] <f[x]> gds: запусти с -verbose и посмотри что threads.cmxa два раза линкуется
[12:07:02] <f[x]> > At the moment it is Linux-only, gcc-only, and experimental. It is lightly tested. Also, it is mostly undocumented.
[12:07:23] <f[x]> но вообще любителям писать биндинги без сишного кода должно пригодится
[12:07:28] <f[x]> * ться
[12:10:10] <Typhon> вот я тут начал писать биндинги к zeromq. (первый будет для окамеля у меня). в зеромку тредики создаются, значит, мне надо как-то быть настороже в связи с этим?
[12:10:38] <f[x]> ыыы, я смотрю у нас биндингов к zmq скорок штук пять будет
[12:10:44] <Typhon> да?
[12:10:47] <Typhon> а где ещё?
[12:11:00] <Typhon> ocaml-zeromq на гуглокоде мёртвый
[12:11:06] <f[x]> насколько я помню там все треды унутре
[12:11:18] <Typhon> да, наружу не торчит вроде
[12:11:38] <f[x]> в irc был какой-то товарищ, плюс в рассылке спрашивали
[12:11:48] <Typhon> точно, припоминаю
[12:12:01] <f[x]> раз не торчит, и колбэков с этир тредов нет то всё ок
[12:12:17] <f[x]> я тоже в бэкграунде держу мысль про zmq :)
[12:12:48] <Typhon> у меня это первый биндинг (эротично даже, ^_^ ), так что буду спрашиивать, наверное
[12:13:37] <f[x]> ты главное не спеши, держись уверенно, и всё получится!!1
[12:13:39] <Typhon> сейчас пока как есть буду втупую, дальше планируя совместимым с lwt сделать, тем более, что они там в последних версиях либы накрутили необходимое, для использования их сокетов в асинхронных фреймворках всяких.
[12:15:37] <Typhon> а про оазис-бутстрап что скажете? инсталлер — это оно?
[12:19:22] <f[x]> угу, оно, плюс там бинарники есть если ты совсем ленивый %)
[12:19:32] <f[x]> ну и зависимостей там три штуки
[12:19:47] <Typhon> да ладно, три — шесть пакетов как минимум вчера ставил
[12:20:22] <f[x]> я имею ввиду три кроме тех что в пакетах :)
[12:20:51] <f[x]> плюс в debian'е эти зависимости уже в unstable вроде
[12:22:11] <Typhon> а инсталлер как зависимости ставить будет? пакетным менеджером или из исходников? а то внутрь .bin не посмотришь, а запускать его страшно :-)
[12:22:30] <f[x]> вряд ли пакетным
[12:22:38] <f[x]> я руками собирал
[12:23:11] zert вошёл(а) в комнату
[12:24:30] <Typhon> я тоже всё руками поставил, но это довольно утомительно (хотя без запинок прошло, на убунте; думается на фрибсд какой-нибудь пакет брыкался бы :) ). не могу найти исходники их бинарного инсталлера, плохо ищу, или их нету?
[12:24:42] <f[x]> не знаю
[12:28:06] ftrvxmtrx вошёл(а) в комнату
[12:45:17] <Typhon> кстати, вчера люди возмущались в духе "змку надо нативные либы делать", я спросил сегодня в чятике, что думает народ насчёт пуре, без-биндинговых либ — ответили, что исключительно в перформансе дело — мол, пуре-либа будет сильно медленнее биндинга. а что вы думаете насчёт этого? понятно, что пуре-питон либа будет медленнее, но с окамлом это уже не так очевидно.
[12:46:07] <f[x]> ну там в zmq всё заточено на скорость
[12:46:36] <f[x]> пуре будет конечно медленнее, тем более учитывая runtime лок
[13:01:38] ftrvxmtrx вышел(а) из комнаты
[13:03:36] ftrvxmtrx вошёл(а) в комнату
[13:26:04] <Typhon> https://github.com/pdhborges/ocaml-zmq  — вот, кстати, биндинги того чувака
[13:27:22] Kakadu вышел(а) из комнаты
[13:30:45] Kakadu вошёл(а) в комнату
[13:49:09] <gds> а вот подскажите мне такую штуку.  для типа-dbi мне очевидно надо два интерфейса для возвращаемых значений: для императивного кода -- одно, для функционального -- другое.  Разница -- и по ошибкам (брошенные исключения vs [`Ok|`Error of exn]), и по результату -- если уж возвращать варианты, то напрашивается что-то типа [`Ok of [`Command_ok | `Query_ok of result] | `Error of exn] -- то есть, специальный случай для команд, говорящий "команда выполнена успешно".
и думаю, как бы это всё оформить.  самое тупое -- сделать функцию, которая по вариантному значению будет возвращать результат:
fun [ `Ok (`Query_ok r) -> r | `Ok `Command_ok -> special_empty_result | `Error e -> raise e ]
но каждый раз её вызывать, когда требуется "императивный" результат -- криво.
ещё вариант -- делать класс-обёртку над connection, statement, которые будут из функциональных результатов делать императивные.  но криво, так как часто с одним и тем же объектом надо то так работать, то эдак.
ещё вариант -- делать разные методы для разных результатов, типа,
(* execute with positional parameters $1, $2, .. : *)
fexecute_p : string -> array sql_t -> functional_result
iexecute_p : string -> array sql_t -> imperative_result
и методы i* делать в каком-то базовом классе, так как они одинаковые.
но это -- раздутие апи какое-то.  хз.  посоветуйте что-нибудь, а?
[13:50:34] <gds> вообще, темка "разных конвенций" как-то пару лет обсасывалась в рассылке, вроде для ботореек, но не помню, к чему пришли.  Вроде к типу res 'a, который равен 'a для императивных случаев и равен [`Ok of 'a | `Error of exn] для функциональных.  Но куда его удобно приткнуть -- не понимаю.
[13:50:47] <f[x]> делай императивно и через него выражай функционально
[13:51:06] <f[x]> к базе-то родной интерфейс императивный
[13:54:49] <gds> с "первоисточником" определились, мне вообще пофиг, но лучше, чтобы не было гарантированного оверхеда и работы для мусоргского на тему заверни-разверни.  А про остальные вопросы какие идеи?  А то не могу -verbose вставить, пока в другом месте разломал апи и не компилируется, а разобраться с ocamlbuild хочу :)
[13:57:01] <f[x]> остальные вопросы?
[13:57:07] <f[x]> про threads?
[13:57:12] <gds> не, ща.
[13:58:23] <f[x]> заверни-разверни всё равно на каком-то уровне будет, т.к. изначально есть только курсор и исключения
[13:58:25] <gds> про то, делать ли iexecute_xxx + fexecute_xxx в методах классов connection / statement, или как вообще пользователю выбирать, что ему надо, `Ok (`Query res) или просто res (ну и соответственно, `Error e или try .. with [ e -> .. ])
[14:00:04] <f[x]> connection#execute возвращает курсор, который умеет fold пользовательской функции и step/is_end
[14:00:33] <f[x]> поверх него обёртки для запросов которые не возвращают данные или возвращают один рядок
[14:00:36] <f[x]> так?
[14:01:06] zert вышел(а) из комнаты
[14:08:50] <gds> конкретно в постгресе, как я понял, данные возвращаются на клиента все и сразу, что меня поначалу удивило, но, так как первым у меня постгрес в плане бэкэндов, реализовал так, как в нём сделано.  про курсор -- это вопрос второй, хотя его тоже затрону, когда дойду до других субд.
вот рассмотрим простые sql-запросы.  В императивном случае код должен быть такой:
try let res = conn#execute sql in <работа с res>
with [ e -> <обработка ошибки e> ]
в функциональном --
match conn#execute sql with
  `Ok res -> <работа с res>
| `Error e -> <обработка ошибки e>
делать методы с разными названиями -- самый простой способ достичь подобного (различий в типах, например).
[14:14:43] zert вошёл(а) в комнату
[14:42:52] <gds> f[x]: добавил -verbose, вот: http://paste.in.ua/1880/ .  Да, threads.cmxa дважды.
[15:03:04] <Typhon> https://github.com/pikatchu/LinearML  — смотрели?
[15:05:50] <f[x]> gds: а откуда второй threads?
[15:06:37] <gds> а как проследить, откуда именно?
[15:07:32] <f[x]> ну один добавляет ocamlfind по зависимостям очевидно
[15:07:39] <f[x]> а другой откуда-то руками добавлен
[15:08:00] <f[x]> проверь _tags и плагин на предмет use_threads
[15:08:09] <Typhon> вот, кстати, вопрос по [`Ok  of a | `Err of exn] — не вредит ли это "композиционности"? вот для exception-функций я могу сделать
try func1 >> func2 >> (func3 $ func4) with [ e1 | e2 -> … ] — и т.д. — а для exception-less уже типы сходиться не будут, как это решается ?
[15:12:18] <f[x]> монадки нужны
[15:13:05] <gds> f[x]: в этой версии _tags было "<**/*> : thread", и если его убираю, то http://paste.in.ua/1882/
[15:15:14] superbobry вышел(а) из комнаты
[15:15:16] superbobry вошёл(а) в комнату
[15:15:21] Typhon вышел(а) из комнаты
[15:15:36] Typhon вошёл(а) в комнату
[15:15:40] <f[x]> хм, попробуй отредактировать META : добавь requires "threads" и убери error(-mt)
[15:16:50] <gds> Typhon: >> и $ можно переписать так, чтобы они работали поверх res 'a 'e (как я его оформил).  Например, было:
value ( >> ) x f = f x;
стало:
value ( >> ) x f = match x with [ `Ok xv -> f xv | ((`Error _) as e) -> e ];
ну и, понятное дело, x : res 'a 'e, f : 'a -> res 'a 'e.
и мы поняли, что мальчик принёс из леса не ёжика, а bind для манатки.
[15:16:58] <f[x]> стоп, раз postgresql не тянет threads в зависимостях - то кто?
[15:17:22] <Typhon> f[x]: постгрескл тянунть должен, иначе зачем там error(-mt) ?
[15:17:58] <Typhon> gds:     f[x]: хотите из моего окамля х-ль сделать?!
[15:18:08] <f[x]> Typhon: guess what? http://paste.in.ua/1883/
[15:18:09] <gds> f[x]: судя по всему, если не postgresql, то что-то из этого:
Effective set of compiler predicates: pkg_unix,pkg_threads.posix,pkg_threads,pkg_bigarray,pkg_postgresql,pkg_lwt,pkg_lwt.unix,pkg_camlp4,pkg_pcre,pkg_netsys,pkg_netstring,pkg_json-wheel,pkg_json-static,autolink,mt,mt_posix,native
[15:19:59] <gds> f[x]: это старая мета.  благодаря моим патчам, теперь http://paste.in.ua/1884/
[15:20:10] <gds> bigarray может влияет?  хз, добавлю threads
[15:20:11] <Typhon> f[x]: да, я видел мету — я не понимаю, зачем там error(-mt) — которое ругаться должно, если multi-threading не того, и при этом нет требований threads. error(-mt) — неявно добавляет зависимости штоле?
[15:21:05] <gds> добавил ", threads", новенькое появилось:
ocamlfind: Error from package `threads': Missing -thread or -vmthread switch
[15:21:41] <f[x]> $ ocamlbuild -documentation | grep threads.cmxa
flag {. link, native, ocaml, thread, toplevel .} "threads.cmxa -thread"
flag {. link, native, ocaml, program, thread .} "threads.cmxa -thread"
[15:22:41] <f[x]> что-то я запутался
[15:23:28] <f[x]> гг, https://encrypted.google.com/search?client=opera&rls=en&q=%22both+define+a+module+named+Thread%22&sourceid=opera&num=100&ie=utf-8&oe=utf-8
[15:26:07] <gds> ну, тогда я начал ковырять.  даже нарисовал патчик.  потом забил.
[15:27:15] <gds> вероятно, кстати, патчик таки применён тут.  но какая разница, по сути..
[15:27:49] <gds> f[x]: кстати, вот в myocamlbuild.ml нашлось: http://paste.in.ua/1881/
[15:29:57] <f[x]> а, ну вот, т.е. thread убирай из _tags и добавляй pkg_threads
[15:34:18] <gds> П-Ц.  помогло.
[15:34:58] <gds> благодарю за разборки с моими проблемами, порицаю отсутствие документации в myocamlbuild.ml.
[15:39:43] <gds> Typhon: кстати, вот мои res.ml{i,}: http://paste.in.ua/1885/
[15:40:18] <Typhon> может стоит оформить вику?
[15:46:34] <gds> http://gdsfh.dyndns.org/kamlo/Res
[15:50:45] <Typhon> здорово :-) спасибо
[17:32:32] gds вышел(а) из комнаты
[17:42:12] komar вышел(а) из комнаты
[19:04:51] superbobry вышел(а) из комнаты
[19:04:54] superbobry вошёл(а) в комнату
[19:07:48] Kakadu вышел(а) из комнаты
[19:23:48] Typhon вышел(а) из комнаты
[19:31:00] komar вошёл(а) в комнату
[19:44:16] ftrvxmtrx вышел(а) из комнаты
[19:44:33] ftrvxmtrx вошёл(а) в комнату
[19:51:57] ftrvxmtrx вышел(а) из комнаты
[20:09:12] superbobry вышел(а) из комнаты
[20:11:45] Kakadu вошёл(а) в комнату
[20:21:06] gds вошёл(а) в комнату
[20:33:19] komar вышел(а) из комнаты: Replaced by new connection
[20:33:20] komar вошёл(а) в комнату
[20:44:49] <gds> они его едят.  http://community.livejournal.com/ru_lambda/126270.html?mode=reply
[20:48:28] <zert> ихь шпрехе руссиш унд окамле кен ай чекаут дизе конференце?
[21:00:28] <gds> zert: йоу, чигиряут!
[21:13:59] zert вышел(а) из комнаты
[21:17:46] ftrvxmtrx вошёл(а) в комнату
[21:23:36] zert вошёл(а) в комнату
[21:33:06] <gds> меркуриаловские бранчи -- только недавно понадобились (если точнее, то "уже вчера"), вот фтыкаю.  http://pqr7.wordpress.com/2010/10/10/a-guide-to-branching-in-mercurial/ .  По-русски, грамотно.  Чего, интересно, в меркуриале нет по сравнению с гитом?  (если единственный ответ -- "линуса", то это даже хорошо.)
[22:09:44] zert вышел(а) из комнаты
[22:13:39] Kakadu вышел(а) из комнаты
[22:17:03] zert вошёл(а) в комнату
[22:19:06] Kakadu вошёл(а) в комнату
[22:29:39] komar вышел(а) из комнаты
[22:29:45] komar вошёл(а) в комнату
[22:52:17] <ftrvxmtrx> rebase'a нету нормального
[22:55:30] <gds> чем имеющийся не нравится?
[22:55:53] <ftrvxmtrx> а я уже и не помню :)
[22:56:25] <gds> было время, когда его вообще не было, вот это я точно помню.
[23:38:40] ygrek вошёл(а) в комнату
[23:38:54] ygrek вышел(а) из комнаты
[23:39:12] ygrek вошёл(а) в комнату
[23:39:26] ygrek вышел(а) из комнаты
[23:39:45] ygrek вошёл(а) в комнату
[23:39:59] ygrek вышел(а) из комнаты
[23:40:13] ygrek вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!