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

GMT+3
[00:13:17] ftrvxmtrx вышел(а) из комнаты
[00:13:35] ftrvxmtrx вошёл(а) в комнату
[00:26:44] ermine вышел(а) из комнаты
[00:57:37] Kakadu вышел(а) из комнаты
[02:08:04] ygrek вышел(а) из комнаты
[02:30:45] Typhon вошёл(а) в комнату
[02:31:38] <zert> http://caml.inria.fr/pub/docs/oreilly-book/
Proofreaders:
        Julian Assange
[02:32:19] Typhon уже видел и думает, что тёзка
[02:33:41] <komar> Кто это?
[02:34:15] <zert> викиликер
[02:36:52] <komar> Наши повсюду.
[02:42:00] Typhon вышел(а) из комнаты
[02:48:34] <zert> http://www.reddit.com/r/programming/comments/eg1m6/
[02:56:52] <zert> похоже, реально он
[03:04:55] zert вышел(а) из комнаты
[07:11:23] ermine вошёл(а) в комнату
[07:18:18] iNode вышел(а) из комнаты
[07:44:52] iNode вошёл(а) в комнату
[10:02:25] SerP вошёл(а) в комнату
[10:28:12] ygrek вошёл(а) в комнату
[10:48:27] komar вышел(а) из комнаты
[11:15:57] ygrek вышел(а) из комнаты
[11:56:41] <ermine> f[x]: а как сделаны переводы в mldonkey? какая концепция технологии?
[11:57:30] <f[x]> аналог gettext
[11:57:47] <ermine> надо позырить
[11:58:04] <ermine> а какой урл у гита mldonkey?
[11:58:34] <f[x]> лучше бери ocaml-text и всё
[11:59:09] <ermine> а он разве переводит? там вроде перекодировку пока только видела
[11:59:39] <ermine> в смысле iconv
[11:59:56] <ermine> а гит нашла в гугле
[12:00:14] <f[x]> а, перепутал, ocaml-gettext by le gall :)
[12:00:43] <ermine> давно пробовала его, не собирался
[12:00:58] <ermine> щас лень пинать галля, проку от него чота не видно
[12:01:52] <ermine> да и gettext для сайта - сомнительная штука
[12:02:14] <ermine> поменьше динамики
[12:02:20] <f[x]> почему? имхо нормально
[12:02:35] komar вошёл(а) в комнату
[12:02:46] ermine клонирует mldonkey
[12:03:28] <ermine> f[x]: вот если бы оно всё было lazy - было бы здорово :)
[12:07:57] <ermine> так в mldonkey явный клон gettext
[12:09:24] <ermine> и какой-то printf2
[12:09:32] <f[x]> ну дык, там много всяких клонов
[12:26:40] <ermine> ocaml-gettext судя по описанию потащит за собой camomile
[12:26:47] <ermine> ой уж не надо это
[12:28:11] <ermine> и ocaml-gettext более древен чем оазис
[12:30:35] <ermine> а, нет, это его сайт древнее чем он сам
[12:32:17] <ermine> в туду: - Try to be faster than gettext C library
[12:38:33] ftrvxmtrx вышел(а) из комнаты
[13:07:42] zert вошёл(а) в комнату
[13:17:09] Kakadu вошёл(а) в комнату
[13:28:53] ftrvxmtrx вошёл(а) в комнату
[14:41:54] ygrek вошёл(а) в комнату
[15:12:26] ygrek вышел(а) из комнаты
[15:32:15] Kakadu вышел(а) из комнаты
[15:59:26] <ermine> f[x]: а почему ты до сих пор сидишь на 3.11.2?
[16:03:06] <f[x]> потому что debian testing
[16:05:47] <ermine> в смысле 3.11.2 все еще тестируется?
[16:06:15] ermine опять чешется и раздумывает, не перейти ли опять на 3.12 или опять на чо-нить напорется
[16:07:18] <f[x]> не, в смысле это самая последняя версия которая есть в debian, а мне лень всё самому пересобирать
[16:09:41] <ermine> ну час на все потратить
[16:11:56] <ermine> в макоси он уже 3.12, в остальных везде старье, хнык
[16:16:02] Kakadu вошёл(а) в комнату
[16:24:09] <gds> кто-нибудь в курсе, умеет ли окамл работать с потоковым видео?  Если да, то куда смотреть?
[16:25:47] <ermine> в гугле видела
[16:26:04] <ermine> и даже с аудио
[16:26:38] <f[x]> не думаю, но наверное можно отталкиваться от биндингов из savonet, там gstreamer например есть
[16:27:25] <gds> f[x]: savonet в первую очередь поглядел, но видео сходу не нашёл.
[16:27:34] <gds> ermine: какие-нибудь ключевые слова в памяти остались?
[16:28:02] <ermine> gds: ocaml-theora
[16:28:13] <ermine> ocaml-vorbis
[16:28:54] <ermine> древнюшие биндинги
[16:29:01] <ermine> как и все остальное в камле
[16:29:24] ermine пошла выкапывать из пыльных каталогов чахлый проект polyglot
[16:29:47] <f[x]> есть ещё загадочный cacaoweb
[16:32:57] ermine посмотрела на xstrp4 и поплевалась
[16:43:43] <gds> мда, в общем, печально.  Но буду копать.
[17:34:42] iNode вышел(а) из комнаты
[18:48:24] <gds> "For the other ports, we are looking for volunteers to compile and publish the binaries."
ну зачем он так провоцирует меня...
[18:49:28] <gds> если собирать оверблд без ocamlnet, без батареек, без deriving, без omake (вроде; а там в зависимостях всякое pa_do и что-то ещё), то это же говно какое-то получится, а не оверблд.
[18:54:14] <f[x]> это про камль для винды речь?
[18:54:17] <f[x]> в первой цитате?
[18:56:58] <gds> да, про mingw, msvc, но не про cygwin.
[18:57:08] f[x] может раздавать hudson билды 3.12 под сygwin+mingw
[18:57:17] <f[x]> и планирую под msvc тоже
[18:57:37] <f[x]> само камло-то собрать не очень сложно
[18:58:21] <gds> дык отпиши, вдруг попрёт его.
само -- да, факт, несложно.
[19:04:19] <gds> у меня тут какое-то дикое количество задач сразу.  Думаю, что с постгресом делать.  Логика простая -- вызывать хранимую процедуру, опционально фиксировать транзакцию.  Но что брать -- не знаю.  PG'OCaml -- не нравится тем, что требует субд при компиляции, я считаю это неправильным.  Там кто-то сделал монадные биндинги, реализуя протокол руками, я это тоже считаю неправильным, так как "точка доверия" -- сишная библиотека, libpq или как там его.  Вот это -- http://hg.ocaml.info/release/postgresql-ocaml -- вроде похоже на верную штуку?
[19:06:06] <SerP> А что плохого в наличии субд при компиляции?
[19:06:30] <SerP> его можно и не юзать кстати, если не использовать егошный препроцессор
[19:06:52] <SerP> т.е. не потребуется субд при компиляции
[19:07:04] <SerP> но с субд приятнее из-за типизации
[19:07:22] <SerP> к тому-же он легко в lwt вставляется
[19:08:02] <SerP> у нас руница сервачок под lwt который очень активно pg исполльзует и без всяких системных тридов, красота за 5 минут
[19:12:31] <ermine> а какая цена у камлевого lazy, если их дохрена?
[19:21:50] <gds> SerP: при компиляции программы субд может быть ещё не поднята, в ней может быть неправильная/отсутствующая схема, она может быть недоступна.  Если уж и сверяться с субд по поводу схемы, то тут правильнее подход sqlgg.
[19:23:58] <f[x]> gds: это ты уже придираешься, тестовую базу поднять всё равно надо, неудобство да, но не такое уж критичное
[19:24:46] <gds> ermine: цена -- проверка тега (вычислено или нет), и если вычислено, то pointer dereference.  В целом, не дорого.  Только если они действительно везде, неплохо бы, чтобы компилятор оптимизировал.  Так как окамл это не умеет, лучше не увлекаться.
Но это я рассказал про цену только со стороны производительности.  Главные цены -- другие.  1. предсказуемость сайд-эффектов, 2. предсказуемость вычислений (зацикливаемость, проц, память -- хз когда это будет использовано в случае, когда всё ленивое).
[19:26:06] <gds> f[x]: а что делать, если будем запускать программу супротив другой схемы субд -- оно нормально будет?  например, если table на view заменили, или если оказалось, то не числовой тип должен быть, а символьный?
[19:26:44] <f[x]> ну дык, фейл, фиксить или схему или программу, это как бы цель такая, или не?
[19:26:51] f[x] off
[19:46:25] <ermine> gds: хочу воткнуть lazy в нечто а-ля gettext
[19:46:51] <ermine> чтобы не перевычислять переведенное с теми же аргументами
[19:48:01] <ermine> правда не знаю сколько таких выражений вылезет
[19:48:19] iNode вошёл(а) в комнату
[20:00:39] <gds> ermine: прочитал про gettext.  Не совсем понял, что именно ты хочешь лениво вычислять.
[20:08:46] SerP вышел(а) из комнаты
[20:09:13] <gds> ermine: в целом, я считаю, операция форматирования в текст и склеивания текста -- очень дешёвая для того, чтобы мемоизировать её результаты глобальным образом.  Лучше дать пользователю возможность сделать это явно, удобным образом, я считаю.
[20:10:50] Kakadu вышел(а) из комнаты
[20:11:27] Typhon вошёл(а) в комнату
[20:56:47] ftrvxmtrx вышел(а) из комнаты
[21:51:29] arhibot вошёл(а) в комнату
[22:15:02] ygrek вошёл(а) в комнату
[22:17:21] <ygrek> > Так как окамл это не умеет, лучше не увлекаться.
мусорщик вроде бы умеет заменять ссылки на вычисленные ленивые значения сслыками на сами значения
[22:20:59] komar вышел(а) из комнаты
[22:21:13] ermine не поняла, пчу
let f a = print_endline "hi!"; a + 1 in let lazy_f a = lazy (f a); повторить несколько раз Lazy.force (lazy_f 1) и каждый раз оно напечатает hi

[22:21:52] ermine раньше никогда не использовала камлевое lazy, если чо
[22:24:39] <gds> ygrek: > мусорщик вроде бы умеет заменять ссылки на вычисленные ленивые значения сслыками на сами значения
Это-то да, умеет, верно.  Плюс, подглядел, компилируется неплохо.  Я имел ввиду то, что некоторые штуки нужно вычислять сразу, фактически заменяя lazy expr на Lazy.from_val (вычисленное expr).
[22:25:30] <gds> ermine: каждый раз при вызове lazy_f ты создаёшь ленивое значение, и с каждым его вычислением связано print_endline.
[22:26:28] <gds> ermine: опиши самый тупой пример того, что нужно, и подскажу кодэ (если в сон не сморит).
[22:27:38] <ermine> gds: не, я сначала понять хочу, что это такое, я же раньше его не юзала
[22:28:15] <ermine> gds: ну если заменить на printf - тоже печатает, а мне как раз sprintf/kprintf/bprintf нужно будет
[22:29:15] <ermine> gds: я так понимаю, что части этого sprintf'a все же можно засунуть в lazy :)
[22:30:09] <gds> (могу упростить случайно.)  lazy <expr> == синтаксический сахар для Lazy.from_fun (fun () -> <expr>).  Lazy.t -- что-то наподобие ref ([Deferred of (unit -> 'a) | Evaluated of 'a]).  Lazy.force -- вычисляет, заменяя Deferred на Evaluated, если это не сделали за него.  Вот и всё.
[22:32:35] <ermine> gds: ну printf fmt a, где fmt и a не меняются, то что тут меняется?
[22:33:39] <gds> создаёшь ведь новое значение в lazy_f (посредством конструкции "lazy (...)")  -- значит кагбэ намекаешь, что меняется что-то.
[22:35:32] <ermine> gds: а как сделать, чтобы не менялось?
[22:36:07] <gds> создавать ленивое значение посредством "вызова" "lazy expr" один раз.
[22:37:05] <ermine> а вот let a = lazy (print_endline "qq") in Lazy.force a не пересоздает каждый раз
[22:37:20] <ermine> и печатает один раз
[22:37:23] <ermine> хмм
[22:37:53] <gds> оно обязано печатать не более одного раза, ибо и lazy, и force в одном экземпляре.
[22:38:32] <ermine> ну хоть пять force
[22:39:12] <gds> тогда -- один раз, потому что один раз вычислило a, и поняло, что оно равно ().  посмотри про "Lazy.t -- ... ref", пойми.
[22:39:40] <ermine> ааа
[22:40:00] <ermine> gds: спасибо, проникло наконец в мозг
[22:40:07] <gds> глобальный совет, независимо от того, что именно делаешь: в реальном коде использование одновременно сайдэффектов и ленивых значений -- опасно.  Багами, непредсказуемостью, трудностью в переписывании.
[22:41:43] ftrvxmtrx вошёл(а) в комнату
[22:42:25] <gds> ermine: локальный совет, если делаешь что-то с неясным порядком вычислений и с возможными циклами: бери мою http://bitbucket.org/gds/ocaml-lazy-labelled :)
[22:45:44] <ermine> склонировала
[22:45:51] <ermine> завтра продолжу изучение
[22:46:07] <ermine> а еще надо бы освежить camlp4, используя труды jaked
[22:48:11] <ermine> gds: а для чего ты это делал?
[22:50:02] <ermine> ааа, early
[22:51:02] <ermine> ой нет, там комменты под репами, а не над
[22:51:13] <ermine> но в elinks забавно выглядит
[22:52:05] <gds> ermine: не, конкретно сейчас тебе навряд ли нужно это -- скорее знать, что такое есть.
[22:52:48] <ermine> буду знать
[22:53:06] <ermine> но все же lazy для парсера с бэктрейсами все же хорош наверное
[22:53:45] <gds> ну не знаю, в целом хорош, наверное.  Мне он для хитрожопого преобразования грамматики понадобился.
[22:56:19] <gds> кстати вот, earley parser -- не идеал нифига.  Просто он может парсить то, что мне надо, и имеет средне-говнистую асимптотику, хорошую в простых случаях.
[22:57:37] <ermine> gds: а есть пример текста, который оно парсит?
[23:02:28] <gds> ermine: любая контекстно-свободная грамматика парсится (это меня изначально подкупило, признаюсь).  То есть, такая, где грамматика не меняется при поступлении новых символов/токенов.  С другой стороны, на каждом шаге доступны результаты частичного парсинга (т.е. случай "а если вдруг сейчас EOF?").  И результатов может быть много, зависит от грамматики.
[23:05:07] <ermine> ну CF - она скучная грамматика
[23:05:26] <ermine> расшифруешь один терм по цепочке...
[23:10:48] <gds> ну как сказать "скучная".  1. не все грамматики можно задать в классических ll/lr/lalr/peg, 2. а если многозначная?  earley/peg/glr только, ну и самописное.  3. многозначные трудно "по цепочке", а если и делается так, то "тупи-тормози" получается.
[23:38:43] <ermine> gds: я имела в виду, что в CF слева от стрелки всегда один нонтерминал
[23:38:56] <ermine> так что там по цепочке
[23:39:07] <ermine> хоть сверху вниз, хоть снизу вверх
[23:39:47] <ermine> надо почитать дальше книжку про парсинг
[23:43:48] <ermine> а в camlp4 до сих пор нельзя смешивать два и более синтаксивов на одном файле?
[23:48:54] <gds> как я помню, CF -- независимость грамматики от контекста, т.е. грамматика задана явно.  А вот про нетерминалы ничего не помню.
Про camlp4 -- можно, если осторожно, насколько я понял.  То есть, заставить два расширения работать вместе скорее таки можно, если они синтаксически совместимы.
[23:50:53] <ermine> gds: ну контекст как раз задается слева от стрелки, судя по первым главам той книжки
[23:52:14] <ermine> gds: в CS контекст задается AB -> ab
[23:52:28] gds вышел(а) из комнаты
[23:52:43] <ermine> сбежал :)
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!