Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 5 июля 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+4
[00:29:16] ygrek вышел(а) из комнаты
[01:44:53] ermine вышел(а) из комнаты
[06:34:57] Mon вошёл(а) в комнату
[08:16:34] gds вышел(а) из комнаты
[08:57:39] iNode вошёл(а) в комнату
[09:02:00] gds вошёл(а) в комнату
[09:40:48] ygrek вошёл(а) в комнату
[09:52:24] serp256 вошёл(а) в комнату
[10:23:20] ermine вошёл(а) в комнату
[10:50:57] ygrek вышел(а) из комнаты
[10:57:44] ʇsʎɯ вошёл(а) в комнату
[11:21:10] Typhon вошёл(а) в комнату
[11:26:09] vshender вошёл(а) в комнату
[12:13:48] Mon вышел(а) из комнаты
[12:14:32] f[x] вошёл(а) в комнату
[12:15:17] Mon вошёл(а) в комнату
[13:29:29] <gds> http://pastebin.com/h8xCdc51 -- страшно-функториально?  А вот если делать культурно, то такая примерно структура программы будет у параллельных вычислялок, где алгоритм будет заседать в модуле Main, и для запуска надо будет создать Run(Main).
Лично мне -- таки страшно.  Вот и думаю.
[13:33:24] <f[x]> страшно
[13:33:55] <f[x]> а зачем так? почему обычные функции не годятся?
[13:40:51] <gds> да вот пока думаю, годятся или нет обычные функции.  Пока ход мысли (ака "сон разума") таков.  Программа (Main) должна обращаться к функциям отправки и приёма сообщений.  Хочу строгую статическую типизацию.  По логике, чтобы не передавать в качестве аргумента функции, обеспечивающие отправку и приём сообщений одного (пользовательского) типа, они должны быть в модуле, доступном для Main (т.е. модулем, который передаётся в Main, который уже функтор).  А чтобы сам модуль Main можно было запустить ровно тогда, когда нужно (проинициализировав параллельные штуки до запуска), его нужно передать другому модулю (Run в примере).
(я пока pre-3.12 рассматриваю, пока "модули как значения" не трогаем)
[13:54:03] <gds> такой постулат: чтобы обеспечить строгую типизацию при отправке-приёме сообщений, необходимо создать top-level module value, с типом, параметризованным типом сообщения (да хоть < send : 'a -> unit ; recv : unit -> 'a>), и сделать так, чтобы только через эти функции (или только с использованием этого значения) шла десериализация значений.  Что приводит к тому, что должен быть функтор, берущий пользовательский тип, и создающий, к примеру, модуль с сигнатурой sig val send : 'a -> unit val recv : unit -> 'a end.
[14:07:51] <f[x]> так понятно
[14:08:22] <f[x]> но это будет грубо говоря обёртка нам marshal
[14:08:35] <gds> или можно не функтором, а с использованием поганой фишки про weak types (?):
# type chan 'a = { send : 'a -> unit; recv : unit -> 'a; dummy : mutable unit };
type chan 'a = { send : 'a -> unit; recv : unit -> 'a; dummy : mutable unit }
# value z = {send = fun _ -> raise Exit; recv = fun _ -> raise Exit; dummy = ()};
value z : chan '_a = {send=<fun>; recv=<fun>; dummy=()}
'_a == win
[14:09:07] <gds> да, кстати, хочется ещё, чтобы можно было в теории свои функции подставить вместо Marshal.  Пока -- обёртка тупо.
[14:09:53] <f[x]> вот у меня такое есть длля сериализации - http://paste.org.ru/?orm5is
[14:10:06] <f[x]> но есть ведь другой подход - танцевать camlp4'ом от данных
[14:10:23] <f[x]> bin-prot,sexp итп
[14:12:39] <f[x]> и генерить функции send recv
[14:18:14] <gds> ну понятно, будут сгенерированные функции, но это другая проблема.  А моя текущая проблема такова: есть пользовательский тип данных, и есть функции send recv (будь то обёртка как у тебя, либо сгенерированные через camlp4), и они должны быть доступны основной программе.
[14:43:10] ygrek вошёл(а) в комнату
[14:44:47] <gds> кстати, фокус с weak type спасает только в случаях, когда удостоверяемся в том, что это значение (наподобие значения z из примера выше) создаём ровно один раз (чтобы не было "(create_z ()).send 123; let (x:string) = (create_z ()).recv ()").  То есть, опять же, система типов сама по себе не спасает, нужна ещё динамическая проверка.
[15:05:56] <f[x]> вообщем хорошо видно почему статическая типизация сакс. пока ты тут ваяешь каменный цветок ковбои на питоне уже вовсю пишут мапредьюсы и в ус не дуют
[15:09:42] <gds> "ты так говоришь, как будто это что-то плохое" :]
[15:10:14] <gds> а ваяю долго из-за того, что туплю и хочу всё и сразу.
[15:37:11] ygrek вышел(а) из комнаты
[16:13:45] serp256 вышел(а) из комнаты
[16:30:24] ʇsʎɯ вышел(а) из комнаты
[16:34:49] ʇsʎɯ вошёл(а) в комнату
[17:19:30] serp256 вошёл(а) в комнату
[17:30:41] gds вышел(а) из комнаты
[17:57:44] gds вошёл(а) в комнату
[18:08:38] iNode вышел(а) из комнаты
[19:05:30] ʇsʎɯ вышел(а) из комнаты
[20:13:14] Typhon вышел(а) из комнаты
[21:27:03] serp256 вышел(а) из комнаты
[22:08:57] ygrek вошёл(а) в комнату
[22:19:30] Typhon вошёл(а) в комнату
[22:26:39] ygrek вышел(а) из комнаты
[22:51:11] Typhon вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!