Home
Objective Caml
ocaml@conference.jabber.ru
Вторник, 7 июня 2011< ^ >
gds установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Светлое будущее -- http://camlunity.ru/ | Нефильтрованное настоящее -- https://github.com/camlunity/kamlo_wiki | Портер прошлое -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:00:08] <ygrek> я не в курсе, но битридер/врайтер есть, насчёт более высокоуровневых конструкций - хз
[00:01:07] <arhibot> битрайтер,райтер все же не про то
[00:03:13] gds вышел(а) из комнаты
[00:04:32] <arhibot> не компиляется
[00:05:16] <arhibot> ocamlfind: Package `llvm' not found, хотя libllvm-2.9-ocaml-dev стоит
[00:05:51] <ygrek> попробуй llvm29
[00:06:02] <ygrek> посмотри как они его там назвали
[00:06:18] <ygrek> кстати, помнится как раз с ним бага была что точка в имени пакета
[00:06:32] <ygrek> :)
[00:07:03] <arhibot> точно
[00:07:11] <arhibot> /usr/lib/ocaml/llvm-2.9/llvm.*
[00:07:33] <arhibot> не
[00:07:38] <arhibot> ни 29
[00:07:42] <arhibot> ни 2.9
[00:07:46] <arhibot> боль
[00:07:49] <ygrek> ocamlfind list | grep llvm
[00:08:29] <arhibot> llvm-2_9
[00:08:56] <ygrek> о
[00:09:06] <arhibot> Error: Unbound module ModuleProvide
[00:09:21] <ygrek> аргх, поменялось апи значит
[00:09:38] <arhibot> line 54, characters 11-32
[00:09:52] <ygrek> тогда придётся разбираться
[00:20:11] arhibot вышел(а) из комнаты: Replaced by new connection
[00:20:12] arhibot вошёл(а) в комнату
[00:20:26] Typhon вошёл(а) в комнату
[00:26:42] <Typhon> gds, про читшиты ты как-то говорил, вот тут сделали http://www.ocamlpro.com/code/2011-06-03-cheatsheets.html
[00:39:53] arhibot вышел(а) из комнаты
[00:50:40] <ygrek> пересобрал, теперь видно что это assert
[00:51:27] ermine вышел(а) из комнаты
[01:12:57] ygrek вышел(а) из комнаты
[03:41:30] zert вышел(а) из комнаты
[04:05:09] Typhon вышел(а) из комнаты
[05:42:13] f[x] вышел(а) из комнаты
[09:00:41] gds вошёл(а) в комнату
[09:16:36] <komar> Как думаете, за написание функции compile_options (как в регэкспах) вместо функтора мне гореть в аду?
[09:18:45] <gds> а как в регекспах?
[09:20:43] <komar> А там строка с регэкспом компилируется в абстрактный тип.
[09:21:02] <komar> Я фиг его знает, что там происходит, но я хочу комплировать полиморфные варианты в лямбды.
[09:44:22] Kakadu вошёл(а) в комнату
[09:44:33] Kakadu вышел(а) из комнаты
[10:02:50] ygrek вошёл(а) в комнату
[10:18:50] adept вышел(а) из комнаты
[10:26:18] f[x] вошёл(а) в комнату
[10:27:58] ftrvxmtrx вышел(а) из комнаты
[10:43:39] ygrek вышел(а) из комнаты
[11:05:35] ermine вошёл(а) в комнату
[11:10:53] Kakadu вошёл(а) в комнату
[11:10:57] Kakadu вышел(а) из комнаты
[11:24:24] Typhon вошёл(а) в комнату
[11:34:47] zert вошёл(а) в комнату
[11:50:20] ftrvxmtrx вошёл(а) в комнату
[12:13:36] f[x] думает что ассерт делающий std.dump в случае нарушения условия - удобно
[12:14:58] <f[x]> т.е. типа let assert f x y = if not (try f x y with _ -> false) then log "ASSERT: %s %s : %s %s" __FILE__ __LINE__ (Std.dump x) (Std.dump y)
[12:17:43] <gds> а я и забыл про Std.dump.  Удобно, факт.
[12:17:58] <gds> а "макросы" чем раскрываешь?
[12:18:25] <f[x]> стандартным camlp4.macro
[12:20:25] <gds> понял, интересно.  А не будут ли они фиксированные для приведённого выше кода?
[12:23:04] <f[x]> ну приведённый выше надо как макрос сделать, да
[12:26:25] <gds> ага, то есть, чисто технический момент.
но я бы как-то подумал в сторону восприятия ключа -noassert -- видимо, делал бы
assert (let r = f x y in (if not r then log "..." else (); r))
[12:28:43] <gds> а, ну и try там внутри, конечно.
[12:29:00] <gds> assert (let r = (try f x y with _ -> false) in (if not r then log "..." else (); r))
[12:30:26] <f[x]> open Camlp4.PreCast
DEFINE ASSERT(f,x,y) = if not (try f x y with _ -> false) then Printf.eprintf "ASSERT: %s : %s %s\n%!" (Loc.to_string __LOCATION__) (Std.dump x) (Std.dump y)
let () = ASSERT((=),2,3)
[12:30:29] <f[x]> хм, кстати да
[12:30:41] <f[x]> хотя я никогда noassert не пользую
[12:31:11] <f[x]> синтаксис вырвиглазный получаеься
[12:31:30] <f[x]> проще уж самопальное расширение сделать, чем macro
[12:31:59] <gds> да вроде нормально с macro получилось.
[12:32:42] <f[x]> мне лень будет столько скобок писать
[12:54:30] ftrvxmtrx вышел(а) из комнаты
[12:56:12] ftrvxmtrx вошёл(а) в комнату
[13:24:00] ftrvxmtrx вышел(а) из комнаты
[13:25:57] ftrvxmtrx вошёл(а) в комнату
[13:39:39] gds вышел(а) из комнаты
[13:47:05] Typhon вышел(а) из комнаты
[13:47:16] Typhon вошёл(а) в комнату
[13:58:28] f[x] вышел(а) из комнаты
[14:19:43] gds вошёл(а) в комнату
[14:49:15] ftrvxmtrx вышел(а) из комнаты
[14:52:11] ftrvxmtrx вошёл(а) в комнату
[15:03:15] ftrvxmtrx вышел(а) из комнаты
[15:03:22] ftrvxmtrx вошёл(а) в комнату
[15:03:25] f[x] вошёл(а) в комнату
[15:03:51] f[x] вышел(а) из комнаты
[15:04:44] f[x] вошёл(а) в комнату
[15:06:09] f[x] вышел(а) из комнаты
[15:06:50] f[x] вошёл(а) в комнату
[15:07:07] f[x] вышел(а) из комнаты
[15:08:01] f[x] вошёл(а) в комнату
[15:08:28] f[x] вышел(а) из комнаты
[15:09:33] f[x] вошёл(а) в комнату
[15:09:39] f[x] вышел(а) из комнаты
[15:10:43] f[x] вошёл(а) в комнату
[15:10:51] f[x] вышел(а) из комнаты
[15:12:15] f[x] вошёл(а) в комнату
[15:12:25] f[x] вышел(а) из комнаты
[15:13:26] f[x] вошёл(а) в комнату
[15:14:38] f[x] вышел(а) из комнаты
[15:15:32] f[x] вошёл(а) в комнату
[15:16:27] f[x] вышел(а) из комнаты
[15:18:37] f[x] вошёл(а) в комнату
[15:19:21] f[x] вышел(а) из комнаты
[15:20:19] f[x] вошёл(а) в комнату
[15:47:23] abiogenesis вошёл(а) в комнату
[16:01:34] ygrek вошёл(а) в комнату
[16:01:49] ygrek вышел(а) из комнаты
[16:08:05] Digimmortal вошёл(а) в комнату
[16:14:45] abiogenesis вышел(а) из комнаты
[16:57:34] <gds> кое-что про icfpc: http://faceted-jacinth.livejournal.com/84492.html (ну и да, переименовать в .zip и посмотреть можно)
[17:07:54] <ermine> там что-то интересное есть?
[17:08:52] ermine решила продолжить ковырять комбайн и теперь думает, как выковыривать сразу из инпута всё, что отматчилось, а не по одному символику
[17:09:52] <ermine> gds: ты как там в итераторах решаешь
[17:09:55] <ermine> это?
[17:11:33] <gds> ermine: в жабьем не разбираюсь, про интересное не скажу.  Про комбайн же -- ничего не скажу, ибо не представляю.
В итератах есть "энумераторы" -- нечто, что кормит итерат данными, пока данные не закончатся или пока итерат не скажет "горшочек, не вари!111".  Вот, энумератор берёт чанк и даёт его итерату.  А там итерат либо возвращает "всё готово, результат -- вот, остаток чанка -- вот", либо "ошибочка вышла", либо "хочу ещё данные; когда найдёте -- вызывайте такое-то продолжение".
[17:13:37] <ermine> gds: обычный метод - копировать из инпута в Buffer.t символы, удовлетворяющие текущей функции (например цифры)
[17:14:18] <ermine> gds: у тебя тоже копирование повсюду?
[17:14:52] <ermine> причем не абы какое, а каждой мелочи в отдельности
[17:17:29] <ermine> жалко, что не почитать какую-нить теорию на эту тему
[17:17:40] <Digimmortal> кто-нить новую Sepultura слушал?
[17:18:31] <gds> ermine: да, про копирование -- подход известный.  У меня (точнее, у Олега) -- не оно.  Память выделяется один раз, энумератором, и никакого копирования нет, если оно не требуется по логике работы итерата.  А там итерат читает сколько ему надо из массива, возвращает остаток (в виде {arr;ofs;len} -- дёшево).
[17:22:19] <ermine> gds: я стесняюсь признаться, но признаюсь, что щас думаю о том, чтобы копировать кусок инпута в новый инпут и его в качестве результата выдавать вместо аккумулятора
[17:22:32] <ermine> gds: это дико?
[17:23:52] <gds> смотря что хочешь и с чем будут работать те, кому этот инпут нужен.  Точно не получится организовать так, чтобы можно было обработать чанк и выкинуть его, и чтобы если он понадобился какому-то комбинатору, то это были бы его личные проблемы?
[17:25:40] <ermine> ну вот хочется и колется
[17:26:05] <ermine> попробую поиграть в эту игру сначала
[17:41:05] <gds> ermine: то есть, смысл -- сделать комбинаторы однопроходными по отношению к инпуту, т.е. чтобы возвращали сразу, что обработали и остаток (либо количество обработанного, но это чуть меньше труЪ).  И будут у тебя итераты поверх инпута :)
[17:43:35] komar вышел(а) из комнаты: Replaced by new connection
[17:43:36] komar вошёл(а) в комнату
[17:45:44] <ermine> gds: не, однопроходный не всегда получится, например, в маркдауне определение параграфа - все строчки до пустой строчки - это параграф
[17:46:09] <ermine> gds: в git objects тоже чота надо сначала выдрать, прежде чем углубляться в кусок
[17:46:25] <gds> ermine: ну так это однопроходный -- пока не встретилось "\n\n", всё пишем под параграф.
[17:48:12] <ermine> gds: пока не встретишь [ \t]*\r\n
[17:48:30] <ermine> gds: куда "пишм"?
[17:48:47] <ermine> в аккумулятор? :)
[17:50:43] <ermine> если без аккумулятора и сразу в то, что называется инпут - это таки да, полное переплетение с IO функциями
[17:51:01] <ermine> ужос
[17:52:03] <gds> если оно изначально строчно-ориентированное, сначала есть смысл разбить на строки: конечный итерат, обрабатывающий строки, будет иметь тип iteratee string 'a, и мы его обернём енумератом enumeratee char string 'a, который превратит его в итерат с типом iteratee char 'a -- то есть, будет брать char, но внутреннему (конечному) итерату будет давать string.  То есть, вместо Subarray.t char, используемый для чтения символов, конечный итерат будет получать Subarray.t string, массив строк.  И работать с ним как с любым другим инпутом.  А если надо utf8, то прозрачно подключаем сначала enumeratee char utf8char 'a, затем enumeratee utf8char string 'a.
[17:54:43] <ermine> забавно
[17:54:59] <ermine> значит надо пробовать порождать новые инпуты поверх оригинального
[17:55:23] <gds> надо, но с функторами...  Учитывая разные типы...
[17:55:45] <ermine> посмотрим
[17:56:15] <ermine> :P
[18:05:13] <ermine> у меня пока текущий вопрос - как пометить начало и конец инпута прежде чем породить его
[18:05:45] <ermine> внутри комбинатора это просто, а если у меня сложный комбинатор?
[18:06:51] <ermine> надо придумать маркеры-фломастеры
[18:06:53] <gds> смотря что конкретно подразумеваешь под инпутом.  Просто входные данные -- недостаточно конкретно.
[18:07:43] ftrvxmtrx вышел(а) из комнаты
[18:08:04] <ermine> инпут - чОрный ящик
[18:10:16] <ermine> ладно, будет видно потом
[18:10:40] <ermine> пока внутри комбинаторов там где раньше был аккумулятор сделю тупое выделение
[18:14:12] gds away, если чо.
[18:35:19] ftrvxmtrx вошёл(а) в комнату
[19:06:01] <f[x]> llvm - бажное (по крайней мере версия в дебиане)
[19:25:46] Digimmortal вышел(а) из комнаты
[19:30:22] f[x] вышел(а) из комнаты
[20:00:32] ftrvxmtrx вышел(а) из комнаты
[21:32:58] Vinnipeg вошёл(а) в комнату
[21:33:14] Vinnipeg вышел(а) из комнаты: offline
[21:39:02] ftrvxmtrx вошёл(а) в комнату
[22:19:07] Typhon вышел(а) из комнаты
[22:44:05] komar посылает лучей лерою, который поставил meta charset=iso-8859-1 в ocamldoc.
[22:45:01] <zert> хранцузов надо запретить
[22:45:04] <zert> komar: пиши на х-е
[22:45:16] <komar> Ты мне надоел.
[22:48:56] <zert> как я тебе так быстро надоел?
[23:20:26] Typhon вошёл(а) в комнату
[23:28:32] ermine вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!