Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 27 августа 2012< ^ >
f[x] установил(а) тему: OCaml / ОКамл / Камль -- http://caml.inria.fr | Камло - http://camlunity.ru/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire | Мойте руки перед чатом | 4.00.0 уже таки да, см. kamlo_wiki/OCamlChanges
Конфигурация комнаты
Участники комнаты

GMT+4
[00:13:01] komar вошёл(а) в комнату
[01:20:48] knsd вошёл(а) в комнату
[01:46:14] dzhon вышел(а) из комнаты
[01:56:02] Kakadu вышел(а) из комнаты
[02:48:15] komar вышел(а) из комнаты
[03:14:08] letrec вошёл(а) в комнату
[04:23:02] letrec вышел(а) из комнаты
[09:05:21] komar вошёл(а) в комнату
[09:06:22] komar вышел(а) из комнаты
[09:28:18] dzhon вошёл(а) в комнату
[09:37:33] dzhon вышел(а) из комнаты: Replaced by new connection
[09:37:35] dzhon вошёл(а) в комнату
[09:54:00] squant вышел(а) из комнаты
[10:02:25] squant вошёл(а) в комнату
[10:02:52] squant вышел(а) из комнаты
[10:05:42] squant вошёл(а) в комнату
[10:15:50] squant вышел(а) из комнаты: offline
[10:20:17] Sun][ вошёл(а) в комнату
[10:31:57] squant вошёл(а) в комнату
[10:33:43] squant вышел(а) из комнаты
[10:46:44] squant вошёл(а) в комнату
[10:49:20] dzhon вышел(а) из комнаты: Replaced by new connection
[10:49:20] dzhon вошёл(а) в комнату
[10:59:35] squant вышел(а) из комнаты
[11:04:06] ermine вошёл(а) в комнату
[11:04:15] squant вошёл(а) в комнату
[11:08:49] <gds> ermine: с (line, col) разобралась?
[11:12:11] ftrvxmtrx вышел(а) из комнаты
[11:17:24] knsd вышел(а) из комнаты
[11:49:50] ftrvxmtrx вошёл(а) в комнату
[12:09:43] <ermine> gds: еще не имплементировала
[12:13:54] <ermine> gds: надо использовать фичу >>=, то бишь тот факт, что Stream.next strm >>= ... вызывает функцию, которая может бросать экспшны, их можно ловить и заворачивать в Located_exn (line, col, exn) и бросать дальше, щас пытаюсь понять как это сделать опциональным - то бишь как формировать цепочку стримов "по заказу"
[15:04:26] dzhon вышел(а) из комнаты: Replaced by new connection
[15:04:27] dzhon вошёл(а) в комнату
[15:55:58] letrec вошёл(а) в комнату
[17:08:36] Sun][ вышел(а) из комнаты
[17:22:32] Kakadu вошёл(а) в комнату
[17:57:56] ermine насилу имплементила (line, col) и печально смотрит на плоды труда - как, блин, теперь избавиться в монадах от спирального завихрения рекурсивных функций? в смысле, судя по отловленным экспшнам, после вызова рекурсивной функции возвращается не value, а делается еще один вызов внутри этой же функции
[17:58:06] <ermine> gds: медицина знает такие случаи в монадах?
[17:59:35] ermine вставила принтф в нужное место и убедилась в наличии спирали
[17:59:59] <ermine> ну надо чтобы let rec loop () = loop () работало в монадном мире
[18:03:38] ermine поворошила пальцами в прахе gds
[18:19:56] dzhon вышел(а) из комнаты
[18:23:49] <ermine> (подумав) спираль происходит в try with
[18:33:36] dzhon вошёл(а) в комнату
[18:35:38] <ermine> не помогла догадка
[18:52:51] dzhon вышел(а) из комнаты
[19:26:38] ftrvxmtrx вышел(а) из комнаты
[19:43:19] Sun][ вошёл(а) в комнату
[20:23:21] ludovik вошёл(а) в комнату
[20:31:32] letrec вышел(а) из комнаты
[20:44:03] dzhon вошёл(а) в комнату
[21:28:50] <gds> ermine: отходил.  Для ответа на вопрос нужно вникать в специфику (что именно там у тебя делается).  На это нет моска сейчас.  В целом, имея два выражения, которые соединяешь >>=, проанализируй (rewriting'ом), во что развернётся их соединение.  Вариантов, почему может не работать правильно, может быть много.  А может оказаться так, что семантика твоих парсеров не позволяет сделать >>= без выделения кадра на стеке.
А ещё не всегда стоит верить backtrace'ам исключений, проще ставить отладочную печать при входе в функцию.  (а при выходе вот не всегда получится.)
[21:30:35] akovbovich вышел(а) из комнаты
[21:35:40] <ermine> gds: let rec loop () = try loop () with exn -> raise exn - что будет, по-твоему?
[21:36:50] <gds> переполнение стека, очевидно.  А без try-with -- тупое зависание.  Вот потому и советую rewriting, чтобы разобраться.
[21:37:37] <ermine> а без try with как быть, если хочу переписать exn в Located_exn ((line, col), exn)
[21:37:52] <ermine> вот и застряла
[21:38:03] <gds> хреново быть, вот как быть.
[21:39:00] <ermine> вот жепа-то жепа
[21:39:34] ludovik вышел(а) из комнаты
[21:39:35] <ermine> думаю про подобие IError, IDone, но смущает факт вечного заворачивания-разворачивания
[21:41:05] <gds> а вспомни, почему через try .. input_line .. loop () with End_of_file -> .. файл не прочитаешь, а если завернуть input_line в _opt, то всё получается?  Заворачивается одна конкретная функция.  Посмотри, может тут тоже получится.  Хотя с манатками -- есть сомнения.
[21:42:43] <ermine> в случае нерекурсивной функции это просто
[21:42:59] <ermine> в смысле input_line не рекурсивная
[21:43:04] <gds> именно.
[21:44:33] <ermine> let rec smth data = if data = 1 then () else if data = 2 then raise Error else smth data
[21:44:39] <gds> а что надо в конце концов?  Обязательно прям-таки автоматически заворачивать исключение в другое?  Дай функцию типа raise_kombain_error и там решай, в зависимости от типа потока, заворачивать или нет, и там же будет у тебя контекст.
[21:44:51] <gds> контекст -- строка-столбец.
[21:46:00] <ermine> вот в smth ничо про lene, col
[21:46:17] <ermine> это надо вынуть в data перед исполнением тела
[21:47:12] <gds> да найдёшь, откуда их взять.  так ведь?
[21:48:18] <ermine> найду, только стэк расходуется почем зря
[21:48:45] <ermine> потому что получается let smth data = try ... smth with ...
[21:50:30] <gds> так тебе try-with только для обёртки exn в Located_exn (.., exn) или для других целей тоже?
[21:51:57] <ermine> только для обертки
[21:53:47] <ermine> после этого будет задача как делать это только в том случае когда включен located режим, без переписывания кода парсера, в котором буут две тыщи строк
[21:56:03] <ermine> т.е. используя что (>>=) v f это, поэтому можно (>>=) v (catch f ...) не затрагивая кода парсера
[21:59:43] <gds> так запрети им кидать исключения иначе чем через твой raise_kmb, который в зависимости от located-режима будет либо просто кидать исключение, либо оборачивать его.
[22:06:42] <ermine> не поняла
[22:07:29] <ermine> запрещай не запрещай ведь все равно спираль стэков будет
[22:28:56] ftrvxmtrx вошёл(а) в комнату
[22:45:12] komar вошёл(а) в комнату
[23:01:17] tilarids вошёл(а) в комнату
[23:09:07] squant вышел(а) из комнаты: offline
[23:16:03] akovbovich вошёл(а) в комнату
[23:40:17] <ermine> а, слегка поняла, буду думать про это
[23:40:48] <ermine> где бы этот raise_located доставал координаты
[23:41:15] <ermine> а, тормоз
[23:44:00] <ermine> gds: счастья тебе :)
[23:44:36] <gds> ermine: принято!
[23:45:25] <ermine> gds: а где f[x]?
[23:47:28] <gds> ermine: надеюсь, в лучших местах, например, в каком-нибудь отпуске.
[23:51:22] akovbovich вышел(а) из комнаты
[23:56:20] akovbovich вошёл(а) в комнату
[23:59:09] akovbovich вошёл(а) в комнату
[23:59:39] akovbovich вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!