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

GMT+3
[00:19:34] ermine вышел(а) из комнаты
[00:31:45] gds вышел(а) из комнаты
[00:46:21] arhibot вышел(а) из комнаты
[01:11:59] ftrvxmtrx вышел(а) из комнаты
[01:13:57] Typhon вошёл(а) в комнату
[01:48:28] ygrek вышел(а) из комнаты
[02:52:26] Typhon вышел(а) из комнаты
[03:03:45] vshender вошёл(а) в комнату
[03:59:34] vshender вышел(а) из комнаты
[05:19:38] ftrvxmtrx вошёл(а) в комнату
[09:20:42] gds вошёл(а) в комнату
[10:52:53] ygrek вошёл(а) в комнату
[11:03:01] Kakadu вошёл(а) в комнату
[11:10:38] ermine вошёл(а) в комнату
[11:24:10] vshender вошёл(а) в комнату
[11:36:16] ftrvxmtrx вышел(а) из комнаты
[11:52:59] ygrek вышел(а) из комнаты
[11:53:22] Typhon вошёл(а) в комнату
[12:24:31] ygrek вошёл(а) в комнату
[12:29:02] ftrvxmtrx вошёл(а) в комнату
[12:52:14] ygrek вышел(а) из комнаты
[14:25:33] arhibot вошёл(а) в комнату
[15:48:57] Typhon вышел(а) из комнаты: Скоро буду.
[15:49:37] Typhon вошёл(а) в комнату
[15:50:50] <Typhon> одминистраторы комнаты могут видеть ip посетителя конфы?
[15:55:23] vshender вышел(а) из комнаты
[15:59:17] arhibot вышел(а) из комнаты: Replaced by new connection
[15:59:18] arhibot вошёл(а) в комнату
[16:10:31] komar вошёл(а) в комнату
[16:16:18] arhibot вышел(а) из комнаты
[16:16:41] arhibot вошёл(а) в комнату
[16:18:10] <f[x]> не, только админы сервера
[16:30:24] f[x] вышел(а) из комнаты
[16:33:03] f[x] вошёл(а) в комнату
[16:49:49] <ermine> заглянув в логи
[16:50:34] <Typhon> а как пользователи тора борются с тем, что ЮТУБ МЕДЛЕННО РАБОТАЕТ!!11!!!
[16:52:22] <ermine> молятся Б-гу
[16:52:35] <ermine> а тор не нужен же
[16:52:49] <Typhon> потому что его US Navy спонсирует и гугель?
[16:52:53] <f[x]> Typhon: у настоящих пользователей тора флэша нет и ютуб не нужен
[16:53:26] <f[x]> смысл использовать тор вместе с проприетарными бинарным блобом утыканном багами и бэкдорами?
[16:53:48] <Typhon> тоже верно. но как же клипаки ляйбаха и леди гаги?
[16:54:08] <f[x]> по транзитивности - не нужен
[16:54:21] <f[x]> ну или если сильно хочется то clive
[16:54:35] <f[x]> и смотреть в mplayer'е
[17:02:18] Typhon вышел(а) из комнаты
[17:03:53] Typhon вошёл(а) в комнату
[17:52:57] Typhon вышел(а) из комнаты: Replaced by new connection
[17:53:11] Typhon вошёл(а) в комнату
[17:55:45] Typhon вышел(а) из комнаты: Replaced by new connection
[17:55:59] Typhon вошёл(а) в комнату
[17:57:26] Typhon вышел(а) из комнаты: Replaced by new connection
[17:57:45] Typhon вошёл(а) в комнату
[18:01:51] <gds> если не лень, подскажите такую штуку с опциональными аргументами.  Вроде что-то подобное работало:
let func ?(ofs = 0) ?(len = my_length my_string) my_string = ...
или я криво сформулировал, или len нужно делать опциональным аргументом без значения по умолчанию, а значение это считать внутри, присваивая ему нужное "my_length my_string" (my_length -- функция), или нужно переставить аргументы, чтобы my_string был определён до len.  Но тогда len получится нестираемым аргументом.  Подскажите, как подобное делают, чтобы удобненько?    Примеров сходу не нашёл.
[18:02:01] Typhon вышел(а) из комнаты: Replaced by new connection
[18:02:15] Typhon вошёл(а) в комнату
[18:03:59] Typhon вышел(а) из комнаты: Replaced by new connection
[18:04:05] Typhon вошёл(а) в комнату
[18:06:44] Typhon вышел(а) из комнаты: Replaced by new connection
[18:06:50] Typhon вошёл(а) в комнату
[18:06:50] Typhon вышел(а) из комнаты
[18:14:56] <f[x]> переставить и добавить ()
[18:28:41] <gds> f[x]: идею понял, но с точки зрения пользователя (хотя бы себя) лучше один раз написать let len = match len with [None -> my_length my_string | Some len -> len] in ..., нежели каждый раз добавлять (), периодически забывая его.
[18:28:59] <f[x]> угу
[18:45:31] zert вошёл(а) в комнату
[19:07:52] Typhon вошёл(а) в комнату
[19:18:36] komar вышел(а) из комнаты: Replaced by new connection
[19:18:37] komar вошёл(а) в комнату
[20:03:22] ftrvxmtrx вышел(а) из комнаты
[21:17:55] arhibot вышел(а) из комнаты: Replaced by new connection
[21:17:57] arhibot вошёл(а) в комнату
[21:23:16] ftrvxmtrx вошёл(а) в комнату
[21:33:22] ygrek вошёл(а) в комнату
[21:50:15] <ygrek> в caml-list'е вкусная ссылка про парсинг
[21:53:22] <zert> покежь
[21:53:49] <ermine> пакрат опять?
[21:54:55] <ermine> zert: не покажет, придется топать в мейллист :)
[21:55:34] ermine потеет над camlp4, пытясь понять как сочинять код
[21:55:55] <zert> по какой дате искать?
[21:57:12] <ermine> 29-го
[21:57:26] <ermine> и не в мейллисте, а в сегодняшнем cwn
[21:57:57] <zert> я не знаю, где это
[21:58:35] <ermine> гугль знает
[21:58:41] <zert> не нашёл
[21:58:56] <ermine> http://alan.petitepomme.net/cwn/index.html
[21:58:58] <Typhon> caml weekly news
[21:59:10] <zert> данкешонг
[21:59:44] <zert> а где там 29?
[21:59:56] <ermine> в конце
[22:00:24] <ermine> в конце сегодняшнего
[22:00:40] ermine поливает антифризом мозги zert
[22:01:04] <zert> пакрат?
[22:01:32] <ermine> ну, ygrek не подтвердил же
[22:02:02] <ermine> а пакрат - модный парсер для камла
[22:02:22] <zert> хипсторский?
[22:03:26] <ermine> чо?
[22:04:32] ftrvxmtrx вышел(а) из комнаты
[22:04:38] <zert> ну модный, хипсторский
[22:06:33] <ermine> хэпписторский
[22:07:15] <ermine> только этот пакрат заглатывает сначала весь инпут
[22:10:45] <gds> в общем, видел ту ссылку (если мы про одну и ту же; но, вроде, про неё -- ltu, все дела).  Там обкладывали йенгами как cyk, так и earley, и хвалили автоматы.
[22:11:17] <ygrek> http://lambda-the-ultimate.org/node/4150
[22:13:13] <ermine> gds: та ссылка, которой я пичкаю zert - про левую рекурсию в пакрате
[22:15:43] <ermine> gds: а твой мега-парсер умеет левую рекурсию?
[22:17:43] <gds> ygrek: во, я тоже это читал.  Доводы обоих сторон мало утешают в среднем случае.  (а именно, все парсеры -- говно, но некоторые явно предлагают кубическую сложность, а некоторые просто не умеют грамматики, где возникает таковая сложность.)
[22:19:05] <gds> ermine: конечно нет.  earley буду доделывать, но со временем засада, расписывал.  а так -- либо умеет без проблем, либо с проблемой, где требуется небольшая доработка.  т.е. не помню, какая из рекурсий жрёт память, но решение есть.
[22:19:08] <ygrek> gds: про все парсеры полностью согласен
[22:21:20] <ermine> gds: а пчу ты так прикипел к earley?
[22:23:43] <gds> ermine: да не то, что бы "прикипел".  он простой, тупой (а простые и тупые вещи мне по нраву), он парсит любые контекстно-свободные грамматики, он допиливается на случай пустых нетерминалов, он обычно имеет линейную сложность в среднем случае.  вот как-то так.
[22:23:45] ermine тоже ищет свой идеал парсера, непременно умеющий end-of-buffer вместо end-of-input
[22:25:17] <ermine> gds: если любые CF, то и регулярные значит тоже умеет? :)
[22:25:21] <gds> end-of-buffer в случае earley -- вполне таки есть.  Там после обработки каждого токена видно текущее состояние -- в том числе, какие правила уже дошли до главного нетерминала.
[22:26:07] <ermine> gds: ну, а если недообработанный токен?
[22:26:31] <ermine> еще раз обрабатывать после пополнения буфера?
[22:26:40] <ygrek> если он такой замечательный то почему же нету готовых реализаций?
[22:26:41] <ermine> вот это не идеал!
[22:27:08] <ygrek> ermine: в подавляющем большинстве случаев это вообще неважно и копейки
[22:27:11] <gds> токен -- он целиком идёт.  С другой стороны, токеном может быть хоть и символ.
[22:27:31] <ygrek> сколько у тебя длина токена, какой размер буфера и сколько занимает репарсинг - вот и посчитай цену этого события
[22:27:55] <ermine> ygrek: не такие уж и копейки
[22:28:13] <ygrek> прошу пример
[22:28:32] <ermine> ygrek: если для создания токена надо 2 mb символов, а в буфере - 8 kb
[22:29:02] <gds> готовые реализации earley есть, но не на окамле.
[22:29:25] <ygrek> ermine: а кроме сфарических токенов в вакууме есть примеры?
[22:29:28] <ermine> ygrek: в xml - cdata
[22:31:04] <ygrek> ну так делай не cdata = string, а cdata = string list и обрезай токен по границе буфера, а потом склеивай в большую строку по получению финального ]>
[22:31:31] <ermine> ygrek: у xml lookahead не превышает 3 символа (]]>), поэтому нет резона каждый раз возвращаться к началу емкости накопленных  данных
[22:32:40] <ygrek> я описал как не надо возвращаться - внутри cdata ты всегда можешь поглотить всё до конца буфера и остаться в состоянии "внутри cdata"
[22:33:13] <ermine> ygrek: cdata - это <![CDATA[...]]>, внутри позволяются быть все что угодно, но не ]]>
[22:33:44] <ermine> и это не Text как в случае <abc>Text</abc>
[22:33:55] <ermine> правила эскейпинга разные
[22:34:49] <ygrek> ну? парсер видит <![CDATA[ и переключает лексер в режим in_cdata, лексер вытаскивает всё что есть и отдаёт как кусок cdata - парсер приклеивает его в буфер и ждёт следующего куска
[22:35:27] <ermine> и получает буфер "...]"
[22:36:02] <ermine> накапливаем и начинаем заново, потому что это копейки?
[22:36:47] <ermine> ну собсно я щас и так делаю, правда без начинания заново, но идеалом достигнутое пока не считаю
[22:36:58] <ygrek> отдаёт ... а ] оставляет на будущее
[22:38:24] <ermine> тогда, когда я была молодой, меня очень беспокоил вопрос об частом пересоздании буфера
[22:40:31] <gds> в случае cdata -- реально мелочи.  не обязательно пересоздавать буфер -- можно доклеить к списку нужные символы.  На худой конец, иметь (Buffer.t * string list) и доклеивать по достижению буфером максимального размера строки (или вдвое меньше).
[22:41:12] <ygrek> ы? на входе циклический буфер, на выходе string list
[22:41:46] Typhon вышел(а) из комнаты
[22:42:49] <ermine> gds: ты это считаешь ИДЕАЛом?
[22:44:34] <ermine> gds: кста, вспомни, что тот парсер хмля, код которого я тебе показывала - в рекурсии возвращал не токен, а функцию, которая хотела следующий символ входных данных, а токен просто отдавался кому-то там в калбэке
[22:46:52] <ermine> такая вот была оптимизация бережного отношения к буферу, за счет дорогостоящей операции партиал аппликешна
[23:02:43] <gds> ygrek: а как тут циклический буфер особо улучшит?  когда будет новая секция cdata, не будет String.blit?
[23:04:51] <gds> ermine: конечно не идеал, но идеал в целом не нужен.  Твой парсер -- примерно помню.  Но там не очень бережной была операция выделения памяти под closure, если я правильно помню (если неправильно -- значит выделялось в heap).  В общем, где-то да выделялось место под текущее состояние.
[23:05:52] gds вышел(а) из комнаты
[23:23:33] <ermine> как там в camlp4 сваять тьюпл из списка?
[23:38:31] <ermine> нашла
[23:40:17] <ermine> круто фсе
[23:47:51] Kakadu вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!