Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 2 февраля 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:15:32] serp256 вошёл(а) в комнату
[00:57:22] Typhon вышел(а) из комнаты
[00:58:46] Typhon вошёл(а) в комнату
[00:59:34] Typhon вышел(а) из комнаты
[01:00:23] ygrek вышел(а) из комнаты
[01:00:33] Typhon вошёл(а) в комнату
[01:08:25] zert вышел(а) из комнаты
[01:13:18] ermine вышел(а) из комнаты
[01:23:37] serp256 вышел(а) из комнаты
[02:46:58] Typhon вышел(а) из комнаты
[08:08:15] iNode вышел(а) из комнаты: Replaced by new connection
[08:08:16] iNode вошёл(а) в комнату
[09:03:42] gds вошёл(а) в комнату
[09:59:27] Sergey Plaksin вошёл(а) в комнату
[10:17:13] ygrek вошёл(а) в комнату
[10:41:23] ermine вошёл(а) в комнату
[11:28:33] ygrek вышел(а) из комнаты: Replaced by new connection
[11:28:34] ygrek вошёл(а) в комнату
[12:00:37] Typhon вошёл(а) в комнату
[12:28:54] ygrek вышел(а) из комнаты
[12:42:08] Kakadu вошёл(а) в комнату
[12:42:32] Kakadu вышел(а) из комнаты
[12:43:13] Kakadu вошёл(а) в комнату
[13:07:43] Kakadu вышел(а) из комнаты
[13:07:59] Kakadu вошёл(а) в комнату
[13:29:59] zert вошёл(а) в комнату
[15:13:14] <gds> а подскажите, какой бы апи сдизайнить, если на входе -- поток байтов (Stream.t для определённости), представляющих собой концептуально что-то наподобие архива (файлы, лёгкая метаинформация, содержимое по частям), так, чтобы со всем этим можно было бы работать относительно потоко-ориентировано?  Какие-то извращённые вещи возникают в мозгу, относительно сложные (следовательно, скорее всего ненужные).
[15:14:41] <f[x]> extlib.IO
[15:16:49] <gds> а куда там его применить?  Не понимаю.
[15:18:00] <gds> дело в том, что имею поток и имею определённые правила его обработки, но поток состоит из файлов, файлы из кусков, куски из строк.
[15:18:55] <gds> можно, конечно, сделать что-то типа того же Stream, в котором последовательные элементы будут значить "файл xxx начался", "кусок yyy-zzz начался", "данные -- строка '...'".
[15:22:24] <f[x]> а, высокоуровневое api
[15:34:35] <gds> фактически, это дело можно представить взаимно-зависимыми типами, наподобие
type stream = list file and file = (name * metainfo * contents) and contents = list chunk and chunk = list (ofs * string)
поверх этого типа написать мега-фолд, а потом представить, что значение этого типа не в памяти, а в потоке, и всё это выполнить.  Но это ведь извращение.
[15:43:52] <f[x]> кто хочет - fold, а кто хочет - сделает ref и будет step'ать
[15:45:12] <gds> недопонял про ref, можешь уточнить?
[15:47:30] <f[x]> ну я про то что ко всем stream'ам есть два интерфейса, по вкусу - либо run query (fun row -> ...) либо let cursor = start query in while true do let row = cursor.step in ... done
[15:47:37] komar вошёл(а) в комнату
[15:48:02] <f[x]> т.е. fold и stream
[15:48:22] <f[x]> и одно через другое выражается, не так ли?
[15:54:48] <gds> так-то оно так, но есть проблемка.  Допустим, будет stream, возвращающий file (какой-то абстрактный тип), и будет функция, разбирающая данный file.  Это значение сохраняют, достают следующий файл, потом пытаются разобрать сохранённый, и имеют либо облом (ибо поток ушёл), либо запоминание потенциально немаленького файла где-либо в памяти, на диске, пофиг, всё равно печально.
[15:55:46] <f[x]> доставание следующего файла разрушает предыдущий так что доступ к устаревшему хэндлу вызывает raise Invalid_user
[15:56:12] <f[x]> то бишь linear типов у нас всё равно нет
[15:56:14] <gds> а чё, вариант.  replace user and press any key.
[15:56:24] <f[x]> угу :)
[16:08:02] <gds> эх.  Теперь ещё хранить для каждого вложенного ресурса (в данном случае для файла, например) информацию о том, не ушёл ли "глобальный поток" куда-нибудь дальше (например, вызовом, возвращающим следующий файл -- по идее, если хендл сохранили, он должен стать инвалидным, каким-то образом).
[16:09:57] <f[x]> в гллобальном потоке есть офсет, у файла есть его range, если во время доступа к файлу офсет потока вне диапазона - kaboom
[16:13:39] ftrvxmtrx вошёл(а) в комнату
[16:20:16] <gds> наверное я туплю.  Вот у меня есть поток строк, в котором есть начало файла, начало куска файла, и так далее.  Как/где можно хранить оффсет в глобальном потоке?
Допустим, код:
let stream_of_lines = < внешний поток из простых строчек в нужном формате > in
let stream_of_files = files_of_lines stream_of_lines in
Stream.iter
  (fun file ->
    if файл интересен
    then Stream.iter (fun chunk ->
       if чанк интересен
       then Stream.iter (fun line -> обработать строку) (lines_of_chunk chunk)
       else ()
       ) (chunks_of_file file)
    else ()
  )
  stream_of_files
имхо как-то не очень вписывается.
[16:24:49] <f[x]> ну либо как-то по другому убедиться что текущий стрим соответствует текущему файлу
[16:24:56] <f[x]> Stream.count не?
[16:32:29] <gds> Stream.count -- идея.  Но не знаю вот, сложно это.  Видимо, буду тупо делать пока что: Stream.t исходная_строка -> Stream.t (токен_потока * исходная_строка), ибо если для написания тупого кода требуется долго-долго думать, тут что-то неправильно.
[16:33:19] <f[x]> make it run, ага
[16:58:22] <gds> кстати, кто хочет 10..15$ за разовое дело?  Манатку написать несложную, что-то наподобие "грубая транзакционная целостность файлов".  У меня сейчас в моск всё не вмещается, а хочется эту функциональность получить.  Релиз под gpl, если вдруг кажется, что бобла маловато.
[17:00:42] f[x] писать чего хватает, но что такое транзакционная целостность файлов?
[17:01:29] <Typhon> может, что-то типа олеговской zipper-fs ?
[17:01:56] <Typhon> http://okmij.org/ftp/continuations/index.html#zipper-fs
[17:03:25] <gds> у меня проще.  И, конечно, криво выразился.  Например, открываем типа-транзакцию, в пределах которой есть операции создания файла.  При ошибке, если не словили, этот файл нужно удалить.  Или, например, командуем "удалить файл", но файл не удаляем, а переименовываем, чтобы при ошибке переименовать взад, а при успехе удалить переименованное.  Такие вот простые вещи.  Грубо -- потому что ниже уровня "работы с directory entries" не нужно.  (может разве что потом, если захочется парочку open(O_APPEND) + truncate для отката.)
[17:06:02] <gds> Typhon: разбирался с этой штукой, хотя бы в теории?  Не очень хорошо, что delimited continuations, не везде есть, вроде бы, да и боюсь я их...
[17:07:44] <Typhon> папиру только прочёл, но ничего определённого уже не помню, кроме того, что автор связь между zipper'ом и продолжением обозначил :(
[17:13:00] <gds> ага, я тоже примерно так прочитал :)
[17:31:13] gds вышел(а) из комнаты
[17:59:04] iNode вышел(а) из комнаты
[18:16:40] ftrvxmtrx вышел(а) из комнаты
[18:25:31] ftrvxmtrx вошёл(а) в комнату
[18:43:12] Kakadu вышел(а) из комнаты
[19:18:36] komar вышел(а) из комнаты: Logged out
[19:18:42] komar вошёл(а) в комнату
[19:18:45] Typhon вышел(а) из комнаты
[19:21:26] Typhon вошёл(а) в комнату
[19:37:49] Sergey Plaksin вышел(а) из комнаты
[19:43:49] gds вошёл(а) в комнату
[19:58:42] iNode вошёл(а) в комнату
[21:03:43] Typhon вышел(а) из комнаты
[21:05:19] <f[x]> хм, camomile под cygwin не собирается, чяднт?
[21:07:48] <f[x]> точнее под ocaml/mingw под cygwin'ом
[21:19:24] <gds> f[x]: мои патчи погляди, если чо.  sf.net/projects/overbld/....
[21:45:14] <ermine> ты gettext таки решил поюзать?
[21:46:25] ermine чуток поглядела на ocamerl - камлевая нода ырланка
[21:46:36] <ermine> не компилится и дохлое три года как
[22:02:23] <zert> это которое лев валкин делал?
[22:02:40] <zert> он вроде год-полтора назад анонсировал
[22:07:59] <ermine> три года назад?
[22:08:30] <ermine> ну значит не он
[22:16:47] <zert> https://github.com/EchoTeam/ocaml-erlang-port
[22:16:50] <zert> не, это порт, не нода
[22:19:17] Kakadu вошёл(а) в комнату
[22:19:46] <ermine> а я хочу ноду :)
[22:25:28] <zert> я как-то пытался через swig замутить, но забил
[22:26:06] <ermine> а чо так?
[22:53:54] Typhon вошёл(а) в комнату
[23:02:19] myxomop87 вошёл(а) в комнату
[23:03:15] myxomop87 вышел(а) из комнаты
[23:08:50] ygrek вошёл(а) в комнату
[23:09:05] ygrek вышел(а) из комнаты
[23:09:05] f[x] вышел(а) из комнаты
[23:10:14] ygrek вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!