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

GMT+4
[00:18:26] sceptic вышел(а) из комнаты
[00:18:34] sceptic вошёл(а) в комнату
[00:24:05] komar вышел(а) из комнаты
[00:24:13] komar вошёл(а) в комнату
[00:28:14] sceptic вышел(а) из комнаты
[00:32:35] ermine вышел(а) из комнаты
[00:48:52] Typhon вошёл(а) в комнату
[00:54:33] <ygrek> btw желающим эпично зафейлить icfpc (18 июня) предлагаю начинать координироваться
[00:59:41] <Typhon> эх, у меня др 17го, интересно как пройдет :)
[01:03:54] <ygrek> %)
[01:24:24] komar вышел(а) из комнаты
[01:24:41] komar вошёл(а) в комнату
[01:24:51] komar вышел(а) из комнаты
[01:27:34] komar вошёл(а) в комнату
[01:38:59] ygrek вышел(а) из комнаты
[02:05:25] nortel вошёл(а) в комнату
[02:09:05] nortel вышел(а) из комнаты
[02:50:49] komar вышел(а) из комнаты
[03:09:13] Typhon вышел(а) из комнаты
[07:49:36] iNode вышел(а) из комнаты
[08:15:25] iNode вошёл(а) в комнату
[08:58:31] gds вошёл(а) в комнату
[09:37:34] ermine вошёл(а) в комнату
[10:15:41] serp256 вошёл(а) в комнату
[10:20:44] komar вошёл(а) в комнату
[10:20:50] komar вышел(а) из комнаты
[10:21:30] komar вошёл(а) в комнату
[10:42:31] ygrek вошёл(а) в комнату
[10:53:37] ʇsʎɯ вошёл(а) в комнату
[10:55:59] <gds> искал одно, нашёл другое: http://alain.frisch.fr/soft#recursive : "Recursive: manipulating recursive values with maximal sharing and unique representation" (README на сайте не публикуют, скопипастил сюда: http://pastebin.com/4SUt3YwS )
Не до конца разобрался, да и не нужно пока, но идея хорошая.
[11:08:40] ygrek вышел(а) из комнаты: Replaced by new connection
[11:08:41] ygrek вошёл(а) в комнату
[11:09:07] sceptic вошёл(а) в комнату
[11:48:32] <gds> ну чё, кто будет фейлить на окамле 18 июня?  думаю поучаствовать, но ни в коем случае не на "руководящих" ролях (ибо просто фейлить и эпик фейлить -- разные вещи, нужно первое), и с минимальными гарантиями с моей стороны (ибо реаллайф сцуко непредсказуем в последнее время; однако, выправляется потихоньку).
[11:49:57] <serp256> что это значит, фейлить?
[11:51:31] <gds> проигрывать, сливать, обламываться.
[11:55:25] <f[x]> cf. fail
[12:02:12] <ʇsʎɯ> прозреваю эпичный фэйл
[12:02:21] <ʇsʎɯ> я никак не могу, 18 мая выходит Tyrannis
[12:04:07] <gds> на целый месяц завлечёт?
[12:18:29] Typhon вошёл(а) в комнату
[12:19:29] <ʇsʎɯ> а то и на год
[12:19:47] <ʇsʎɯ> да и кроме всего прочего я нубас в OCaml
[12:20:07] <ʇsʎɯ> хотя по приколу можно, конечно, заявиться, но блин...
[12:20:49] <Typhon> вот я б тоже попробовал :)
[12:21:31] <Typhon> не в ив онлайн, а в icfp зафейлить
[12:24:52] <ʇsʎɯ> чё-то я очкую
[12:25:01] <ʇsʎɯ> а какого рода там задачи?
[12:25:47] <Typhon> http://sorhed.livejournal.com/534026.html  -- тут ссылки на отчеты и задания есть
[12:28:26] <ʇsʎɯ> посмотрел, вроде интересные задания
[12:28:32] <ʇsʎɯ> не дрочерские
[12:28:59] <ʇsʎɯ> надо попробовать надрать хаскелитов ))
[12:33:38] komar посмотрел и спрятался.
[12:34:26] <gds> шоке шоке, темерев занялся функциональщиной.  Куда катиццо.
[12:35:13] <gds> ну давайте все по приколу зафейлим, куле тут сложного.
[12:37:48] <Typhon> а чем знаменит темерев, и я так понял там скала всякая :)
[12:48:50] <gds> темерева знаю по пидошке, по кащенке всякой, потом занимался финансовыми делами (биржи, всё такое).  Удивительная эволюция :)  Но это даже к лучшему.
[12:57:01] <komar> Кто все эти люди?
[14:42:31] Mon вышел(а) из комнаты
[15:01:55] Mon вошёл(а) в комнату
[15:33:54] olegfink вошёл(а) в комнату
[15:34:02] olegfink вышел(а) из комнаты
[15:34:02] olegfink вошёл(а) в комнату
[16:16:40] ygrek вышел(а) из комнаты
[17:29:31] iNode вышел(а) из комнаты
[17:30:20] gds вышел(а) из комнаты
[17:43:38] ygrek вошёл(а) в комнату
[18:06:59] gds вошёл(а) в комнату
[18:16:36] ygrek вышел(а) из комнаты
[19:22:24] serp256 вышел(а) из комнаты
[19:23:33] sceptic вышел(а) из комнаты
[19:34:05] ʇsʎɯ вышел(а) из комнаты
[20:35:01] Kakadu вошёл(а) в комнату
[20:37:56] <Kakadu> черт, а почему они всё это в июне устраивают...
[20:45:56] <ermine> как типизировать камло из цэ?
[20:46:42] <ermine> а еще есть идиотский вопрос - как в цэ узнать сигнатуру камлевой функции?
[20:59:05] <gds> ermine: просто по указателю на неё -- сходу никак.  Однако возможны разной степени трюки для достижения результата.
[21:01:38] <ermine> трюки - это плохо, они вселяют в душу неуверенность
[21:06:22] Typhon вышел(а) из комнаты
[21:10:11] <ermine> я тут страдаю трюками с биндингом к berkeley db, там в качестве key/value в основном достаточно маршалированной строки из камля, но иногда надо иметь не маршалированную строку данных, а нормальный int для key, перебрала разные трюки, щас играю в типизацию самой базы данных
[21:10:27] <ermine> чтобы на стороне цэ видеть какой нужен тип
[21:11:16] <ermine> но такой тип виден когда явно задаешь типизацию например val get : db -> int -> string
[21:11:46] <ermine> в данном случае это val get 'a db -> 'a -> string
[21:12:05] <ermine> ой двоеточие забыла
[21:15:00] <ermine> тут хочется сразу типизиновать нормально 'a db, чтобы оно не было слишком полиморфшным
[21:15:42] <gds> а как типизировать 'a db?  не понимаю логики функции get, поясни слегка.
ща опишу решение, которое вижу сходу.
[21:17:50] <ermine> на стороне цэ - смотреть на то, какой тип у базы
[21:18:11] <ermine> есть ситуации, когда четко видно, что key должен быть только int
[21:18:12] <gds> после компиляции программы типы уже не поменять.
[21:18:54] <ermine> ых!
[21:20:21] <gds> условный пример:
type getter = Get_int of int gengetter | Get_string of string gengetter
and 'a gengetter = db -> 'a -> string
let my_get = Get_int (fun db int_param -> funcbody)
далее на сишной стороне смотрим, какой тег у значения my_get, от него зависит тип, а указатель на closure будет лежать в этом же значении.
Тупо, но рабоче.
[21:20:42] <ermine> а как можно типизировать так, чтобы:
let create_db typ = match typ with 1 -> int db | 2 -> string db
?
[21:20:58] <gds> нельзя.
[21:22:13] <gds> либо тип известен на этапе компиляции, либо диспетчится в рантайме.  Кстати, последнее -- не так уж и плохо.
[21:22:47] <gds> цель какая -- завалить выполнение, если программа рассчитана на int, а в базе подают string?
[21:24:13] <ermine> не
[21:24:27] <ermine> из string на стороне камля трудно сделать int
[21:24:32] <ermine> тьфу
[21:24:36] <ermine> на стороне цэ
[21:25:38] <ermine> т.е. в функции val put : 'a db -> 'a -> string -> unit надо на стороне биндинга не ошибиться с типом и сделать Long_val, а не String_val
[21:26:24] <gds> тип значения (которое в БД пихать) в сигнатуре put -- 'a?
[21:26:28] <ermine> поскольку в камле испорченные инты, то втупую на все маршалировать не получится, наверное
[21:27:33] <ermine> да, 'a - тип ключа, для data я обхожусь полной маршалиной
[21:27:57] <ermine> я бы обрадовалась, если и для key можно обойтись маршалингом :)
[21:28:23] <ermine> но такое только для hash или btree баз проходит, а для recno нужен инт
[21:28:47] <gds> конкретно для put -- на сишной стороне вполне можно отличить строку от int, int32 и int64.  Для get сложнее, ибо, если в БД ключи строковые, а берём по интам, то возьмём не то.
[21:28:52] <ermine> сначала я гадала, как из маршалированной строки сделать инт, так и не угадала
[21:29:44] <ermine> да, на стороне цэ хорошо видны типы данных (но видимо не сигнатуры функций)
[21:30:12] <ermine> поэтому вот играю с 'a db
[21:30:53] <ermine> чтобы камло само типизировало, а на стороне цэ видеть инте это или строка
[21:31:21] <gds> опиши предполагаемое поведение в случае, когда в базе строковой ключ, а пытаются использовать get с интом?  Ошибка типизации использования функции put?
[21:31:31] <ermine> в родном berkeley db такого понятия нет
[21:32:33] <gds> ну ты-то не родную беркли-дб окамловскую библиотеку разрабатываешь.
[21:33:16] <ermine> gds: надо смотреть на тип базы, это hash, btree, recno или queue, для первых двух типов key - это строка с оговоркой для hash, когда согласно флагам создания базы, key все-таки может быть интом :-) для двух последних типов баз key всегда int
[21:33:49] <ermine> насчет "всегда" - ну, я еще не видела другого use case пока
[21:35:18] <ermine> до типизации db я пыталась поиграться со строктурой DBT, которая служит для создания key/data, но там встал не менее инетересный вопрос - как в маллок-память засунуть инт
[21:35:45] <ermine> да и трюк показался менее интересным, чем типизация по базе
[21:40:03] <ermine> в dbm было хорошо - там о таких вещах голова не болит
[21:41:35] <gds> могу только посоветовать, ну и попробовать ответить на конкретный вопрос.
обычно софтина знает, какого типа ключ у неё в таблицах.  Поэтому для открытия бд вывести две функции: open_db_int и open_db_string, возвращающие, соответственно, int db и string db.
Опционально, если хочется, open_db_untyped : ... -> db_untyped и отдельно type key_type = Int | String ; val get_db_key_type : db_untyped -> key_type ; val destruct_and_convert_to_int : db_untyped -> int db ; val destruct_and_convert_to_string : db_untyped -> string db  (последние две -- с динамической проверкой типов и разрушением значения так, чтобы потом нельзя было другую функцию вызвать, с другим типом ключа).  Но open_db_untyped и всё, что ниже, -- это извращение, ибо проще надо быть.
[21:45:26] <ermine> улучшенным вариантом open_db_* являются модули Hash, Queue, etc
[21:45:52] <ermine> пока не загорелась этой идей, но уже думала
[21:46:52] <ermine> у меня две тыщи строк кода на стороне цэ
[22:15:29] ygrek вошёл(а) в комнату
[22:15:42] <gds> кстати, подумалось, можно сделать одноразовые (либо явно разрушаемые) значения, чтобы их "защита" не боролась через присвоение или Obj, чтобы они не сериализовались (либо с ограничениями).  То есть, забороть в рантайме то, о чём ноют те, кому наличие сайд-эффектов мешает танцевать.  (реализовать на сишной стороне.)  Вроде бы вполне реально.  (просто нафиг не надо)
[22:29:50] <ermine> мне как раз саид-эффект нужен был для типизации, например тот put выше неправильно показан на самом деле
[22:30:39] <ermine> еще выше я упоминала про DBT, я пыталась с этой структурой играть потому что bdb "возвращает" результаты в аргументах же функции put(db, &key, &data, flags)
[22:31:39] <ermine> поэтому я хотела извлекать результаты не из put : db -> key -> data -> (key, data), а просто на месте, как это делается со строкой в функции Unix.read
[22:32:17] <ermine> но там встал вопрос - а какого типа данные в DBT? как на стороне камля извлекать инт из непонятно чего
[22:32:33] <ermine> это про саид эффекты
[22:32:59] <ermine> я тут попила допингу в виде бейлиза, может неясно уже выражаюсь :-)
[22:33:44] Typhon вошёл(а) в комнату
[22:33:59] <ermine> пока остановилась на val put : 'a db -> 'a -> string -> 'a, где в последнем будет содержаться номер строки для базы типа recno
[22:39:32] <ermine> маршаллинг на стороне камля - видимо, вещь неудобная, наверное надо на стороне цэ маршалировать
[22:39:53] <ermine> надо будет поискать такую функцию
[22:40:15] <ermine> caml_output_value_to_string
[22:41:22] <ermine> не
[22:41:42] <ermine> ладно
[22:41:50] <ermine> все плохо
[22:41:53] <ermine> ик
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!