Home
Objective Caml
ocaml@conference.jabber.ru
Четверг, 10 июня 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:49:17] ygrek вышел(а) из комнаты
[00:52:44] ermine вышел(а) из комнаты
[01:05:40] vshender вышел(а) из комнаты
[01:05:49] Typhon вышел(а) из комнаты
[01:07:36] Typhon вошёл(а) в комнату
[01:11:42] Typhon вышел(а) из комнаты: Replaced by new connection
[01:11:45] Typhon вошёл(а) в комнату
[01:13:18] Typhon вышел(а) из комнаты: Replaced by new connection
[01:13:21] Typhon вошёл(а) в комнату
[02:03:44] Kakadu вышел(а) из комнаты
[07:45:35] iNode вышел(а) из комнаты
[08:12:28] gds вышел(а) из комнаты
[08:25:26] iNode вошёл(а) в комнату
[08:56:44] Typhon вышел(а) из комнаты
[08:58:09] gds вошёл(а) в комнату
[10:03:38] serp256 вошёл(а) в комнату
[10:10:09] ermine вошёл(а) в комнату
[10:18:28] ygrek вошёл(а) в комнату
[10:21:58] ʇsʎɯ вошёл(а) в комнату
[10:23:25] <ʇsʎɯ> ermine: по поводу капчи, генерируй .gif
[10:23:31] <ʇsʎɯ> с хитрой анимацией
[10:23:36] <gds> представим, что есть алгоритм, использующий ленивые значения.  Как определить, в каких местах ленивость не нужна?  (например, с целью поменять интерфейс или оптимизировать алгоритм)
let ( !! ) l = Lazy.lazy_from_val (Lazy.force l)
и тыкаете "!!" перед нужным значением.  Если программа не валится от пережора памяти, ленивость не нужна :)
[10:23:43] <ʇsʎɯ> и чтобы ни в одном кадре не было полной картинки
[10:24:42] <ʇsʎɯ> gds: нее, это какой-то ненаучный подход
[10:24:56] <ʇsʎɯ> надо доказать всё на Coq и тогда будет видно, где нужна, а где - нет )
[10:26:04] <gds> кто предлагает -- тот и делает!
[10:29:27] Kakadu вошёл(а) в комнату
[10:31:46] <ʇsʎɯ> ога-ога, "кто курячил, тот и начал", да? )
[10:32:40] <gds> валшэбный мир опенсорса, что ж ты хочешь.
[10:44:04] <gds> подскажите, можно ли сделать так: сделать две реализации примерно-одинакового модуля (A и B), сделать общую сигнатуру SC, сделать сигнатуры module type SA = sig include SC ... A-специфичные функции ... end (и то же самое с B), и чтобы A:SA и B:SB нормально типизировались?
А include на сигнатурах давно появился?
[11:17:55] ygrek вышел(а) из комнаты
[12:18:29] serp256 вышел(а) из комнаты
[12:54:09] <f[x]> include сигнатур по-моему в 3.12 только
[13:04:51] Typhon вошёл(а) в комнату
[13:13:11] serp256 вошёл(а) в комнату
[13:21:09] <gds> f[x]: вот, тоже что-то такое помню, но изначально читал http://caml.inria.fr/pub/docs/manual-ocaml/manual018.html и удивился тому, что это в официальной документации написано/выложено.
[13:26:19] <f[x]> хм!
[13:26:46] <gds> может заманивают?
[13:28:12] <f[x]> наверное я перепутал с include module type of
[13:32:49] <f[x]> а, include типа функтора нет
[13:32:57] <f[x]> а для твоего случая всё есть получается
[13:34:09] <gds> значит я тоже перепутал.
Предполагаю, что include module type of разумен только для функторов и для случаев, когда лень писать .mli.
[14:20:50] ʇsʎɯ вышел(а) из комнаты
[14:48:29] Kakadu вышел(а) из комнаты
[14:50:41] ygrek вошёл(а) в комнату
[15:00:32] ʇsʎɯ вошёл(а) в комнату
[15:59:01] serp256 вышел(а) из комнаты
[16:07:03] ygrek вышел(а) из комнаты
[17:20:40] <gds> в общем, переборную монаду строил как поверх Stream, так и через ужасный монадный трансформер, работающий с использованием cps (подолбался пару дней, воткнул лень где надо, работает).  Решил для полноты картины сделать наивную реализацию поверх List (разумеется, из жалости не запуская её на тестах с бесконечными множествами).  Как и обычно, самая корректная реализация (Stream + диагональный метод выполнения bind) -- самая тормозная.  В целом, реализации поверх Stream и cps сравнимы по скорости.  Реализация поверх List -- самая быстрая в случаях, когда все значения вычислений используются (так как нет профита от отбрасывания неиспользованных невычисленных значений, и нет тормозов от заворачивания вычислений в ленивые значения), но там даже не построить "вычисление", содержащее бесконечное количество значений (не говоря уже о работе с ним).  Скорость тестил на решалке судоку, ибо "лучше выдумать не мог".
[17:21:30] <Typhon> просим котъ :)
[17:21:54] <Typhon> что-то уже было, хочется еще глянуть )
[17:27:17] <gds> обязательно будет, даже птсо оформлю (ссылку кину сюда на всякий случай).  Из кода, точнее, из реализации в cps (LogicT) нужно будет из каждой третьей строки выкинуть отладочную печать, ну и прочее по мелочам -- сигнатурки чтобы гламурненькие были, например.
И нормальный пример для тестирования надо, чтобы перебор был -- всем переборам перебор.  И хитрый, и в меру ветвистый.
[17:28:01] <gds> нормальный пример нужен, потому что в тестовой судоке был перебор порядка 70000 вариантов, глубина порядка 51, время от 0.03 (List) до 0.20 (Stream+диагональ).
[17:28:19] <gds> по таким мелочам трудно судить о реальной скорости.
[17:29:07] <f[x]> возьми задание с сапки там где перебор маршрутов :)
[17:29:11] <Typhon> около-лабиринтные задачи. не?
[17:29:22] <f[x]> double-hit
[17:31:03] gds вышел(а) из комнаты
[17:31:15] iNode вышел(а) из комнаты
[18:23:02] gds вошёл(а) в комнату
[19:04:43] ʇsʎɯ вышел(а) из комнаты
[19:05:33] serp256 вошёл(а) в комнату
[19:21:52] vshender вошёл(а) в комнату
[19:27:26] Typhon вышел(а) из комнаты: Replaced by new connection
[19:27:27] Typhon вошёл(а) в комнату
[19:37:52] Kakadu вошёл(а) в комнату
[19:38:41] serp256 вышел(а) из комнаты
[19:51:36] ygrek вошёл(а) в комнату
[20:05:14] vshender вышел(а) из комнаты
[20:10:09] Typhon вышел(а) из комнаты
[21:30:49] Typhon вошёл(а) в комнату
[22:54:34] Kakadu вышел(а) из комнаты
[23:00:57] digital_curse вышел(а) из комнаты: Replaced by new connection
[23:01:00] digital_curse вошёл(а) в комнату
[23:21:06] ermine вышел(а) из комнаты
[23:26:17] <komar> А в сахаре для stream'ов что, никак нельзя обозначить конец потока?
[23:26:58] <komar> Типа, | [< '1; '2; teh_end >] -> ...
[23:48:32] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!