Home
Objective Caml
ocaml@conference.jabber.ru
Четверг, 18 ноября 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+3
[00:04:32] serp256 вошёл(а) в комнату
[00:47:08] Kakadu вышел(а) из комнаты
[00:48:55] arhibot вышел(а) из комнаты
[01:10:38] ermine вышел(а) из комнаты
[01:12:37] serp256 вышел(а) из комнаты
[01:40:36] gds вышел(а) из комнаты
[01:50:25] komar вышел(а) из комнаты
[02:40:14] ftrvxmtrx вошёл(а) в комнату
[05:07:14] Typhon вышел(а) из комнаты
[07:38:25] iNode вошёл(а) в комнату
[09:00:28] gds вошёл(а) в комнату
[09:31:00] <gds> а вот подскажите такую штуку.  Есть структура данных, содержащая циклы.  Надо её изоморфно отобразить (map) на структуру данных с другим типом.  Решение "в лоб" -- хранить "указатели" на структуры данного типа в параметризованном виде, мутабельными, и несложными манипуляциями сначала отобразить всё на другой тип данных, затем пофиксить указатели.
Далее вариант с ленивыми значениями, но это же каждый раз надо будет их форсировать при обращении к ним, плюс непонятно что с циклами.
Явно развязывать узел через какие-то указатели -- не хочу (но может придётся).
Где-то была какая-то мелкая библиотечка для подобных штук (вроде в чятике обсуждали годы назад), но ключевых слов не помню, подскажете?
[09:36:08] <gds> да, и на hump'е не нашёл.
[09:41:18] ermine вошёл(а) в комнату
[10:10:39] serp256 вошёл(а) в комнату
[10:42:55] <gds> ага, библиотечку нашёл, http://alain.frisch.fr/soft.html#recursive , теперь попробуем обернуть вокруг неё мозг..
[11:45:36] serp256 вышел(а) из комнаты
[12:00:11] serp256 вошёл(а) в комнату
[12:10:50] Typhon вошёл(а) в комнату
[12:38:41] zert вошёл(а) в комнату
[14:07:29] ftrvxmtrx вышел(а) из комнаты
[14:08:59] f[x] вышел(а) из комнаты
[14:09:06] f[x] вошёл(а) в комнату
[14:51:43] komar вошёл(а) в комнату
[14:55:21] <gds> вдобавок, если кто не разобрался с Recursive, но хочет, вот относительно понятное объяснение: http://caml.inria.fr/pub/ml-archives/caml-list/2002/07/0b573ce0f42e95b4d4fbedbd027299d1.en.html плюс выше по треду.
[16:06:52] ftrvxmtrx вошёл(а) в комнату
[17:08:44] Kakadu вошёл(а) в комнату
[17:19:01] iNode вышел(а) из комнаты
[17:33:12] gds вышел(а) из комнаты
[17:51:35] Mon вышел(а) из комнаты
[18:01:49] rexim вошёл(а) в комнату
[18:04:08] rexim вышел(а) из комнаты
[18:09:06] gds вошёл(а) в комнату
[18:40:47] Mon вошёл(а) в комнату
[19:24:39] Typhon вышел(а) из комнаты
[19:44:05] Kakadu вышел(а) из комнаты
[19:47:23] <f[x]> что мне не нравится в lwt так это зашитый async уровень, т.е. нельзя впихнуть lwt код в свой event loop
[19:47:38] <f[x]> почему бы не выфакторизовать event loop
[19:48:08] <gds> f[x]: http://ocsigen.org/lwt/doc/api/Lwt_main.html
[19:49:18] <gds> точнее, вот это -- для того, чтобы впихнуть в свой event loop, а вот с факторизацией сложнее (например, с заменой select -> {polling,libev,...}).
[19:49:53] <serp256> gds: почему сложнее?
[19:50:35] <gds> потому что требует лезть внутрь, так как документированного апи я не видел.
[19:51:31] <komar> Ну если так, то в одном ocamlgraph все сделано как надо.
[19:51:37] <f[x]> и как это впихнуть в свой event loop?
[19:52:01] <komar> Интерфейсы с функторами со всех сторон на каждую функцию в 10 строчек.
[19:52:15] <serp256> main_loop_iteration там ref
[19:52:30] <serp256> это не то что надо?
[19:52:47] <f[x]> т.е. дергать его периодически?
[19:53:17] <f[x]> надо лезть внутрь смотреть
[19:53:43] <gds> да, с lwt многое на уровне "вроде задокументировали, в ocamldoc-generated docs вывели, а как оно работает -- хрен его знает".
[19:53:49] <serp256> подпихиваешь в main_loop_iteration - свою функцию реализующую main_loop например epoll
[19:54:05] <serp256> и фсе, насколько я понимаю
[19:55:06] <f[x]> ыы, а дескрипторы где брать?
[19:55:08] <gds> а вот неизвестно: "The function doing one step of the main loop."  -- имеется ввиду, что это функция, выполняющая шаг lwt'шного цикла или второго цикла, определённого пользователем?
[19:55:29] <f[x]> интерфейс всё равно select-ориентированный - type fd_set = Unix.file_descr list
[19:57:34] <f[x]> т.е. как себе понимаю уровень факторизации - это black box в который запихиваются пары - condition,callback
[19:58:18] <f[x]> где condition - дескриптор readable или current time is или ещё что
[19:58:43] <f[x]> black box менеджит условия как может и дёргает callback'и когда надо
[19:59:22] <serp256> ну вообщем я тоже примерно так себе понимаю :-)
[19:59:31] <f[x]> ну а тут (в Lwt_main) этого нет
[19:59:51] <f[x]> понятно что такой интерфейс не самый идеальный - но досточно широкий и всяко лучше select
[20:00:25] <f[x]> (select бяка в первую очередь из-за file_descr list)
[20:02:02] f[x] у себя такой интерфейс юзает, но пока только с одним бэкендом, надо что-ли попробовать обобщить
[20:09:53] <gds> это имплементация обёртки над Unix.select является бякой из-за file_descr list.
[20:10:43] <f[x]> в смысле да
[20:10:54] <f[x]> т.е. можно сделать свою обёртку и юзать её
[20:11:10] <f[x]> но для этого нужен общий low level async интерфейс
[20:11:38] <f[x]> (в perl по слухам есть anyevent)
[20:12:28] serp256 вышел(а) из комнаты
[20:14:38] <f[x]> gds: ты lwt пользуешь?
[20:36:25] Typhon вошёл(а) в комнату
[20:45:23] <gds> f[x]: использовал, но мало, и в том, что сейчас не "крутится" нигде.  Для каких-то игрушечных штук пробовал, но не по серьёзу.  Так как венда нужна, опять же.  А под ней оно не всегда ок (багу недавно приводил).  Но как буду что-то делать -- буду брать.
[20:54:58] Kakadu вошёл(а) в комнату
[21:05:34] <gds> но вот если бы пришлось таки писать что-то около-сетевое, то у меня не было бы вариантов -- только чпокаться с lwt.
[21:56:12] komar вышел(а) из комнаты: Logged out
[21:56:15] komar вошёл(а) в комнату
[21:56:36] komar вышел(а) из комнаты
[22:24:16] ftrvxmtrx вышел(а) из комнаты: offline
[23:03:20] komar вошёл(а) в комнату
[23:26:01] arhibot вошёл(а) в комнату
[23:32:52] serp256 вошёл(а) в комнату
[23:57:05] serp256 вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!