Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 16 июня 2010< ^ >
ygrek установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | judge by commits, not comments | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:04:21] digital_curse вошёл(а) в комнату
[00:43:15] vshender вышел(а) из комнаты
[00:45:37] vshender вошёл(а) в комнату
[00:52:30] vshender вышел(а) из комнаты
[01:08:35] ygrek вышел(а) из комнаты
[01:16:33] Kakadu вышел(а) из комнаты
[02:47:52] komar вышел(а) из комнаты
[03:26:48] Typhon вышел(а) из комнаты
[04:11:21] yoya вошёл(а) в комнату
[04:15:44] yoya вышел(а) из комнаты: QIP Infium: Спокойное общение
[08:02:51] iNode вышел(а) из комнаты
[08:15:41] gds вышел(а) из комнаты
[08:22:25] iNode вошёл(а) в комнату
[08:59:49] gds вошёл(а) в комнату
[09:24:04] Kakadu вошёл(а) в комнату
[09:40:24] Typhon вошёл(а) в комнату
[09:40:46] Mon вышел(а) из комнаты
[09:41:13] Mon вошёл(а) в комнату
[09:48:49] ygrek вошёл(а) в комнату
[09:53:28] Mon вышел(а) из комнаты
[09:53:41] Mon вошёл(а) в комнату
[10:00:54] Mon вышел(а) из комнаты: Replaced by new connection
[10:00:55] Mon вошёл(а) в комнату
[10:33:33] ʇsʎɯ вошёл(а) в комнату
[11:11:15] ermine вошёл(а) в комнату
[11:14:41] ygrek вышел(а) из комнаты
[11:31:10] serp256 вошёл(а) в комнату
[11:59:15] komar вошёл(а) в комнату
[12:02:27] ygrek вошёл(а) в комнату
[12:21:55] komar вышел(а) из комнаты
[12:29:39] digital_curse вышел(а) из комнаты
[13:04:49] ygrek вышел(а) из комнаты
[13:51:16] komar вошёл(а) в комнату
[14:35:59] gds вышел(а) из комнаты
[14:47:24] gds вошёл(а) в комнату
[15:30:23] <gds> чем больше я смотрю на ocamldbi, тем более конченным он мне кажется.
postcommit/prerollback -- уже рассказывал.  fetch1int, fetch1bool -- это же фимоз головного мозга, выносить такое в dbi -- в интерфейс!  (это же каждый драйвер обязан будет такое поддерживать!)
prepare_cached -- нафига, если есть prepare + какая-нибудь hashtbl, и это никак не специфично для субд.
это я только половину асилил пока.
[15:33:10] <gds> а, ещё забыл про создание соединения, в котором host/port/user/pass передаются как аргументы конструктора класса, забывая про другие способы аутентификации (но это есть в ocamldbi/TODO, гердушко прав тут).
[15:39:44] ygrek вошёл(а) в комнату
[15:43:16] <gds> с другой стороны, у соседей вообще зоопарк, который начинается с типа SqlValue: http://hackage.haskell.org/packages/archive/HDBC/2.2.6/doc/html/Database-HDBC.html
[15:45:26] <gds> явно нужны два интерфейса в dbi: 1. то, что dbi даёт наружу, пользователю, 2. то, что требуется от "драйвера базы данных" для реализации п.1 (сильно меньше, если интерфейс из п.1 неортогонален, но удобен).
[15:45:28] <Typhon> под х-ль, емнип, нету хорошего модуля для бд (по крайней мере того, который с pg работать умеет), я искал как-то. sqlvalue выбесил тоже :)
[15:46:03] <f[x]> gds: угу, хфунктор
[15:46:39] <f[x]> ты ещё предусмотри async интерфейс для полного счастья
[15:47:43] <gds> f[x]: ты про два разных интерфейса?  да, можно и функтором.  но там объекты уже, а неизвестно, когда/как будет 3.12 с его модулями.
[15:48:22] <f[x]> бета будет в следующем месяце по слухам
[15:50:26] <gds> Typhon: советуют http://hackage.haskell.org/package/Takusen (см. список авторов, кстати), там и pg есть.
[15:50:49] <ʇsʎɯ> или как в питоне - модули разные, но api у всех одинаковый
[15:51:18] <ʇsʎɯ> хош - open DBI.PgSQL, хош - open DBI.MySQL
[15:51:32] <Typhon> Author    Alistair Bayley, Oleg Kiselyov !1! опять он!
[15:52:48] <f[x]> так это же оттуда и универсальный итератор
[15:52:57] <gds> myst: да, вариант, но интерфейса должно быть два.
[15:53:13] <gds> по-любому два.  А как именно -- хоть и в виде класса -- пофиг.
[16:17:27] <ʇsʎɯ> почему два?
[16:22:45] <gds> потому что драйверу не нужно реализовывать функции наподобие fetch1int, если есть функция получения строки.
[16:23:07] <gds> если он будет реализовывать, это будет дублирование кода.
[16:24:00] <komar> Тут никого из пишуших на окамле в Жуковском нету?
[16:24:06] <komar> А то они мне позвонили и у них сразу деньги кончились.
[16:24:08] <ʇsʎɯ> а какие ещё драйвера, когда как в питоне? модуль и есть драйвер
[16:25:01] <ʇsʎɯ> если делать с драйверами, то надо как в perl dbi уже, чтобы сигнатуру в строке поменял и вуаля
[16:43:23] <gds> я не совсем правильно гнал (не на то).  Пусть dbi предоставляет "богатый" интерфейс, но пусть от драйверов требует мало, только нужное.  Сейчас, в текущем виде, классы statement и connection в ocamldbi не указывают, что они требуют от драйвера, а что предоставляют (пометки "virtual" у методов -- мало).
Подход питона -- фактически, DBI.PgSQL и есть драйвер, а если есть общие функции, они реализованы либо в отдельном модуле (если проводить параллели с ocamldbi -- в dbi.ml), либо в "драйвере", копипастой.
[16:44:40] <gds> а даже если появятся модули-как-значения, будет ли для данной задачи профит от них?  Имхо -- нет.
[16:46:59] <ʇsʎɯ> там каждый модуль независимый
[16:47:03] <ʇsʎɯ> общего кода у них нет
[16:47:20] <gds> тогда копипаста.
[16:47:24] <ʇsʎɯ> я не уверен, что там большая избыточность, взять тот же psycopg2 можно и посмотреть
[16:47:39] <gds> тогда "бедный" интерфейс.
[16:47:59] <ʇsʎɯ> а зачем "богатый"?
[16:48:05] <ʇsʎɯ> больше кода - больше багов
[16:48:27] <ʇsʎɯ> как бы необходимого не так много, а с плюшками на всех не угадаешь
[16:49:33] <gds> если плюшки реализуются поверх общего интерфейса, всё нормально.
[17:01:47] ygrek вышел(а) из комнаты
[17:08:08] iNode вышел(а) из комнаты
[17:10:09] <gds> почитал чуть более тщательно про iteratee.  Те же окамловские Stream, только без парсеров, и на низком уровне (конструкторы IE_*) состояние таскают явно, а не прячут в closures, как было бы в случае Stream.from (let state = ref .. in fun _ -> ..).  Или что-то упустил?
[17:10:09] ʇsʎɯ вышел(а) из комнаты
[17:10:23] <gds> 3.12.0+beta1!11111
[17:16:26] <f[x]> не императивные
[17:18:54] serp256 вышел(а) из комнаты
[17:27:17] Kakadu вышел(а) из комнаты
[17:32:13] gds вышел(а) из комнаты
[18:00:14] <f[x]> | t = TRY [t = ctyp LEVEL "star"; "->" -> t]; ct = SELF ->
[18:00:27] <f[x]> это что, бэктрекинг в camlp4?
[18:05:34] gds вошёл(а) в комнату
[18:07:45] ʇsʎɯ вошёл(а) в комнату
[18:09:40] <f[x]> таки да, используя Stream.dup с O(n^2)
[18:15:43] <gds> какой такой Stream.dup?  в новой stdlib не вижу.
[18:15:44] ʇsʎɯ вышел(а) из комнаты
[18:16:57] <f[x]> а это у camlp4 в нутрях свой stream
[18:17:12] <gds> чтоб никто не догадался!
[18:17:17] <f[x]> ну там пара функций
[18:19:02] ʇsʎɯ вошёл(а) в комнату
[18:20:22] <ʇsʎɯ> нам дали хистори
[18:22:34] Typhon вышел(а) из комнаты
[18:27:44] <gds> посмотрел внутренний Stream.  Какая-то печаль охватила меня.  Подскажите пожалуйста, _как_ это работает?  http://pastebin.com/KsysEtf7  Конечно же, в предположении, что мы делаем Stream.junk на исходном потоке.
[18:29:00] <f[x]> ну дык, предположение неверное
[18:29:19] <f[x]> исходный трогать низя, главное что трогание копии не портит исходный
[18:30:40] <f[x]> но квадратичное время плюс память удручают
[18:32:16] <gds> ну тогда да, единственое возможное решение -- так, как у них.
Наверное, там мало токенов будет.  Надеемся.
А я реализовал (почти, так как целиком не нужно было) такой dup, который, как ни трогай, ничего не испортишь.  Конечно, средствами Obj плюс подглядыванием в боторейки.
[18:35:46] <f[x]> покажи? с кэшированием общей части?
[18:40:42] <gds> то, что с батареек -- http://github.com/thelema/batteries-included/blob/master/src/batStream.ml -- недеструктивная функция dup : t -> (t * t)  (внутри -- две очереди с прочитанными элементами).
то, что моё -- http://pastebin.com/WaHqDFsG -- там я просто разворачиваю stream на один элемент, и возвращаю такой результирующий поток, который будет физически равен результату Stream.junk исходного потока.
при желании можно объединить (dup + stream_assign_data), но мне нужно было только развернуть поток.
[18:51:21] serp256 вошёл(а) в комнату
[18:58:48] Kakadu вошёл(а) в комнату
[19:01:03] serp256 вышел(а) из комнаты
[19:06:25] <gds> прикольно -- в 3.12 положили старый boot/ocamlc, из чего имеем
../boot/ocamlrun ../boot/ocamlc -strict-sequence -g -warn-error A -nostdlib `./Compflags pervasives.cmi` -c pervasives.mli
../boot/ocamlc: unknown option `-strict-sequence'.
умнички.
[19:16:53] iNode вошёл(а) в комнату
[19:19:08] ʇsʎɯ вышел(а) из комнаты
[19:21:13] <f[x]> ыыы
[19:25:49] serp256 вошёл(а) в комнату
[19:29:43] <gds> хаха, в typing/typecore.ml:
            Ppat_construct
              (Longident.(Ldot (Lident "*predef*", "Some")),
               Some {ppat_loc = default_loc; ppat_desc = Ppat_var "*sth*"},
-- синтаксис Module.(expr), тоже новый.
пишу в мантис :)
[19:29:43] Kakadu вышел(а) из комнаты
[19:37:08] <gds> http://caml.inria.fr/mantis/view.php?id=5076
[19:40:57] <gds> вот чорт.
[19:41:33] <gds> криво чото сделал, boot/ocamlc не обновился.
[19:42:02] Typhon вошёл(а) в комнату
[19:45:04] <gds> а во всём виноват mq.
[19:45:35] <gds> потому что
diff -r 39a880e2984e src/ocaml/orig/boot/ocamlc
Binary file src/ocaml/orig/boot/ocamlc has changed
-- это недостаточно хороший дифф, чтобы обновить двоичный файл.
[19:46:17] <f[x]> гг, из tar.gz собирать надо, а все эти новомодные питоньи штучки выкинуть
[19:47:13] <gds> это diff виноват.  которым я хотел перекинуть содержимое тарболла с одной машины на другую.
[19:49:18] <f[x]> diff | nc | patch да? типа крутой?
[19:50:14] <gds> примерно да.  hg qnew, hg qref, hg commit --mq, hg push --mq, ну и подобная штука на принимающей машине.
[19:51:30] <f[x]> вижу питон - вижу fail
[19:58:04] komar вышел(а) из комнаты
[20:13:17] serp256 вышел(а) из комнаты
[20:59:45] komar вошёл(а) в комнату
[21:18:05] Typhon вышел(а) из комнаты: Replaced by new connection
[21:18:17] Typhon вошёл(а) в комнату
[22:04:43] Kakadu вошёл(а) в комнату
[22:04:46] Typhon вышел(а) из комнаты
[22:04:55] Kakadu вышел(а) из комнаты
[22:05:38] Typhon вошёл(а) в комнату
[22:40:48] Kakadu вошёл(а) в комнату
[23:37:46] komar вышел(а) из комнаты
[23:45:35] komar вошёл(а) в комнату
[23:48:26] komar вышел(а) из комнаты
[23:57:04] Kakadu вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!