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

GMT+4
[00:16:41] komar вышел(а) из комнаты
[00:16:47] komar вошёл(а) в комнату
[00:46:31] komar вышел(а) из комнаты: Replaced by new connection
[00:46:31] komar вошёл(а) в комнату
[00:49:37] ftrvxmtrx вошёл(а) в комнату
[01:01:33] <gds> bobry: да, FromJson -- это, как обязаловка, очень не ок.  У меня, с помощью кадастра, будут возможности: 1. использовать "структурную сериализацию" -- например, по умолчанию, туплы -- массивы из json-значений, записи -- объекты, варианты -- массивы ["конструктор" ; аргументы], 2. использовать json-static для явно-указанной сериализации, 3. использовать явную функцию сериализации, например, через явное построение через json-wheel.
но тут и json-static слегка проигрывает, хехе
[01:03:35] <gds> (ну, п.2 -- явную и сгенерированную, имею ввиду, а п.3 -- сделанную пользователем из говна, спичек и json-wheel.)
[01:09:26] Typhon вошёл(а) в комнату
[01:18:29] Typhon вышел(а) из комнаты: Replaced by new connection
[01:18:30] Typhon вошёл(а) в комнату
[01:33:10] dzhon_over вышел(а) из комнаты
[02:10:57] ftrvxmtrx вышел(а) из комнаты
[02:13:15] ftrvxmtrx вошёл(а) в комнату
[02:29:24] ftrvxmtrx вышел(а) из комнаты
[03:03:57] gds вышел(а) из комнаты
[04:15:53] Typhon вышел(а) из комнаты
[06:43:42] bobry вышел(а) из комнаты
[06:44:04] bobry вошёл(а) в комнату
[07:51:17] ermine вошёл(а) в комнату
[09:36:05] gds вошёл(а) в комнату
[11:00:37] bobry вошёл(а) в комнату
[11:25:26] <f[x]> > tercium non gratum
латиняне-недоучки в чате
[11:25:26] klapaucius вышел(а) из комнаты
[11:27:58] <f[x]> bobry: думаю в перспективе мы можем такие вещи по-разному реализовать - ocurl либо ocamlnet и во время сборки выбирать то что установлено. если ничего нет - то юзать curl/wget как fallback. Для начала вообще неважно.
[11:29:34] <bobry> ну да
[11:30:00] <f[x]> gds за полчаса успел пропиарить три свои проекта
[11:30:22] <bobry> :)
[11:30:37] <f[x]> кстати с typename если получится вариант - изменения минимальные, ща проверю, вчера придумалось как с работы ушёл
[11:31:34] <gds> f[x]: вроде только оверблд и кадастр.  нихпм -- это не столько мой, сколько "коммунальный".
[11:32:16] <f[x]> parmap
[11:32:34] <gds> это не мой, это вроде жамбончек.
[11:32:42] <f[x]> а
[11:33:38] <f[x]> во блин, typename вне темплейтов нельзя использовать. тупой с++
[11:39:04] <gds> кстати, хак придумался.  сразу после #include <caml/чототам.h> делаем typedef caml_value value.
[11:39:11] <gds> тьфуты, ялохе.
[11:39:15] <gds> отбой.
[11:43:04] <f[x]> как же меня бесят табы в коде
[11:43:15] <bobry> hell yeah .. :)
[11:47:30] <f[x]> gds, Kakadu: https://github.com/Kakadu/lablqt/commit/f76d19f6edfa283ac701b2c52f0c67a27a1ff269
[11:48:40] <gds> f[x]: "::макрос"???
[11:50:08] <f[x]> ага :)
[11:50:40] <f[x]> макрос раскрывается не глядя на :: и получаем ::value local1 = ... итд - то что надо
[11:50:58] <f[x]> ну хак
[11:51:03] <f[x]> ну и что
[11:52:53] <gds> лёгкое изменение CAMLlocal -- и надо будет снова вспоминать о проблеме и ещё раз думать над её решением.
[11:53:49] ftrvxmtrx вошёл(а) в комнату
[11:59:21] <f[x]> это ж как его надо изменить?
[11:59:45] <f[x]> ну вообщем да
[12:10:20] <f[x]> https://github.com/bmeurer/ocaml/commit/6b1ab166ac0b8f54e08c16ca08f3ad900307d49c
лол, лягушатники делают сообщения об ошибках читабельным для людей o_O не верю своим глазам
[12:12:02] <bobry> так это ш не официальный репозиторий
[12:12:15] <bobry> кстати интересно что мешает inria перенести свой репки на gh
[12:12:22] <bobry> и выпилить уже богомерзкий мантис
[12:12:42] <f[x]> мантис - ок
[12:12:52] <f[x]> это миррор официального
[12:13:14] <f[x]> нафига нужен гитхаб если у конторы есть свой сервер?
[12:14:46] <bobry> легче следить за изменениями
[12:15:48] <f[x]> ы, т.е. added value гитхаба это рассылка уведомлений о коммитах?
[12:16:01] <f[x]> та ну, если ты над этим проектом работаешь - то и так всё увидишь
[12:16:09] <f[x]> а если не работаешь - то оно нафиг не надо
[12:16:41] <f[x]> а все эти социальные штучки - смехота
[12:17:03] <bobry> окей, до кучи — pull requests вместо дифов в мантисе, человекочитаемые issues
[12:17:28] <f[x]> нормальные люди френдят людей и лайкают фотачке, а задроты френдят код и лайкают патчи
[12:18:31] <bobry> речь то не об этом
[12:19:14] <f[x]> pull requests это просто "синтаксический сахар" над фичей гита. ну git лучше svn - об этом речь не идёт.
[12:19:22] <f[x]> а мантис - вполне ок
[13:01:41] shaggie вошёл(а) в комнату
[13:10:36] Kakadu вошёл(а) в комнату
[13:12:01] Typhon вошёл(а) в комнату
[13:17:38] <Kakadu> похожи мои вчерашние действия придется похерить: f[x] уже всё пофиксил
[13:18:31] <gds> ... криво
[13:20:57] <gds> господа окодемики, наресуйте пожалуйста сигнатурку для fold по этой структуре: type trie 'k 'v = (option 'v * list ('k * trie 'k 'v))
[13:21:59] <f[x]> Kakadu: если у тебя более прямое решение - то коммить его взамен
[13:23:03] <f[x]> gds: яотказываюсьэтопарсить.jpg
[13:26:04] <bobry> gds: ты хочешь обойти все дерево фолдом?
[13:27:37] <Kakadu> навскидку
folf: trie _ _ -> f:('a -> option 'v -> list ('k * 'a) -> 'a) -> 'a
[13:28:02] <gds> f[x]: ты же не окодемик, ты нормальный, вопрос не к тебе :]
[13:28:03] <Kakadu> fold: trie 'k 'v -> f:('a -> option 'v -> list ('k * 'a) -> 'a) -> acc:'a -> 'a
[13:28:08] <gds> bobry: да, хочу!
[13:28:27] <f[x]> Kakadu: ха, если бы так просто
[13:28:45] <gds> Kakadu: это фолд нерекурсивный, для list ('k * _) надо вызывать его ещё раз.  хехе.
[13:29:11] <bobry> gds, может тебе сначала dfsом собрать плоский список узлов? :)
[13:29:15] <f[x]> там первая функция фолда должна возвращать функцию для обхода следующего уровня - как-то так
[13:29:20] <f[x]> читеры!
[13:29:23] <bobry> а потом по ним сжделать фолд
[13:29:37] <bobry> ну или bfsом если ты хочешь по "уровням"
[13:30:48] <Kakadu> f[x]: ну тогда так:
fold: trie 'k 'v -> f2:('k->'b->'b) -> f:('a -> option 'v -> 'b -> 'a) -> acc:'a -> 'a
[13:31:17] <Kakadu> дополнительная функция для фолда списка
[13:31:32] <gds> bobry: спасибо, но это уже есть, мало.
[13:32:46] <gds> Kakadu: а ведь близко к истине.  фишка в том, что нужно два разных "типа результата", для сборки нижнего уровня один тип и для сборки значения+уровня другой тип.
[13:32:50] gds afk
[13:33:14] <bobry> `Fun | `Leaf?
[13:38:08] Typhon вышел(а) из комнаты
[13:38:44] Typhon вошёл(а) в комнату
[13:41:09] bobry вышел(а) из комнаты
[13:42:03] bobry вошёл(а) в комнату
[13:51:04] ftrvxmtrx вышел(а) из комнаты
[13:51:08] bobry вышел(а) из комнаты
[13:52:46] ftrvxmtrx вошёл(а) в комнату
[13:56:53] Typhon вышел(а) из комнаты
[13:58:50] Typhon вошёл(а) в комнату
[14:10:39] shaggie вышел(а) из комнаты
[14:11:55] bobry вошёл(а) в комнату
[14:13:05] shaggie вошёл(а) в комнату
[14:59:50] komar вышел(а) из комнаты
[15:04:30] klapaucius вошёл(а) в комнату
[15:21:34] ftrvxmtrx вышел(а) из комнаты
[15:24:11] ftrvxmtrx вошёл(а) в комнату
[15:32:56] <bobry> nih! nih! nih! где же ygrek ..
[15:33:50] <gds> nih!  уяневидно.
[15:44:09] <gds> f[x]: кстати, реально, пробегись по спеке, выдели 5..30 минут времени.
[15:52:11] <bobry> кстати очень хочется в nih поюзать классы для пакетов
[15:56:39] Kakadu вышел(а) из комнаты
[16:00:26] Kakadu вошёл(а) в комнату
[16:02:17] <f[x]> что за классы?
[16:06:00] <bobry> ну просто камловские классы
[16:06:08] <bobry> вместо модулей
[16:14:53] <gds> а вдруг всё обойдётся простыми туплами, а то и записями?  классы -- не серебрянная пуля, отнюдь.
[16:15:26] <gds> кроме того, даже с классами порой _необходимы_ модули, я уж не говорю про случаи, когда модулями стократ удобнее.
[16:15:29] <gds> поэтому думать надо.
[16:31:35] <bobry> ну да, просто у нас явно будут общие действия для каждого типа build / install например
[16:31:51] <bobry> в любом случае — ждем спеки :)
[16:35:00] <Kakadu> я себя опять подловил на том,что вначале пишу, потом думаю
[16:35:09] <Kakadu> в этот раз на extern template функциях
[16:36:26] savikov вошёл(а) в комнату
[16:36:41] <savikov> люди люди
[16:36:46] <gds> bobry: общие действия -- будут, факт.  Однако зачастую проще оформить их как "build : package -> unit" / "install : package -> unit", где package -- что-нибудь простое и тупое типа записи или индуктивного типа данных.  Я использую классы-объекты не для понтов, если чо.
[16:36:56] <savikov> кто интересовался темой лисп просвятите пожалуйста :З
[16:37:00] <savikov> *как с ним дела обстоят
[16:37:30] <f[x]> savikov: в lisp@
[16:37:41] <savikov> дада, знаю
[16:37:51] <savikov> уже который день захожу не добавляют
[16:37:59] <savikov> а оптисать модерам-админам не удаётся, запрет
[16:38:28] <savikov> так бы я сдесь про это не спрашвиал
[16:39:22] <Kakadu> savikov: зайди в c_plus_plus и пни Fornever'a
[16:39:38] <gds> savikov: я интересовался темой лисп.  Дела с ним обстоят, но нетипизированно, что не ок.
[16:40:40] <savikov> http://www.nestor.minsk.by/sr/2003/07/30710.html
[16:40:46] <savikov> мне вот эта статья оч понравилась
[16:40:53] <savikov> в унвиере читал не отрываясь :З
[16:41:03] <savikov> мож кому интересно будет...
[16:41:27] <f[x]> не отрываясь, это в смысле распечатал и склеил конец с началом?
[16:41:36] <Kakadu> вопрос: реально ли наложить на человека некоторые ограничения на его парсер на комбинаторах, чтобы на основе ast генерить парсер другого рода (рек.спуск, glr, lalr etc.)?
[16:41:58] <f[x]> Kakadu: это вопрос на миллион
[16:42:15] <f[x]> только исходный материал это не парсер, а грамматика
[16:42:55] <f[x]> учти, что если грамматику можно парсить разными парсерами, то это значит что грамматика не использует фичи ни одного из этих парсеров
[16:43:01] <Kakadu> собственно меня просят в фадиезе намутить с аттрибутами чтобы по коду тела функции генерить парсеры разного рода
[16:43:04] <f[x]> т.е. у неё уровень будет очень низкий
[16:43:38] <f[x]> разные типы парсеры парсят грамматики разных уровней мощности
[16:45:03] <Kakadu> f[x]: например есть набор парсер-функций которые что-то парсят. Я их анализирую, и понимаю что вместо одной лучше сделать glr, вместо другой тупой рекурсивны спуск, а вместо третьей что-нить ещё
[16:46:25] <f[x]> в общем случае не получится, частный случай неинтересен
[16:46:51] savikov вышел(а) из комнаты: QIP 2010: Спокойное общение
[16:47:20] <Kakadu> f[x]: а можешь развернуть?
[16:47:21] <f[x]> ll glr lr lalr парсят разные (пересекающиеся) множества грамматик
[16:48:00] <f[x]> соответственно, в общем случае, для заданной грамматики нельзя сгенерить парсеры всех типов которые будут её распознавать
[16:48:02] <gds> ermine: ^^ вот видишь, кого про грамматики спрашивать надо!
[16:48:45] <f[x]> я не пилот, я только в F15 играл!
[16:49:26] <f[x]> это же как бы базовые вещи
[16:49:27] <Kakadu> f[x]: а я беру кусок грамматики, и делаю для него парсер одного вида, а остальное парсером другого вида!
[16:49:34] <f[x]> лол
[16:49:55] <f[x]> хочу на это посмотреть
[16:50:43] <Kakadu> меня препод пердупредил что это не так просто сделать
[16:57:20] <gds> честный препод попался.
[17:09:01] ermine уже многое спросила у гугля и сидит в полном унынии
[17:10:23] <ermine> у грамматиках ваших одна беда - контекстно-независимый лексер, что плохо годится в этой суетливой жизни
[17:11:24] <f[x]> делай КоЗаЛексер
[17:11:33] <f[x]> либо вообще без лексера - тоже невесело
[17:13:10] <ermine> не, для КЗ штучек хорошо подходит PEG, но надо иметь соображение как его с DFA скрещивать
[17:13:51] <ermine> а *LR очень годны для нормально формализованных штучек
[17:14:05] <ermine> правда, XML не входят в эту группу
[17:17:13] <ermine> поэтому наверное теперь надо бросаться в болотные волны генерации PEG парсеров - тут будет всё: хмл, хтмл, маркдаун и прочее, лишь бы не было левой рекурсии
[17:18:24] <ermine> f[x]: а ты чем страдаешь там?
[17:27:13] <f[x]> работой страдаю :)
[17:40:56] ermine надеется, что почитает еще чуть-чуть и наконец постигнет великие истины
[17:41:50] <f[x]> ermine: дорогу осилит пишущий, а не читающий
[17:46:17] <ermine> чукча не читатель, а писатель
[17:59:34] <ermine> я вот только из чтения поняла, что lookahead - это не обязательно токен, который входит в цепочку токенов, соответствующих какому-то правилу
[18:02:24] <ermine> а еще когда парсер вызывает токенизер - понятно, зачем, а когда токенизер сам вызывает парсер - уже малопонятно
[18:10:26] <ermine> ладно
[18:11:19] <ermine> плохо: когда нифига не знаешь, но всего в себя не втянуть быстро
[18:12:13] <ermine> а еще этот xsd тоже доставляет с беспорядочной рекурсией резолвинга
[18:12:32] <gds> про резолвинг я говорил, да.
[18:13:35] <ermine> она беспорядочная
[18:13:50] <gds> если нет циклов, моя схема отрезолвит.
[18:13:56] <gds> если есть, то покажет цикл.
[18:14:03] <ermine> по идее надо сначала собрать то что резолвится сразу, потом еще чуток и тд, худшее отложить в конец
[18:14:20] <gds> правильно, я про то же.
[18:14:50] <ermine> т.е. не получится форсить lazy по структуре
[18:14:56] <ermine> залипнет
[18:15:14] <gds> почему залипнет, если циклов нет?
[18:15:56] <ermine> а что такое цикл?
[18:16:10] <gds> a->b->c->a
[18:17:56] <ermine> оно может запросто a->b->c->d, где a хочет c, b хочет d (ну самый простой случай, если d не хочет сам a или b)
[18:18:57] <gds> ну вот, начнёт форсить a -- зафорсит c, начнёт форсить b -- зафорсит d.  если d захочет a -- ок, если d захочет b -- не ок, цикл.
[18:19:02] <ermine> а залипнет там где надо повторить поиск с начала списка после резолвинга некоторых вещей
[18:19:20] <gds> ну ленивые списки же есть.
[18:19:44] <ermine> поэтому я сначала проедусь по списку три-четыре раза прежде чем неудобоваримые структуры разбирать
[18:20:04] <gds> то есть, смотри, имеет ли структура циклы в самом конечном случае.  если да -- вроде ты не про то говорила раньше.  если нет -- лентяйка удобна тут.
[18:20:30] <gds> (либо я не про то слушал.)
[18:20:37] <ermine> все поиски однократные, вычисления тоже однократные, просто никакого порядку нет
[18:21:16] <gds> а взаимная рекурсия есть?
[18:21:24] <ermine> возможно разбор по xsd планировался с использованием xpath
[18:21:52] <ermine> а xpath - это поиск в структуре xml как в базе данных
[18:22:24] <f[x]> ermine: сделай двухпроходной на мутабельности (или ленивости) и всё
[18:22:45] <ermine> да и цельного представления структуры xsd в голове полностью пока нет
[18:23:27] <ermine> просто первые пробные запуски теста вываливаются из-за форвардных объявлений типов
[18:25:44] <gds> бери лентяйку как удобное тут средство, а потом посмотришь, хватает её или нет.  на худой конец, можно залентяить по-разному (например, сделать записи из первого куска описания и из второго, и форсить их на разных стадиях).
[18:27:50] <gds> у меня просто в "глозах как стикло" стоит ещё та картина разборок с громатиками, где это пригодилось, и ещё как.  Хотя, в целом, ленивый порядок вычислений не нравится.
[18:29:26] <ermine> ууу, грамматика - это просто, если там можно хранить только однородный список имен символов, а их тушки - в другой базе
[18:32:11] <gds> ну, в моём случае по правилу нужно было вычислить, может ли оно быть пустым (это когда ещё п-острадал с earley).  и было неинтересно разделять имена и правила.
[18:32:58] <ermine> в xsd в таком случае надо разводить кучу лейблов для sum и каждый вариант отдельно обрабатывать - где резолвилось сразу, а где - нет - указать что именно резолвить
[18:34:27] <gds> ermine, я твоей проблемой с конкретикой заниматься не буду, мне xsd до одного места.  мои идеи же можешь использовать как хочешь, тут я не против, и даже за: от их использования будет видно, какие из них хорошие, а какие нет.
[18:36:16] <ermine> да неубедительных идей у меня вагон и мелкая тележка
[18:37:14] <gds> убеждай их!  практикой очень ок.
[18:52:19] <gds> в общем, с моей задачкой получилось очень просто, http://paste.in.ua/3392/ (я специально развернул List.fold_left)
а теперь -- то же, но на объектах!11
[18:53:55] <ermine> с парсерами - у меня вообще в голове сейчас полное светопереставление, поэтому надеюсь хорошо погнать markdown и прихватить xml и таким образом последнее сильно ускорить
[18:54:11] <ermine> а после удачи с xsd так вообще фантастика будет
[19:07:53] <f[x]> PR#5411 вау, он читает наш чат телепатически?
[19:09:18] <ermine> эффект чатика
[19:46:03] <gds> не спрашивайте, что я курю, но внезапно посетила идея фолда над полутипизированными значениями.
[19:47:21] gds хлопает себя одной рукой
мать его, там и до map : ('a -> 'b) -> t 'a -> t 'b недалеко!

[20:07:05] ftrvxmtrx вышел(а) из комнаты
[20:31:51] ermine сходила в магаз за сникерсом и теперь подслащенно смотрит во вражеский парсер-генератор peg
[20:37:00] bobry вышел(а) из комнаты
[20:52:00] <Kakadu> я всё больше не понимаю как в lablqt у меня что-то вообще работало
[20:56:20] <ermine> Kakadu: у меня xsd тоже не работает щас
[20:57:20] <ermine> Kakadu: проект нормального размаха переписывается 5-8 раз, пока не выполнит хотя бы 70% потребностей в нем
[20:58:53] <ermine> Kakadu: так что можно тупить дальше :)
[20:59:17] <Kakadu> просто хочется получить наконец что-то работающее
[21:00:29] <ermine> получим
[21:00:38] <ermine> если тупить дальше
[21:02:04] ermine открыла в емаксе peg.ml и тупо застучала по кнопкам
[21:21:48] shaggie вышел(а) из комнаты
[21:38:34] Typhon вышел(а) из комнаты
[21:40:43] <ermine> эти исходники peg-генератора, которые смотрю - правильные, там нет ни одного коммента, не отвлекают
[22:15:38] <Kakadu> тут есть лажа, пробежитесь глазами плиз? http://paste.in.ua/3396/
[22:53:53] Typhon вошёл(а) в комнату
[23:36:53] ermine вышел(а) из комнаты
[23:40:15] <gds> Kakadu: есть лажа.  caml_copy_string(name) создаёт значение на куче, никуда его не сохраняет в roots (param, args, roots), а Some_val выделяет память и при этом с какой-то вероятностью запускает сборку мусора, которая собирает созданную строку.  после сборки мусора Some_val получает старый указатель и начинает неплохо так отсасывать.
[23:40:35] <gds> > roots (param, args, global roots)
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!