Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 20 июня 2011< ^ >
gds установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Светлое будущее -- http://camlunity.ru/ | Нефильтрованное настоящее -- https://github.com/camlunity/kamlo_wiki | Портер прошлое -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:02:44] Typhon вышел(а) из комнаты
[00:04:50] <gds> понял.  Однако, сходу подумал, что есть какие-то суровые вещи в боте, которые заставили бы применить нечеловеческие усилия к допиливанию.
[00:07:32] <ermine> типа итератов
[00:07:46] <ermine> не пойму как сочинить их ранилку
[00:08:37] <gds> ну нет же, итераты -- это не суровая шняга, это приятный аддон.
а ранилка -- это применялка к ним чанков до тех пор, пока не будет "готов!" или "есть ошибка...".
[00:09:25] <ermine> точнее красиво завершить IE_done
[00:11:03] <gds> если IE_done, то завершать не надо, уже ок.  Если же IE_cont без ошибок, то надо припихивать дальше.
[00:11:07] <ermine> gds: и непонятно, что делать с EOI
[00:11:29] <ermine> в функции тестилки инпута
[00:12:10] <ermine> в общем, концепцию еще надо чем-то удобрить и взрастить из озимых
[00:13:10] <gds> ermine: iteratee -- та штука, которой итерируют.  Мне помогла интуиция типа "это функция, в которую суют, и которая, если не закончила кушать, то тоже функция".
[00:13:48] <ermine> gds: да вопрос в том, как это сопрягать с копанием в инпуте
[00:14:30] <ermine> gds: в моем случае с EOI можно вернуть IE_done, IE_error или угостить им парсер, вот вопрос, что лучше
[00:14:52] <abiogenesis> а почему камлюнити на gdsfh.dyndns.org не открывается ;[
[00:14:56] <ermine> а как знать, что в момент EOI уже можно и IE_done вернуть :)
[00:15:16] <gds> ermine: "у меня всё работает!111" :]  Итерат сам копается где надо, а как докопался до истины -- так и возвращает нужное.
[00:15:42] <ermine> gds: а сколько времени ты потратил на взращивание концепции?
[00:15:56] <gds> abiogenesis: моя срань работает негарантированно, она тут как "дань прошлому", не больше.
[00:16:30] <abiogenesis> gds: так что же, у ocaml нет светлого будущего?
[00:16:50] <gds> abiogenesis: есть, оно в будущем.  В настоящем -- гитхабек.
[00:17:33] <ermine> камло мёртво, вода под лежащий верблюд не течет
[00:17:45] <abiogenesis> а что же вы некрофильствуете
[00:17:51] Typhon вошёл(а) в комнату
[00:18:27] <gds> ermine: я взял концепцию у о.к., сам бы не придумал.  Однако думал/ковырял очень долго.  Манатки не нравились жутко.  Но потом как-то разобрался.  Но во многих моментах совсем не до конца.  Но где-то полгода уже знаю: если надо будет что-то с итератами асилить, то точно смогу.  И так и получается.
[00:18:29] <ermine> gds: ты свои итераты за часик написал?!
[00:18:36] <ermine> тьфу
[00:19:24] <gds> ermine: я тупо портировал.  В iteratees.ml я это явно прописал.  А то, что ты не смотрела этот файл, это пичалька.
[00:19:55] <ermine> gds: не, я только прочитала бубнилку, и решила, что этого с меня хватит
[00:20:04] <ermine> теперь придется страдать дальше
[00:20:25] <gds> ermine: вдвойне пичалька.
[00:21:06] <ermine> gds: ну давно бы написал статью!
[00:21:22] <ermine> у тебя итераты же с отклонениями
[00:21:33] <gds> ermine: iteratees.ml уже написал.  Собственно, не я, но моих каментов там есть.
[00:21:59] <ermine> ладно, щас погляжу
[00:22:43] <gds> мои итераты -- с добавлениями комментариев и с выносом строк и хттп в отдельное место.  С другой стороны, с добавлением енумерата utf8 и ещё некоторых комбинаторов.
[00:22:47] <ermine> неужели так много кода надо для итератов?
[00:22:50] <ermine> жуть
[00:24:22] <gds> не, для итератов надо только типы.  Остальное -- вкусняшки.
[00:24:34] <ermine> начало, где enum_fd_buffer_size, уже устрашает
[00:25:43] <ermine> open Obj - /me напряглась
[00:26:11] <gds> расслабься, дальше всё будет мягко и нежно.
[00:26:25] gds тоже пазырить, что там дальше...
[00:27:12] <ermine> грязные экспшны там дальше
[00:28:10] <gds> Obj там не open и вообще понарошку.  Можно выпилить смело.
[00:30:02] gds спатке, буду через примерно 9 часов.
[00:30:08] gds вышел(а) из комнаты
[00:34:28] <ermine> ушоль
[01:13:16] komar вышел(а) из комнаты: Replaced by new connection
[01:13:19] komar вошёл(а) в комнату
[01:13:38] abiogenesis вышел(а) из комнаты
[01:21:53] komar вышел(а) из комнаты: Replaced by new connection
[01:21:56] komar вошёл(а) в комнату
[01:24:51] komar вышел(а) из комнаты: Replaced by new connection
[01:24:53] komar вошёл(а) в комнату
[01:33:04] komar вышел(а) из комнаты: Replaced by new connection
[01:33:05] komar вошёл(а) в комнату
[01:47:13] komar вышел(а) из комнаты: Replaced by new connection
[01:47:15] komar вошёл(а) в комнату
[01:54:41] abiogenesis вошёл(а) в комнату
[02:04:01] zert вышел(а) из комнаты
[02:04:14] abiogenesis вышел(а) из комнаты
[02:16:54] komar вышел(а) из комнаты: Replaced by new connection
[02:16:55] komar вошёл(а) в комнату
[02:18:53] Typhon вышел(а) из комнаты: Replaced by new connection
[02:18:55] Typhon вошёл(а) в комнату
[02:20:05] komar вышел(а) из комнаты: Replaced by new connection
[02:20:06] komar вошёл(а) в комнату
[02:31:47] komar вышел(а) из комнаты: Replaced by new connection
[02:31:48] komar вошёл(а) в комнату
[02:38:40] komar вышел(а) из комнаты: Replaced by new connection
[02:38:41] komar вошёл(а) в комнату
[02:47:06] ermine вышел(а) из комнаты
[03:05:33] komar вышел(а) из комнаты: Replaced by new connection
[03:05:33] komar вошёл(а) в комнату
[03:17:18] komar вышел(а) из комнаты: Replaced by new connection
[03:17:18] komar вошёл(а) в комнату
[03:27:00] Typhon вышел(а) из комнаты
[03:38:32] komar вышел(а) из комнаты: Replaced by new connection
[03:38:32] komar вошёл(а) в комнату
[04:05:41] komar вышел(а) из комнаты: Replaced by new connection
[04:05:41] komar вошёл(а) в комнату
[04:15:57] komar вышел(а) из комнаты: Replaced by new connection
[04:15:57] komar вошёл(а) в комнату
[04:16:56] Digimmortal вошёл(а) в комнату
[04:23:28] komar вышел(а) из комнаты: Replaced by new connection
[04:23:29] komar вошёл(а) в комнату
[04:24:21] zinid вошёл(а) в комнату
[04:31:52] komar вышел(а) из комнаты
[04:32:08] komar вошёл(а) в комнату
[04:36:59] komar вышел(а) из комнаты: Replaced by new connection
[04:37:00] komar вошёл(а) в комнату
[04:47:14] komar вышел(а) из комнаты: Replaced by new connection
[04:47:14] komar вошёл(а) в комнату
[04:53:13] komar вышел(а) из комнаты: Replaced by new connection
[04:53:13] komar вошёл(а) в комнату
[05:00:45] komar вышел(а) из комнаты: Replaced by new connection
[05:00:45] komar вошёл(а) в комнату
[05:03:12] komar вышел(а) из комнаты: Replaced by new connection
[05:03:13] komar вошёл(а) в комнату
[05:10:43] komar вышел(а) из комнаты: Replaced by new connection
[05:10:43] komar вошёл(а) в комнату
[05:16:21] komar вышел(а) из комнаты: Replaced by new connection
[05:16:22] komar вошёл(а) в комнату
[05:19:15] komar вышел(а) из комнаты: Replaced by new connection
[05:19:16] komar вошёл(а) в комнату
[05:26:07] komar вышел(а) из комнаты: Replaced by new connection
[05:26:08] komar вошёл(а) в комнату
[05:45:30] komar вышел(а) из комнаты: Replaced by new connection
[05:45:30] komar вошёл(а) в комнату
[05:52:04] komar вышел(а) из комнаты: Replaced by new connection
[05:52:06] komar вошёл(а) в комнату
[05:58:39] komar вышел(а) из комнаты: Replaced by new connection
[05:58:40] komar вошёл(а) в комнату
[06:21:25] komar вышел(а) из комнаты: Replaced by new connection
[06:21:26] komar вошёл(а) в комнату
[06:44:46] komar вышел(а) из комнаты: Replaced by new connection
[06:44:46] komar вошёл(а) в комнату
[06:57:48] komar вышел(а) из комнаты: Replaced by new connection
[06:57:48] komar вошёл(а) в комнату
[07:10:49] komar вышел(а) из комнаты: Replaced by new connection
[07:10:49] komar вошёл(а) в комнату
[07:16:05] komar вышел(а) из комнаты: Replaced by new connection
[07:16:05] komar вошёл(а) в комнату
[07:19:01] komar вышел(а) из комнаты: Replaced by new connection
[07:19:02] komar вошёл(а) в комнату
[07:38:04] komar вышел(а) из комнаты: Replaced by new connection
[07:38:04] komar вошёл(а) в комнату
[08:01:06] komar вышел(а) из комнаты: Replaced by new connection
[08:01:06] komar вошёл(а) в комнату
[08:03:29] Typhon вошёл(а) в комнату
[08:05:11] komar вышел(а) из комнаты: Replaced by new connection
[08:05:12] komar вошёл(а) в комнату
[08:16:00] komar вышел(а) из комнаты: Replaced by new connection
[08:16:00] komar вошёл(а) в комнату
[08:46:00] komar вышел(а) из комнаты: Replaced by new connection
[08:46:00] komar вошёл(а) в комнату
[09:03:05] gds вошёл(а) в комнату
[10:03:32] Typhon вышел(а) из комнаты
[10:05:43] bobry вышел(а) из комнаты
[10:59:01] klapaucius вошёл(а) в комнату
[11:47:14] ermine вошёл(а) в комнату
[12:02:15] ftrvxmtrx вышел(а) из комнаты
[12:48:31] ftrvxmtrx вошёл(а) в комнату
[12:58:51] Typhon вошёл(а) в комнату
[12:59:49] gds вышел(а) из комнаты
[13:43:09] gds вошёл(а) в комнату
[14:38:42] zert вошёл(а) в комнату
[15:09:02] rexim вошёл(а) в комнату
[15:20:02] rexim вышел(а) из комнаты: offline
[17:15:07] <gds> и всё-таки я туплю насчёт monomorphism restriction, да и не только -- бошка тупая в последние несколько дней вообще.  Сейчас опишу проблему кошерно, с примерами в топлевеле.
[17:23:05] ermine таких академических слов не знает
[17:23:56] <gds> # let q = ref None;;
val q : '_a option ref = {contents = None}
'_a видишь?
[17:26:01] <ermine> вижу
[17:26:19] <ermine> а еще знаю, что sig не любит такие штучки
[17:26:24] <gds> ermine: ну вот, никакого полиморфизьму.  первое использование зафиксирует тип.
[17:27:16] <ermine> gds: на это указывает передний хвостик?
[17:27:21] <gds> да.
[17:27:28] <ermine> гм
[17:27:58] <Digimmortal> для таких переменных есть специальное название
[17:28:05] <Digimmortal> не могу вспомнить
[17:28:06] <ermine> а мне казалось, что полиморфизма тут нет, потому что это глобальное значение
[17:29:26] <gds> название -- weak types, может, но не помню точно.
[17:30:13] <ermine> можно еще вывести, что все глобальные переменные - мономорфы :)
[17:30:20] <gds> ermine: правильно, именно поэтому.  более того, потому что глобальное значение, не являющееся лямбдой и ещё некоторыми формами выражений (например, не иммутабельный конструктор -- пример с "type 'a t = A | B;; let x = A;;" прокатит).
[17:30:29] <ermine> и принтфы гребаные
[17:30:34] <gds> точнее, правильно -- про глобальные значения.
[17:30:49] <gds> принтфы, кстати, вполне разруливаются: let myprintf fmt = Printf.printf fmt и ок
[17:30:53] <gds> http://paste.in.ua/2623/
[17:31:48] <gds> ^^^  -- вот пример, очень близкий к реальному коду.  "common identity" является не лямбдой, поэтому мономорфизм.
[17:32:18] <gds> но в реальном примере там весьма много общего кода, поэтому делать отдельную генерилку typer'а для sometype и sometype_opt -- не очень умно.
[17:33:13] <gds> кроме того, это вызовет двойное вычисление значений, общих для обоих typer'ов.
далее, каждый раз вычислять то, что вычисляет common, возвращая две функции, при каждом вызове string_opt -- очень неумно.
[17:33:24] <ermine> gds: а если принтф записать как let prt = printf или как-то там было, я страдала с этим
[17:33:47] <gds> в общем, культурных решений не вижу.  Одно вижу, но пока не буду говорить, ибо там некультурно.  И не знаю, получится ли вообще.
[17:34:22] <ermine> gds: а с чего у тебя свистопляска пошла?
[17:34:22] <gds> ermine: да, printf он такой.  но если формат передавать, то очень даже ок получается.  Кстати, это я в нашем калочятике подглядел, у ygrek'а вроде.
[17:35:25] <ermine> не поняла в чем проблема-то
[17:36:19] <gds> проблема в том, что
value string : typer string '_a = <fun>
value string_opt : typer (option string) '_a = <fun>
-- в сигнатуру не выведешь, и даже
value my_string x = string x;
не прохавает, ибо тоже '_a мешаются.
[17:37:37] <gds> точнее, my_string тоже будет typer string '_a
[17:40:01] <ermine> gds: я уже решала проблему со составлением сигнатуры в camlp4, там мне тоже пришлось побороться с `_a, но думала недолго - оказалось, что достаточно дописать "ненужные" аргументы явно
[17:40:21] <ermine> т.е не писать партиал аппликешны в сигнатуре
[17:40:28] <gds> тут так не получится сходу.  А если получится, то вызовет перевычисление.
[17:42:04] <ermine> не, аргументы надо дописывать в "заголовок" функции
[17:42:18] <gds> у меня возвращается тупель.
[17:44:14] <ermine> а мне непонятно, почему покоцаный заголовок функции приводит к появлению '_a
[17:46:35] <gds> потому что возможны сайдэффекты при вычислении, и их возможность выводится из синтаксической формы выражения.  а именно, если применение -- то '_a.  Пример:
value identity x = x;
value make_identity () = identity;
value f = make_identity ();
[17:47:05] <gds> не только сайдэффекты возможны, но и нарушение типизации.  Сходу не приведу пример.
[17:48:39] <gds> а нет, приведу.
value r = ref None;
value () = { r := Some 123; print_string r.val };
если бы было "r : ref (option 'a)", то обе операции (взятие и присвоение) протипизировались бы.
хотя это пример не совсем к тому вопросу.
[17:48:56] <gds> тьфуты, конечно не print_string, но смысл понятен.
[18:00:56] <gds> точнее, это называется "value restriction".
[18:01:20] ftrvxmtrx вышел(а) из комнаты
[18:01:26] ftrvxmtrx вошёл(а) в комнату
[18:12:52] <gds> ага, а вот и пример кода, которого, вероятно, опасаются, вводя value restriction: http://paste.in.ua/2625/
[18:14:02] <gds> и, с другой стороны, проведя эта-экспансию:
# value q x = mkref () x;
value q : 'a -> 'a = <fun>
# q 123;
- : int = 123
# q "asd";
- : string = "asd"
разница в том, что mkref теперь на каждое применение q x выделяет ту ref cell, потому и ок.
[18:24:02] <ermine> а рефы ли вообще ок?
[18:25:27] <gds> ermine: фишка в том, что компилятор из-за раздельной компиляции не может проверить, будет ли в функции mkref как факт какой-нибудь реф.  Если будет реф и не будет value restriction -- программа упадёт.
[18:26:24] <gds> впрочем, я сейчас лишь прояснил проблему, ни на шаг не подойдя к её решению.
[18:27:35] <ermine> рефы - явно не ок
[18:28:37] ermine уже не упомнит, когда последний раз юзала ref
[18:29:07] <gds> да тут не в рефах дело, а в общем принципе.  Ну будет не ref, а массив из одного элемента, кому от этого легче станет.
[18:30:33] <ermine> именно из одного элемента?
[18:31:09] <ermine> а, option
[18:31:50] <ermine> а еще обижаются, что в постгресе проблемы типизации с участием NULL
[18:31:57] <gds> массив из одного элемента = реф.
[18:32:45] <gds> я вон на оракл обижаюсь по подобным поводам.  это нормально.  но не сравнивай субедешечьку и язык программирования со строгой типизацией, это разные вещи.
[18:33:00] <ermine> да разные :)
[18:37:06] zinid вышел(а) из комнаты
[19:33:38] Typhon вышел(а) из комнаты
[20:07:43] <gds> о, получилось, и даже прилично на вид, и без эта-экспансии: http://paste.in.ua/2627/ .  Я крут!  :]
[20:11:37] <gds> только вот не совсем понятно, во что конкретно скомпилируется, но максимум, что я потеряю, это один indirect call.
[20:16:23] Digimmortal вышел(а) из комнаты: Replaced by new connection
[20:16:25] Digimmortal вошёл(а) в комнату
[20:35:01] Digimmortal вышел(а) из комнаты
[20:42:59] ftrvxmtrx вышел(а) из комнаты
[21:22:37] ftrvxmtrx вошёл(а) в комнату
[21:54:06] ftrvxmtrx вышел(а) из комнаты
[21:57:48] komar вышел(а) из комнаты
[22:16:54] komar вошёл(а) в комнату
[22:33:41] komar вышел(а) из комнаты: Replaced by new connection
[22:33:41] komar вошёл(а) в комнату
[22:47:33] bobry вошёл(а) в комнату
[23:45:54] gds вышел(а) из комнаты
[23:57:42] ftrvxmtrx вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!