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

GMT+4
[00:03:23] ermine вышел(а) из комнаты
[00:24:16] Sun][ вышел(а) из комнаты
[00:39:57] bobry вышел(а) из комнаты
[00:43:00] bobry вошёл(а) в комнату
[00:50:54] Typhon вошёл(а) в комнату
[01:00:59] <bobry> окамля нет! http://habrahabr.ru/company/microsoft/blog/142169/
[01:01:00] <bobry> что за нафик
[01:01:07] <bobry> х-ль есть, скала есть, F# тоже есть
[01:01:19] <bobry> даже блин js есть!
[01:05:57] <gds> ну правильно, это же микрософт, там у них камло называется f#.
[01:06:43] <gds> Typhon: о, вроде появился.  ещё интересно или нуегонафиг про fsm?
[01:07:19] <Typhon> интересно!
[01:10:19] <gds> как я понимаю, есть набор связей, как у тебя в файликах, где каждый кружочек имеет входящий тип "сообщений".  Он один для каждого кружочка (то есть, любая входящая стрелка как бы несёт значение указанного типа в этот кружочек), и этими типами нужно будет дополнить описание автомата.  Пока вписывается в картину?
[01:13:02] <Typhon> " Он один для каждого кружочка" — только в один стейт/кружочек можно перейти с помощью разных событий, но можно их в один тип, наверное, ага
[01:13:58] <gds> да, события разные, но должен же быть способ для каждого кружочка выделить один тип.  иначе можно состояние на n разных.  так?
[01:14:29] <gds> * разделить
[01:16:29] bobry вышел(а) из комнаты
[01:16:47] <Typhon> ага, один типа даже нужен, максимум, наверное, могут отличаться конструкторы (если вариантом решается), но само значение всегда фиксировано для стейта
[01:31:46] Kakadu вышел(а) из комнаты
[01:37:25] <gds> далее я написал много текста, который начинается на:
"
далее -- два варианта, на рекурсивных функциях и на полиморфных вариантах, но первый кажется чуть удобнее, поэтому второй я даже не продумывал особо, только интуитивно прикинул, что есть изоморфизм (но не доказал).  Опишу первый.
"
, но УДОЛИЛ.  Потому что кривой вариант это, и даже есть сложности в реализации.  Зато, если бы он получился, reachability была бы проверяема легко.  Буду думать дальше.
[01:37:28] <gds> Typhon: ^^
[01:38:15] <Typhon> ок, если есть время/желание, первый вариант можно таки кинуть, для интереса
[01:42:48] <gds> он был плохим, я его навсегда удалил.
вкратце -- там про функции вида "состояние1 : ~call_состояние2 -> ... -> ~call_состояниеN -> тип_аргумента -> 'z" (где 'z имеется и в call_состояниеN).  Но сложно это обеспечить удобно, так, чтобы из файла-описания генерить код, работающий с типами.
[02:29:10] <gds> и гадты тут ни в мохнатку, ни в красную армию.
есть вариант с динамической типизацией (она внутри, а пользователь пишет код с честными типами).
есть вариант с coq, но горе тому, кто будет писать не чисто-функциональный код на нём.  (однако я прикину, можно ли там будет обеспечить такое, чтобы хитрую типизацию coq брал на себя, а пользователь давал бы ему чисто модуль (или другое описание) с камловскими хорошо-типизированными функциями.)
[03:01:36] <gds> Typhon: а можно и ещё проще сделать.  Из описания fsm сгенерить .mli, во-первых.  Для примера, есть A, принимающее unit, переходящее либо в B (которое принимает int) или в C (которое принимает bool).  Значит, в интерфейсе будет
value a : unit -> [= `B of int | `C of bool ];
, и код будет иметь вид
value a () = ... `B 123 ... или ... `C True;
далее генерится "функция-диспетчер" вида
value next_state = fun [ `B i -> b i | `C b -> c b | ... ];
, которая, получив состояние, вызывает "следующую" функцию.
Тут есть проверка допустимости вызовов (.ml не скомпилируется со сгенерированным .mli), но нет (и навряд ли можно сделать) проверку reachability, так как камло расширяет полиморфные вариантные типы до соответствия сигнатуре.  Кроме того, плохая изоляция состояний -- из "a" можно случайно/специально вызвать d "asd" вручную, проанализировать результат и затем вернуть [= `B of int | `C of bool].
Учитывая эти два недостатка, решение не очень ок.
[03:15:31] <gds> Typhon: а вот с reachability -- можно соединить с "функциональным" подходом.  Передавать функции вида fun x -> `B x в качестве аргументов ~call_b (эти функции можно нагенерить в дополнительном .ml-файле и передавать их в очередную функцию в коде диспетчера, в next_state).  Вот и развязали рекурсию через слаботипизированные полиморфные варианты, вот и получили warning: unused variable в случае неиспользования перехода.
Этим же решается изоляция состояний -- через coding style guide запрещается передавать свои аргументы ~call_{a,b,c} в функции текущего модуля.  А то и дальше можно навернуть, что-то с модулями (и защитой через них) и/или с универсально-квантифицированными типовыми переменными (тохесом чувствую).
[03:17:25] gds спатке.
Кое-что понял про эти автоматы в плане их представления в типизированных языках.  Такую же херню, как в ырланке, сделать в окамле можно без проблем, но "зачем так жить, посоны?".  Вот и не будем.  А с высокоуровневыми типами как-то не очень хорошо это решается, мозга у меня на это мало, пока что.  Или надо просто сесть и начать делать.

[03:30:38] <gds> спатке -- понятие растяжимое, оказывается.
в общем, про изоляцию -- достаточно сделать тип, возвращаемый ~call_x, абстрактным через модульную систему, этим сделав невозможным создание собственных значений ~call_x в обход next_step.  Конечно, и тут возможны хаки различной степени тяжести (например, рекурсивные вызовы себя же -- вообще легко), но на то и coding style guides нужны.  Если описываем функции-состояния на окамле -- имеем все последствия того, что это таки функции на окамле.
[05:57:54] letrec вошёл(а) в комнату
[07:14:32] bobry вошёл(а) в комнату
[07:29:52] bobry вышел(а) из комнаты
[07:29:57] ftrvxmtrx вышел(а) из комнаты
[08:01:14] ftrvxmtrx вошёл(а) в комнату
[09:05:15] bobry вошёл(а) в комнату
[09:13:20] <bobry> хочу такое в камло! http://hackage.haskell.org/package/vacuum-cairo
[10:28:10] Sun][ вошёл(а) в комнату
[11:12:07] klapaucius вошёл(а) в комнату
[12:16:21] ermine вошёл(а) в комнату
[12:30:44] f[x] вошёл(а) в комнату
[12:50:28] letrec вышел(а) из комнаты
[12:52:17] akovbovich вошёл(а) в комнату
[12:58:44] Sun][ вышел(а) из комнаты
[13:02:43] Sun][ вошёл(а) в комнату
[13:04:11] Sun][ вышел(а) из комнаты
[13:07:15] Sun][ вошёл(а) в комнату
[13:18:54] <bobry> кстати статья про итераты in plain english http://www.yesodweb.com/book/enumerator-package
[13:19:00] <bobry> хоть и с х-ль примерами
[13:24:15] Typhon вышел(а) из комнаты
[13:34:04] letrec вошёл(а) в комнату
[13:37:24] komar вышел(а) из комнаты: Replaced by new connection
[13:37:25] komar вошёл(а) в комнату
[13:40:15] <bobry> интересно как у камло с поиском ликов?
[13:40:35] <bobry> в х-ле вот есть тула для визуализации хипа, но чтобы ее заюзать надо все либы собрать с поддержкой профилирования
[13:46:59] letrec вышел(а) из комнаты
[13:47:45] Kakadu вошёл(а) в комнату
[14:02:09] shaggie вошёл(а) в комнату
[14:18:25] letrec вошёл(а) в комнату
[14:33:22] Typhon вошёл(а) в комнату
[14:37:35] akovbovich вышел(а) из комнаты
[14:40:58] <Typhon> gds: ага, прочитал, надо ещё покуить/подумать
[14:41:41] <Typhon> bobry: там на плейн инглиш полно статей и постов про итераты, у меня прямо ща вкладок 10 на эту тему открыто; у них у многих недостаток — отсутствие примеров; что такое итерат и как его получить gds уже чотко написал :-)
[14:41:53] <Typhon> http://www.mew.org/~kazu/proj/enumerator/ вот этот вроде ничо так
[15:15:04] tilarids вышел(а) из комнаты
[15:20:45] tilarids вошёл(а) в комнату
[15:21:59] Kakadu вышел(а) из комнаты
[15:36:23] akovbovich вошёл(а) в комнату
[15:41:23] Kakadu вошёл(а) в комнату
[15:47:54] Kakadu вышел(а) из комнаты
[15:49:46] <bobry> мда, вот и наш первый серьезный лик на х-ле
[15:49:53] <bobry> искали час — ничего не нашли, течет не по человечески
[15:50:30] <Typhon> $! везде тыкайте сразу же, гг
[15:56:26] Kakadu вошёл(а) в комнату
[15:57:50] <gds> клёво же!
[15:58:21] <bobry> да уж, не то слово клево — похоже что течет где то в районе IO
[15:59:56] <bobry> Typhon: классная футболочка по твоей ссылке
[16:00:00] <bobry> http://haskell.spreadshirt.com/oleg-already-did-it-A6499531
[16:04:21] <Kakadu> Мне вспомнилась миниатюра А.Райкина где он был водопроводчиком. "Хозяйка, тикёть?"
[16:55:22] <Kakadu> тут Sun][ хочет переписать камлобраузер на кутэ. Как бы ему и мне не умереть на граблях тикля....
[16:55:52] <Sun][> Бгг %)
[16:56:00] <Sun][> Да не помру, я с TCL немного знаком
[16:56:19] <Kakadu> а я вот посмотрел и нихрена не понял
[16:56:41] <Kakadu> мне интересно как залезает в потроха cmoшек
[17:00:31] <Kakadu> мне хочется смотреть на код Viewer.search_symbol....
[17:02:55] <Typhon> а зачем переписывать камлобраузер на кутэ?
[17:05:15] <Kakadu> надо найти грабли в соединении камла и куты
[17:07:05] <Sun][> В общем чтоббыло :)
[17:07:30] <Kakadu> вот бы ещё qmlосилить
[17:54:50] akovbovich вышел(а) из комнаты
[18:02:32] ftrvxmtrx вышел(а) из комнаты
[18:10:41] akovbovich вошёл(а) в комнату
[18:23:11] Kakadu вышел(а) из комнаты
[18:28:47] Sun][ вышел(а) из комнаты
[18:50:28] bobry вышел(а) из комнаты
[18:54:55] bobry вошёл(а) в комнату
[19:20:31] Kakadu вошёл(а) в комнату
[19:29:10] letrec вышел(а) из комнаты
[19:48:28] tilarids вышел(а) из комнаты
[19:49:36] Typhon вышел(а) из комнаты
[19:53:55] ftrvxmtrx вошёл(а) в комнату
[19:58:37] bobry поюзал кондуиты, полет нормальный
[19:58:53] <bobry> почему то воткнуть их было проще чем итераты
[20:00:09] bobry вышел(а) из комнаты
[20:03:00] bobry вошёл(а) в комнату
[20:03:05] akovbovich вышел(а) из комнаты
[20:27:14] bobry вышел(а) из комнаты
[21:17:58] bobry вошёл(а) в комнату
[22:06:17] shaggie вышел(а) из комнаты
[22:17:54] akovbovich вошёл(а) в комнату
[22:49:16] Typhon вошёл(а) в комнату
[22:50:04] akovbovich вышел(а) из комнаты
[22:59:13] Sun][ вошёл(а) в комнату
[22:59:34] f[x] вышел(а) из комнаты: Computer went to sleep
[23:00:06] f[x] вошёл(а) в комнату
[23:01:25] <Typhon> bobry: значит с тебя туториал по кондуитам или типа пример как что-то практическое с их помощью делать; если портанёшь с мунспика — так и вообще круто :)
[23:17:23] Sun][ вышел(а) из комнаты
[23:18:58] bobry вышел(а) из комнаты
[23:27:39] bobry вошёл(а) в комнату
[23:28:29] komar вышел(а) из комнаты: Replaced by new connection
[23:28:29] komar вошёл(а) в комнату
[23:29:19] <bobry> Typhon: я читал еврейский туториал в yesodbook, отлично написано
[23:29:47] <bobry> правда я еще не осознал бонусы по сравнению с итератами
[23:29:54] <bobry> потому шо если подумать так почти одно и то же
[23:30:08] <bobry> разве что в кондуитах есть sink, куда уходят данные обрабатываемые итератами
[23:32:09] Sun][ вошёл(а) в комнату
[23:37:55] <gds> bobry:
sequence_stream : iteratee 'elo 'eli -> enumeratee 'elo 'eli 'a
[23:39:52] <bobry> gds: вот что мне понравилось в коднуитах, так это человеческие имена :)
[23:40:47] <gds> так там оно кое-как подзаточено под чуть другие концепции.  Понятно, что и имена желательно поменять.
[23:40:49] ermine вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!