Home
Objective Caml
ocaml@conference.jabber.ru
Четверг, 12 ноября 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | voice по запросу | ocaml мёртв, move on
Конфигурация комнаты

GMT+3
[00:43:12] ygrek вышел(а) из комнаты
[02:11:24] sceptic вышел(а) из комнаты
[02:53:35] Typhon вышел(а) из комнаты
[05:18:09] Dema вошёл(а) в комнату
[06:47:48] Dema вышел(а) из комнаты
[06:54:59] Dema вошёл(а) в комнату
[07:47:23] geovit вошёл(а) в комнату
[08:11:37] Dema вышел(а) из комнаты
[08:15:19] Dema вошёл(а) в комнату
[08:22:11] gds вышел(а) из комнаты
[08:28:12] Dema вышел(а) из комнаты: Replaced by new connection
[08:28:16] Dema вошёл(а) в комнату
[08:44:21] Dema вышел(а) из комнаты
[08:44:34] Dema вошёл(а) в комнату
[08:57:59] gds вошёл(а) в комнату
[09:31:42] iNode вошёл(а) в комнату
[09:54:29] ygrek вошёл(а) в комнату
[10:09:19] Mon вышел(а) из комнаты
[10:09:57] Mon вошёл(а) в комнату
[10:10:43] Mon вышел(а) из комнаты
[10:11:15] Mon вошёл(а) в комнату
[10:19:30] f[x] вошёл(а) в комнату
[10:22:59] Typhon вошёл(а) в комнату
[10:25:32] daapp вошёл(а) в комнату
[10:56:52] sceptic вошёл(а) в комнату
[11:04:18] gds вышел(а) из комнаты
[11:20:40] animist вошёл(а) в комнату
[11:37:58] <f[x]> хм, Gzip.input_char не thread-safe?
[12:03:52] Dema вышел(а) из комнаты
[12:04:05] Dema вошёл(а) в комнату
[13:53:43] daapp вышел(а) из комнаты
[13:53:53] gds вошёл(а) в комнату
[14:02:18] Mon вышел(а) из комнаты
[14:03:46] Mon вошёл(а) в комнату
[14:04:02] Dema вышел(а) из комнаты
[14:08:10] Dema вошёл(а) в комнату
[14:17:51] sevenov вышел(а) из комнаты: Replaced by new connection
[14:17:55] sevenov вошёл(а) в комнату
[14:34:22] ygrek вышел(а) из комнаты
[14:34:25] ygrek вошёл(а) в комнату
[14:50:52] daapp вошёл(а) в комнату
[14:59:36] gds вышел(а) из комнаты
[15:11:38] michael.holub вошёл(а) в комнату
[15:13:03] michael.holub вышел(а) из комнаты
[15:25:00] <Typhon> в таком духе кто-нибудь делает http://dumpz.org/14279/ ? или не стоит овчинка выделки?
[15:26:56] <f[x]> посмотри фантомные типы
[15:27:55] <f[x]> очевидно что можно такую проверку обойти просто сохранив старое значение
[15:29:07] <f[x]> плюс есть подозрение что в реальном коде это будет больше мешать.. надо пробовать
[15:30:48] Typhon вышел(а) из комнаты
[15:30:50] <f[x]> есть языки/системы типов (linear) в которых значение можно использовать один раз - там такие scope-гарантии делаются
[15:31:29] Typhon вошёл(а) в комнату
[15:32:39] <Typhon> так фантомные типы пока в хаскель вики увидел, спасибо, посмотрю попозже. про "сохранив старое значение" не очень понял что-то, что имеешь в виду? а в реальном коде как это мешать может, если ты будешь использовать всегда функции новые? типа let sendto = let s = socket ... in send s ... ? чего я не понимаю? :)
[15:33:38] <f[x]> http://ocaml.janestreet.com/?q=node/11
http://camltastic.blogspot.com/2008/05/phantom-types.html
[15:34:13] <Typhon> первый линк нагуглил, да. спасибо
[15:34:43] <f[x]> let s = socket in
send s ...;
let s2 = close s in
send s ... (* упс *)
[15:35:45] <f[x]> а в реальном коде даже такой прямой последовательности действий не будет, сокет будет хранится где-то в переменной. а тип у переменной один.
[15:36:49] <Typhon> ясно, ладно, почитаю про фантомные типы :)
[15:38:08] <f[x]> фантомные типы не решают основную проблему, они просто позволят избавиться от конструкторов (меньше боксинга в рантайме)
[15:40:41] <Typhon> а какие тогда есть способы избавиться от ошибок таких глупых в рантайме? хочется, чтобы компилятор такое ловил.
[15:42:03] <f[x]> в рамках камловской системы типов - никак
[15:42:40] <f[x]> http://en.wikipedia.org/wiki/Uniqueness_typing
[15:44:29] <f[x]> с другой стороны подход типа предложенного может работать на практике если не ставить целью его обойти
[15:45:21] <f[x]> ворнинги this expression should have type unit будут помогать обращать внимание
[15:46:02] <Typhon> в моем предположении, это скорее средство избежать тупых ошибок, так что цели обойти не должно быть, но показанный выше код вполне реален, даже без злого умысла, кмк. :)
[15:48:13] <f[x]> угу
[15:56:40] Dema вышел(а) из комнаты
[16:27:27] <ermine> f[x]: щас архивирую базу маркова для talks@, там 300mb
[16:38:23] f[x] вышел(а) из комнаты: Logged out
[16:38:40] f[x] вошёл(а) в комнату
[17:02:23] geovit вышел(а) из комнаты
[17:20:29] gds вошёл(а) в комнату
[17:24:43] iNode вышел(а) из комнаты
[18:58:08] Typhon вышел(а) из комнаты
[19:02:12] animist вышел(а) из комнаты
[19:02:17] <f[x]> ненавижу отсутствие ворнинга при неполном матчинге record
[19:02:27] animist вошёл(а) в комнату
[19:04:17] <ermine> а как матчить рекорд?
[19:05:19] <f[x]> let {x=a} = {x=1;y=2};;
[19:05:33] <f[x]> э, это только у меня сообщения по два раза приходят?
[19:06:00] <ermine> оно ж ругается
[19:06:32] <f[x]> как?
[19:09:07] <ermine> Error: Some record field labels are undefined: env_message
[19:09:34] <ermine> ну это не матчинг, а биндинг
[19:10:46] <ermine> тебя тут два аккаунта, а реально живой один
[19:10:56] f[x] вышел(а) из комнаты: Logged out
[19:11:01] <ermine> поэтому получаешь за двоих
[19:11:01] ygrek вышел(а) из комнаты
[19:11:12] <ermine> вот отвалился труп
[19:11:13] f[x] вошёл(а) в комнату
[19:11:26] <f[x]> тест
[19:11:29] <f[x]> ага, ок
[19:11:49] <f[x]> $ ocaml -w A
Objective Caml version 3.11.1
# type x = { x : int; y :int };;
type x = { x : int; y : int; }
# let {x=a} = {x=1;y=2};;
val a : int = 1
[19:12:29] <ermine> занятно
[19:13:06] <ermine> хотя наверное бесполезная фича
[19:13:23] <ermine> а может и нет, если вместо a поставить значение
[19:19:36] <f[x]> по всей видимости в 3.12 будет ворнинг для такого и синтаксис let {x=a;_}
[19:23:26] <gds> фича не бесполезная. когда записи передаются как параметры, это удобно. надоело через точку обращаться к полям, когда нужно просто их чтение.
[19:43:49] f[x] вышел(а) из комнаты
[19:51:07] ermine медитирует над костями и черепом сульци
[19:51:17] <ermine> там вырисовывается какое-то дикое дерево хуков
[19:51:35] <ermine> дикое - это плохо..
[19:55:37] daapp вышел(а) из комнаты
[19:58:18] <gds> достаточно сложная система почти всегда представляется сложными структурами данных. Смотреть надо на конкретику. А тут нужно видеть всю картину. Так-то.
[20:23:47] sceptic вышел(а) из комнаты
[20:23:58] sceptic вошёл(а) в комнату
[20:24:05] sceptic вышел(а) из комнаты
[20:38:30] <ermine> gds: если решение работает - то это правильное решение?
[20:40:38] <gds> ermine: не всегда. Это -- рабочее решение. А "правильное решение" -- неоднозначная штука. То оно есть, но, если вдруг требования изменились, то сразу его нет.
[20:41:11] sceptic вошёл(а) в комнату
[20:52:27] <ermine> у меня проблемы в основном из-за того, что надо "не вызывать дважды в смежных областях"
[20:58:39] <gds> это как? Если предполагаешь, что здесь присутствующие смогут чем-нибудь помочь, расскажи.
[21:08:42] <ermine> пакет из джаббера, особенно из мука, может содержать в себе данные из разных областей познания, сам пакет - это смежная область этих познаний
[21:09:25] <gds> "не вызывать" -- в смысле, не вызывать функцию, выполняющую сайд-эффекты, или не проводить одно и то же вычисление несколько раз?
[21:10:09] <ermine> последнее
[21:10:17] <gds> lazy!111
[21:10:57] <ermine> поэтому я строю систему хуков чтобы обеспечить гарантию, что калбэк в данном контексте вызовется не более одного раза
[21:11:50] <ermine> gds: вот ты видел команду у бота .ping, он по-разному интерпретирует аргумент, если его вызывать в контексте мука или вне контекста мука
[21:12:22] <ermine> если не следить за этим - команда вызовется дважды
[21:12:44] <ermine> причем оба раза вполне правильно - каждый вызов выполнится в своем контексте
[21:13:54] <ermine> но для команд типа пинга я нашла, как привязать к контексту обработку аргумента
[21:14:33] <ermine> но есть другие команды, где пока проблемы остались
[21:14:51] <ermine> из всех ботов такой уровень IQ в сульци появился первым
[21:19:06] <gds> можно параметризовать колбэки -- "выполнять в приватном режиме" / "в muc" / "в обоих одинаково". Но подожди. Если уровень появился только у одного бота, ничего не делай вообще. Подожди, пока появится у других, и посмотри, можно ли под общую схему зачесать всё.
[21:19:20] iNode вошёл(а) в комнату
[21:24:36] <ermine> gds: это плохо, поскольку мук - это плагин сам
[21:25:11] <ermine> может меня как-нить наконец сгубит привязанность к плагинам и возможности оторвать код от сульци
[21:27:19] <gds> для такого исключительного плагина можно протащить информацию о его существовании не только на уровень данных (загружен/нет), но и на уровень типов программы (тип "когда вызывать колбэк").
[21:28:21] Mon вышел(а) из комнаты
[21:28:31] Mon вошёл(а) в комнату
[21:29:46] <ermine> имхо такой код, который у меня сейчас складывается, уже никто не поймет, даже местные gds и ygrek
[21:30:42] <gds> а ты пиши проще. для быдла чтобы. ну, для меня, например. я это буду ценить.
[21:32:35] ermine не знает, как проще
[21:33:47] <gds> если не знаешь, как проще, то значит текущий вариант вполне ок.
[21:35:44] ermine знает, что gds будет ворчать в первую очередь насчет наличия отсутствия документации и/или комментариев
[21:35:57] <ermine> а код - дело десятое
[21:44:54] <gds> ну нет же. всё не так. комментарии и документация нужны не в любом коде и не всегда.
разверну мысль чуть позднее (видимо через 12ч как минимум).
[21:47:51] ermine ожесточенно кодит код для рещения 2/3 новых проблем
[21:53:06] <gds> ermine: go go go! меня тут вызывают на ответственное и влажное задание, поэтому я прощаюсь с вашим чятиком на некоторое время, но я уверен: если пишешь, предварительно подумав короткое время (не сразу, но и не больше определённого значения, обычно порядка 1/5 .. 1/1 минуты), то код получается клёвым, а остальными вещами рулит обнаружение ошибок как посредством докручивания типизации, так и посредством отлова рантайм-ошибок. с двух сторон душить гадину!
[21:55:16] <ermine> влажное?
[21:55:43] gds blushes
[21:57:08] <ermine> надо налить бейлизу
[21:59:09] <gds> вариант.
/me думает даже про косячок-с в дорогу-с... А только и думать, что про парсинг и типизацию моей гадкой разметки, да про прелести жизни. Ни того, ни другого пока нет :)
[22:06:21] gds вышел(а) из комнаты
[22:07:34] <ermine> уже гадкой?
[22:25:50] ygrek вошёл(а) в комнату
[22:30:52] <ermine> ygrek: как там цепи маркова? не звенят?
[22:31:56] <ygrek> сейчас стяну базу и посмотрю скорость
[22:42:25] Kakadu вошёл(а) в комнату
[22:58:01] Kakadu вышел(а) из комнаты: I'm happy Miranda IM user. Get it at http://miranda-im.org/.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!