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:06:04] ftrvxmtrx вошёл(а) в комнату
[00:06:38] ermine вышел(а) из комнаты
[01:03:52] komar вышел(а) из комнаты
[01:18:03] komar вошёл(а) в комнату
[01:27:11] Kakadu вышел(а) из комнаты
[01:37:51] komar вышел(а) из комнаты
[01:39:10] Typhon вошёл(а) в комнату
[02:28:12] ftrvxmtrx вышел(а) из комнаты
[02:28:55] ftrvxmtrx вошёл(а) в комнату
[02:56:42] Typhon вошёл(а) в комнату
[02:56:48] Typhon вышел(а) из комнаты
[02:57:14] Typhon вошёл(а) в комнату
[03:09:24] mrm вошёл(а) в комнату
[03:09:30] mrm вышел(а) из комнаты
[04:07:41] Typhon вышел(а) из комнаты: Replaced by new connection
[04:08:01] Typhon вошёл(а) в комнату
[04:08:57] Typhon вышел(а) из комнаты: Replaced by new connection
[04:09:17] Typhon вошёл(а) в комнату
[04:16:44] komar вошёл(а) в комнату
[04:22:30] Typhon вышел(а) из комнаты
[04:37:41] komar вышел(а) из комнаты
[05:23:50] Typhon вышел(а) из комнаты: Replaced by new connection
[05:23:54] Typhon вошёл(а) в комнату
[05:29:28] Typhon вышел(а) из комнаты: Replaced by new connection
[05:29:48] Typhon вошёл(а) в комнату
[05:31:57] gds вошёл(а) в комнату
[06:02:56] letrec вошёл(а) в комнату
[06:30:48] Typhon вышел(а) из комнаты
[06:44:01] letrec вышел(а) из комнаты
[06:46:24] Typhon вошёл(а) в комнату
[06:49:57] Typhon вошёл(а) в комнату
[07:02:41] letrec вошёл(а) в комнату
[07:19:06] Typhon вышел(а) из комнаты
[07:27:18] Typhon вышел(а) из комнаты
[08:13:31] <gds> как правильно добавлять отладочную печать в итераты так, чтобы она выполнялась ровно тогда, когда итерат начинает обрабатывать данные: http://paste.in.ua/3561/ (ну и использование вида 'idbg "kva" >>= fun () -> ...').  А то чото вчера затупил на этом, забил болт и спать пошёл.  Однако вот, каждый раз, когда использую итераты по-серьёзу, что-то новое узнаю для себя.
[08:56:39] f[x] вышел(а) из комнаты
[09:48:05] f[x] вошёл(а) в комнату
[11:06:29] Typhon вошёл(а) в комнату
[11:09:50] ftrvxmtrx вышел(а) из комнаты
[11:17:30] Kakadu вошёл(а) в комнату
[11:31:37] ermine вошёл(а) в комнату
[11:36:36] dzhon вышел(а) из комнаты: Replaced by new connection
[11:36:36] dzhon вошёл(а) в комнату
[12:04:02] ftrvxmtrx вошёл(а) в комнату
[12:57:10] letrec вышел(а) из комнаты
[13:07:27] Andrey Popp вошёл(а) в комнату
[13:09:37] gds вышел(а) из комнаты
[13:16:00] bobry вошёл(а) в комнату
[13:16:27] <bobry> итераты-итераты, вон тут в yesod'e уже надстройку над итератами придумали ..
[13:21:22] gds вошёл(а) в комнату
[13:21:49] <gds> bobry: и чо там?  arrows?
[13:26:19] <ermine> любые надстройки опасны - они обрушиваются когда-нибудь
[13:27:12] ermine думает, как бы биндиться к результатам парсинга, а не просто вклиниваться в парсинг в виде actions
[13:27:28] <ermine> Kakadu: есть идеи?
[13:38:45] Kakadu затрудняется сказать что-то новое
[13:39:13] <ermine> хехе
[13:40:22] <gds> ermine: про надстройки -- ошибаешься.
[13:46:24] <bobry> gds: конудиты там :)
[13:46:33] <bobry> я еще не вникал, просто видел пачку постов в рсске
[13:47:44] <bobry> у х-ля конечно с либами по лучше камло будет .. есть например кошерная библиотека контейнеров, все окасакино почти http://www.haskell.org/ghc/docs/7.0.2/html/libraries/containers-0.4.0.0/index.html
[13:48:04] <bobry> только вот мерзкое IO и ленивость by default, брр
[13:58:11] <ermine> а с итератами нет проблем?
[14:01:32] <bobry> ermine: у кого?
[14:02:35] <ermine> у итератов
[14:07:19] ermine думает -- биндинг - это всегда калбэк?
[14:07:27] <ermine> gds: ?
[14:15:02] shaggie вошёл(а) в комнату
[14:18:46] <bobry> "idiomatic haskell" — traverse = uncurry (+) <<< snapshots &&& vhds
[14:26:18] ermine поняла, что нужна свобода и полная модульность
[14:29:16] <f[x]> свобода, модульность и равенство!
[14:31:17] <klapaucius> bobry: Это устаревший хаскель. В современном хаскеле пишут так: traverse = (+) <$> snapshots <*> vhds
[14:33:05] <ermine> это почему современный, так вроде давно пишут уже
[14:33:47] <f[x]> почему в нашем чятике обсуждают ц-ль?? мы в негодовании!
[14:33:56] <klapaucius> ermine: Так пишут лет пять. А стиль bobry десятилетней давности.
[14:34:15] <ermine> f[x]: завидуют выразительности хаскиля
[14:35:12] <ermine> а у нас до сих пор функции не инлайнятся
[14:38:36] Andrey Popp вышел(а) из комнаты
[14:40:02] Andrey Popp вошёл(а) в комнату
[14:40:31] <ermine> klapaucius: слушай, ты же знатный хаскелист, а чего тут сидишь - сам чонить на грязном камле пишешь???
[14:42:51] <klapaucius> ermine: Хуже. Я пишу на F#.
[14:43:42] <ermine> klapaucius: а зачем? работы на хаскелле совсем нет?
[14:44:42] <ermine> и как же живут на фишарпе, там ж camlp4 нет
[14:46:23] <klapaucius> ermine: У нас, в Сибирии и на F# практически нет - это так, случайная флуктуация. А на эфшарпе и нет никакой жизни - одно только существование.
[14:48:17] <ermine> в сибири всё всегда было сурово
[14:59:55] Andrey Popp вышел(а) из комнаты
[15:06:28] letrec вошёл(а) в комнату
[15:07:33] Andrey Popp вошёл(а) в комнату
[15:14:15] Andrey Popp вышел(а) из комнаты
[15:21:02] <bobry> klapaucius: merci, так намного лучше :)
[15:21:40] Andrey Popp вошёл(а) в комнату
[15:26:15] <ermine> bobry: ты так и не дочитал lyh, там было про функторщину
[15:26:46] <ermine> с этими смешными значками <$>, <+>
[15:27:34] ermine с негодованием конвертит рфцовские рэкгспы типа 1*6( alpha ) в peg
[15:28:07] <ermine> может ихнюю грамматику тоже распарсивать автоматом?
[15:28:45] <ermine> развели бардак в нотациях
[15:29:33] <ermine> оставили бы только asn.1
[15:29:59] <klapaucius> Давно уже надо было добавить idiom brackets в GHС, чтоб писать без всяких смешных значков traverse = (| snapshots + vhds |)
[15:32:07] <bobry> ermine: дочитал, во всю их использую уже
[15:32:18] <bobry> klapaucius: а как идиому выбирать? :)
[15:33:20] <ermine> klapaucius: такой синтаксис тоже ужасен
[15:33:27] <klapaucius> Также как и в случае с pure/<*> это простая синтаксическая трансформация.
[15:33:36] <bobry> ну да
[15:34:13] <klapaucius> ermine: А в чем его ужасность? Весь лифтнутый код в скобках. Саму по себе лифтнутость-то нужно как-то обозначить.
[15:35:12] <ermine> klapaucius: в нетрадиционности марать знакомые скобки дополнительными значками, чтобы оставить тот же смысл, но помочь интерпретатору осилить новый смысл выражения
[15:37:02] <ermine> а в результате - мало кто, читая исходник чужого кода, поймет чо это тут понаписали
[15:37:28] <klapaucius> Ну так все нормальные скобки заняты уже. Но эта проблема мне кажется перувеличенной.
[15:39:37] <ermine> у меня тут в парсинге в грамматике, глядя на то, что Kakadu приводил в качестве примера грамматики, там было <<list expr>> или типа того, означало складывать в список все что напарсит токен expr, я посмотрела и ужаснулась
[15:39:57] <klapaucius> Хотя, различать лифтнутый и нельфтнутый код, вообще говоря, не факт, что нужно. Можно считать что весь нелифтнутый в функторе Id
[15:40:06] <ermine> и оставила у себя только естественную вещь, такую как expr+, тоже складывает в список
[15:40:42] Andrey Popp вышел(а) из комнаты
[15:41:11] <ermine> и нет никаких пошлостей типа yaccовских $$, $1, etc
[15:41:48] <ermine> или a:StartList, взятый откуда-то еще, тоже неть
[15:42:36] <Kakadu> ermine: а чего ужасаться то? как ты ещё список чегонить будешь задавать в грамматике?
[15:42:38] <ermine> короче, минимум рисовальных нашлепок, и будет щастье
[15:43:38] <ermine> Kakadu: ну (expr1 expr2)+, куда более естественно?
[15:44:27] <ermine> оно и с expr* создает список, при необходимости, если expr возвращает не unit
[15:46:20] <ermine> у меня тут новый вопрос, в связи с парсингом урлов -- хочется иметь одну универсальную грамматику для двух задач, в одной надо получить отдельные части урла, в другой задаче - выдрать урл целиком из текста
[15:47:21] <ermine> проблема в том, что не хочется затрачивать хилые силы машинки на выделение отдельных частей урла во второй задаче
[15:48:39] <Kakadu> ermine: ну со списками это простой вариант. Но вот правила от правил это круто же, не?
[15:51:59] Andrey Popp вошёл(а) в комнату
[15:57:08] <ermine> Kakadu: правила от правил?
[15:58:38] <Kakadu> ла
[15:58:39] <Kakadu> да
[15:58:45] <Kakadu> параметризованные
[15:59:53] <ermine> Kakadu: трудно предположить, зачем они нужны
[16:00:27] <Kakadu> а зачем функции высшего порядка нужны?
[16:01:13] <ermine> Kakadu: калбэки
[16:01:32] Andrey Popp вышел(а) из комнаты
[16:05:12] klapaucius вышел(а) из комнаты
[16:24:50] <gds> ermine:
> биндинг - это всегда калбэк?
нет.
[16:40:17] Kakadu вышел(а) из комнаты
[16:41:48] ftrvxmtrx вышел(а) из комнаты
[16:42:24] Typhon вышел(а) из комнаты
[16:42:45] Typhon вошёл(а) в комнату
[16:51:26] bobry вышел(а) из комнаты
[16:53:32] <ermine> gds: а как без калбэка?
[16:53:59] <gds> ermine: прямо вызывать сишный код из окамла111
[16:55:02] <ermine> gds: а, ты воспринимаешь не тот смысл слова биндинга, мать многозначность за ногу
[16:55:34] <ermine> gds: я имела в виду прибить к переменной вычисленное значение
[16:56:48] <ermine> let - это функция биндинга?
[16:57:01] <gds> let var = val in expr -- без.  остальные подобные конструкции, типа (fun var -> expr) val -- с.
[16:57:03] ermine наивно улыбается
[16:57:21] <gds> let -- привязка, но специфичная.
[16:58:36] <ermine> gds: ну вот, обрабатывем сложную структуру, внешняя прога хочет получить результат какой-то мелкой части этой обработки, какие есть способы удовлетворить эту страсть?
[16:59:11] <ermine> подать обработчику калбек, например
[17:00:26] <gds> ermine: 1. отпрофайлить и понять, что на реальных задачах проще вытащить всё, а там выделить нужное.  вытащить, например, в тупой список.  2. а так -- callback, да, ну или альтернативы, но если ты плюёшься от них, то альтернативы в плане производительности не лучше.
[17:00:54] <ermine> вот если бы итераты еще не придумали бы, жить было бы проще - парсеру было бы достаточно только указывать позиции в строке в результатах, а потом внешняя функция могла бы выбрать нужный нетерминал и по координатам вычислить лексему, соответствующую ей, если надо
[17:01:16] <ermine> примерно как в пакрате
[17:03:45] <ermine> мжет, на Новый Год Дед Мороз снизоидет до меня и осенит меня морозно-свежей идеей
[17:15:10] <gds> ermine: да причём тут итераты.  А так -- подобную схему можно и так хорошо реализовать, без них.  Возвращай везде начало-конец, чо.
А у меня следующая шняга -- в итератах отслеживать позицию лексем, файл-строка-столбец.  Уже знаю, как, через recoverable errors, будет по крайней мере забавно кодить.
А Деда не вызывай зазря, может придёт Дед Фимоз со своими специфическими, заужающими мыслевыводящий проход идеями.
[17:17:44] <ermine> gds: итераты мешают кусочностью инпута, а то можно было бы сделать lazy функцию, которая как раз вернула бы лексему по запросу
[17:24:36] <ermine> gds: хочется понять две вещи: 1) как оставить хранение строки на совести gc, т.е. при появлении нового чанка инпута не хранить прежнюю строку в явном виде у себя в структурах - пусть lazy функция как бы держит при себе ссылку на эту строку и 2) чо делать, когда лексема на стыке двух чанков
[17:26:12] <ermine> а, второе вытекает явно из первого, контакенация частей лексемы
[17:26:25] <ermine> ну тогда надо пробовать
[17:33:34] <gds> ermine: lazy-функция должна как-то 1. создаваться -- тот же колбэк, 2. хранить чанк на случай, если он будет нужен.  с п.2 у тебя бида будет, а п.1 -- чисто довесок.
[17:34:51] <gds> и да, хранить строку можно, но тогда будешь хуже итератов, которые гарантируют постоянную память (в пределах своей машинерии) -- у тебя же может быть куча ленивых типа-строк, которые кто-то может зафорсить.
[17:36:01] <ermine> есть еще третья бида - бэктрекинг
[17:36:53] <gds> ты же её решила факторизацией, не?
[17:36:57] <ermine> наверное надо императивный финт ушами делать - ставить точку в ипуте, указывающую, что тут конец бэктрегинга возможного
[17:40:09] <ermine> gds: факторизация в CS - это полдела, увы, поэтому в PEG есть предикаты, которые тестят строку, но не передвигают индекс
[17:40:10] <gds> такой же императивный, как и весь peg с явными приоритетами.  тоже думал про такое, но на итератах.  какой первый скажет "всё, точка X больше неактуальна" -- всё, чистим всё, что остальные кушают из буферов от X и до упора.
[17:40:32] <ermine> например, чтобы проверить, что после токена не идет тот или иной токен
[17:41:25] <ermine> эти предикаты создают lookahead собственнно
[17:45:59] <gds> если громатека контекстно-свободная, можно сначала токенизировать, а потом требовать lookahead на 1 токен, обычно хватает.
[17:47:57] <ermine> gds: было бы щастье ограничить свою жизнь только строгими контекстно-свободными штучками и не усложнять себе жизнь контекстом вообще
[17:48:39] <ermine> а еще в CFG лексер - отдельная функция
[18:01:15] <ermine> так, какие-то смутные решения в голове уже бродят, надо что-то пробовать
[18:40:55] mrm вошёл(а) в комнату
[19:52:54] dzhon вышел(а) из комнаты
[19:57:04] Typhon вышел(а) из комнаты
[20:16:32] f[x] вышел(а) из комнаты
[20:47:53] mrm вышел(а) из комнаты
[21:17:28] Typhon вошёл(а) в комнату
[21:28:02] Kakadu вошёл(а) в комнату
[21:31:16] shaggie вышел(а) из комнаты
[21:56:09] gds вышел(а) из комнаты
[22:24:10] letrec вышел(а) из комнаты
[22:41:43] Typhon вышел(а) из комнаты
[23:01:17] Typhon вошёл(а) в комнату
[23:07:31] shaggie вошёл(а) в комнату
[23:17:58] Typhon вышел(а) из комнаты
[23:18:41] Typhon вошёл(а) в комнату
[23:27:10] Typhon вышел(а) из комнаты: Replaced by new connection
[23:27:31] Typhon вошёл(а) в комнату
[23:36:54] Typhon вышел(а) из комнаты
[23:40:15] ermine вышел(а) из комнаты
[23:46:43] Typhon вошёл(а) в комнату
[23:55:12] Typhon вышел(а) из комнаты: Replaced by new connection
[23:56:00] Typhon вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!