Home
Objective Caml
ocaml@conference.jabber.ru
Четверг, 14 октября 2010< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | judge by commits, not comments | ocaml мёртв, move on | Oh My God! They Killed Kamlp4! Bastards!
Конфигурация комнаты
Участники комнаты

GMT+4
[00:01:19] <gds> > разруливать AST дерево - надо какую-то консольную тулзу, которая будет его показывать.
народ, напомните, современные camlp4 (map generator, fold generator) умеют вытаскивать в том числе имена конструкторов?  Или надо брать typeconv (или как там его)?  Понятно, через deriving можно напечатать, но вот с ним какие-то загадочные проблемы в последнее время.
[00:02:38] komar недавно смотрел и все забыл.
[00:04:05] Kakadu собрал janestreetовский core. на дных будет втыкать
[00:05:03] vshender вошёл(а) в комнату
[00:07:21] <vshender> gds: кстати, знаешь, что есть на русском книжонка по теоркату?
[00:08:57] <gds> vshender: интересно, какая?
[00:11:07] <ygrek> generator'ы это из другой оперы, они генерят код с визиторами для каждого конструктора в adt
[00:11:16] <ygrek> а не для "интроспекции"
[00:11:44] <ygrek> а проблемы с deriving это про 3.12?
[00:17:23] <gds> ygrek: про 3.12 -- да.  про '<' -- да (понятно, что можно исправить..).  а ещё про то, что у типов, объявленных вместе (т.е. как бы рекурсивно, иначе можно было бы разделить) обязано быть одинаковое количество типовых параметров.
[00:19:43] <ygrek> '<' у меня исправлено, 3.12 исправлено в другом месте (могу портировать если надо)
[00:20:04] <ygrek> а про последний пункт я не в курсе - что это?
[00:23:46] <Kakadu> у меня вопрос: как правильно написать fold_right - с помощью fold_left+rev или с континьюйшенами?
[00:24:32] <Kakadu> janestreetовцы делают первым способом
[00:25:43] <Kakadu> а в стандартной библиотеке с континьюэйшенами
[00:26:07] <Kakadu> и вообще - вам часто приходилось испольщовать fold_right?
[00:29:43] <komar> Когда нужен fold в другую сторону.
[00:34:30] ygrek вышел(а) из комнаты
[00:44:55] Kakadu несет чушь
[00:45:26] <Kakadu> у этих janestreetовсцев fold_right даже не хвостато-рекурсивен
[00:46:36] <Kakadu> 76:let rec fold_right f l accu =
77-  match l with
78-    [] -> accu
79:  | a::l -> f a (fold_right f l accu)
[00:47:49] Kakadu вышел(а) из комнаты
[00:49:43] <gds> ygrek: нифига себе, как ты осилил '<'?  Про 3.12 -- вопрос времени/желания, пока не надо, но сразу, как будет надо, обращусь.
Последний пункт -- type t1 'a = ... and t2 'b 'c = ... deriving (...) -- обламывается, ибо внутри не предусмотрено (т.к. вроде он там генерит функтор, отвечающий за всё, и ему даёт модуль, содержащий тип, но тип должен иметь фиксированную "форму").
[00:50:02] <gds> Kakadu: fold_right примерно-правильно -- как в extlib.
[00:51:34] <vshender> gds: извини, отходил
[00:51:36] <vshender> gds: http://www.ozon.ru/context/detail/id/3250036/
[00:51:44] <vshender> gds: она и в электронном виде вроде была...
[00:52:10] <vshender> gds: так как раз на озоне от _darkus_ отзыв :)
[00:58:17] <gds> vshender: кстати, знакомый математик, когда его уволили с какой-то работы, иногда читал книжку "Категории для работающего математика", за что знакомые его травили.
Книгу начал читать (но наткнулся на проблемы, которые сейчас уже смогу решить), но нана глийском.  Как только будет желание продолжить чтение на русском, буду искать, вдруг кто отсканирует и выложит.  Однако для простых вещей катит http://ncatlab.org/ (кстати, я там сделал аж одну правку!  несложную, но вникал в дело, и не нравилось, что там написано неправильно.).
[00:58:23] arhibot вышел(а) из комнаты
[00:58:58] vshender вышел(а) из комнаты
[01:01:16] vshender вошёл(а) в комнату
[01:01:34] <vshender> gds: так я к тому, что она отсканирована... Где-то встречал точно...
[01:03:24] <gds> вот это замечательно, буду искать.  Если чо, на всякий случай урл сюда скину, вдруг кому-то интересно будет.  Для функциональщины понимать азы категорий таки полезно, может кому пригодится.
[01:29:55] <vshender> ebdb.ru -- там нашлось
[01:30:03] <vshender> Но требуют сайты регистрации, чтобы скачать...
[01:30:29] <vshender> Сейчас, попробую зарегистрироваться и ссылку сюда кину
[01:31:18] <vshender> http://depositfiles.com/en/files/o8c5a0oss
[01:43:50] gds вышел(а) из комнаты
[01:44:14] gds вошёл(а) в комнату
[01:47:23] komar вышел(а) из комнаты
[01:55:29] <gds> vshender: скачал, благодарю.
[01:56:54] gds вышел(а) из комнаты
[02:13:29] <vshender> gds: не за что.
[02:37:48] Typhon вышел(а) из комнаты
[08:26:11] iNode вошёл(а) в комнату
[09:03:09] gds вошёл(а) в комнату
[09:55:22] ermine вошёл(а) в комнату
[10:20:47] serp256 вошёл(а) в комнату
[10:24:49] arhibot вошёл(а) в комнату
[10:30:17] ygrek вошёл(а) в комнату
[11:10:11] <f[x]> gds: пофиксил частично - более ужесточил грамматику, так что вероятность обломаться меньше - см. http://repo.or.cz/w/deriving.git/commitdiff/6dbdaa2f5077bc76761feee7cd2bd1222bad30ec
[11:19:27] <gds> даже такой фикс -- уже хорошо!  Может ещё можно загнать проверку на то, что только нужные a_UIDENT передаются (Show, Eq)?  Но мне и так нравится.
[11:21:07] komar вошёл(а) в комнату
[11:23:52] komar вышел(а) из комнаты
[11:31:25] <f[x]> ну классы можно добавлять новые, поэтому хардкодить пока не хочется
[11:32:04] <f[x]> насчёт второй проблемы надо ковырять, может нарисуй багу чтобы не забылось
[11:40:54] <gds> ты про количества типовых параметров?
[11:41:36] zert вошёл(а) в комнату
[11:45:34] <gds> кстати, эта "проблема" легко обходится.  допустим, было
type t1 'a = [ A of t2 'a 'a ] and t2 'a 'b = [ B of t1 'b ]
полуавтоматически переписываем в:
type void;
type t1_pre 'a 'z = [ A of t2 'a 'a ] and t2 'a 'b = [ B of t1 'b void ];
type t1 'a = t1_pre 'a void deriving (...);
но сейчас зафиксирую багу.
[11:45:46] <gds> а хотя, где именно фиксировать?
[11:46:13] <f[x]> code.google.com/p/deriving
[12:01:17] Kakadu вошёл(а) в комнату
[12:08:55] <gds> http://code.google.com/p/deriving/issues/detail?id=6
[12:10:06] Typhon вошёл(а) в комнату
[12:13:24] <f[x]> ok
[12:15:53] ygrek вышел(а) из комнаты
[12:17:25] ygrek вошёл(а) в комнату
[12:17:40] ygrek вышел(а) из комнаты
[12:33:19] komar вошёл(а) в комнату
[12:55:01] arhibot вышел(а) из комнаты
[13:57:45] komar вышел(а) из комнаты
[14:46:46] myxomop87 вошёл(а) в комнату
[14:50:19] <myxomop87> приветствую, вопрос нубский - как отдельть вложенные match, почему-то он ругается на ;; - syntax error
[14:51:17] <gds> скобки или begin-end вокруг вложенного match, или использовать revised syntax, где они ограничены явным образом.
[14:51:40] <gds> на ;; -- надо смотреть на код, который перед/после, лично я точно ответить не могу.
[14:56:23] <myxomop87> угу, спасибо, скобки помогли
[14:58:04] <Typhon> myxomop87: ;; тебе нужны только в конце всего выражения, если ты в топлевеле, подозреваю, что ты внутри, в конце строки ставишь их, например. http://paste.in.ua/1232/ <- пример
[14:59:16] <Typhon> ОТ, но related, наверное -- http://www.amazon.com/Distributed-Algorithms-Kaufmann-Management-Systems/dp/1558603484/ref=sr_1_1?s=books&ie=UTF8&qid=1287052211&sr=1-1#reader_1558603484 -- кто-нибудь про это сказать может что-нибудь? :)
[15:00:03] <vshender> Typhon: Я могу скзать
[15:00:06] <vshender> Typhon: спасибо :D
[15:01:01] <Typhon> :-)
[15:01:03] <vshender> Typhon: а также то, что она есть в электронном виде
[15:02:34] <vshender> Typhon: http://ifile.it/ltm1hb6/1558603484.zip
[15:02:53] <Typhon> vshender: о, спасибо :)
[15:03:17] <vshender> Typhon: взаимное спасибо и да, обращайся :)
[15:13:02] <f[x]> +1 к спасибо :)
[15:13:43] <gds> +1 к +1, буду качать-читать избранное.
[15:14:18] <f[x]> 120$, а сколько ж там страниц?
[15:14:42] <Typhon> 900
[15:17:22] <f[x]> угу, с экрана читать застрелишься
[15:17:54] <Typhon> я ща попробую на ридере посмотреть, как она.
[15:19:00] <Typhon> а так тут знакомые на амазон заказ делают, думаю с ними может пристроиться ^_^
[15:20:23] <f[x]> хм, а ты физически где находишься?
[15:20:40] f[x] правда надо свой todo по книжкам сначала пройти :)
[15:21:18] <Typhon> в москве
[15:23:18] <f[x]> ясн
[15:29:50] <Typhon> да, для чтения вот таких вот пдфок всякий айпэд может пригодиться -- на сониридере по умолчанию мелковато, при приближении стандартно плывет пдфка слегка
[15:30:25] <gds> кто-нибудь активно пользовал ловлю ошибок в lwt?  То, что ошибки у них закодированы исключениями (тем не менее, которые не raise/try-with, а просто передают) -- идея интересная, но как оно на практике?  Удобнее, чем [полиморфные] варианты?  Важна не типовая безопасность (понятно, что варианты можно вытащить в тип, например), а удобство пользования.
[15:39:00] <gds> # exception E of exn;;
# let rec e = E e;;
странно, даже проканало.  Надо бы придумать, для чего ещё исключения можно использовать.  Явно какое-то хакерство можно учинить.
[15:58:20] komar вошёл(а) в комнату
[16:32:29] <gds> в общем, в ocaml-iteratees ошибки будут исключительно в виде исключений.  Думал про (string * exn), чтобы место рождения исключения фиксировать, но потом мысль отпала, т.к. везде таскать тупл -- не ок.  Будет может отдельная функция, которая будет из исключений, которые она знает, вытаскивать строку с местом рождения (т.е. будет exception EIO of place например).
А всё это -- из-за вашего бездействия!11111111
[16:35:14] <myxomop87> кстати можно где-нибудь почитать статью чтобы понять про полиморфные варианты ? зачем они нужны если обычных вроде как хватает с голвой
[16:36:50] <myxomop87> наверно все же можно и без них, если в F# их не взяли
[16:37:06] <gds> можно и на паскале писать программы.
[16:37:24] <gds> могу вкратце рассказать, разве что.
В обычных вариантах типизация номинальная (по конструктору известен тип выражения), в полиморфных -- структурная (в общих случаях мы не знаем именованного типа, а имеем просто информацию о том, какие варианты могут быть возвращены/приняты).  Дальше всё -- следствие их типизации.
[16:39:03] <gds> например, если есть тип [`A | `B] и функция, обрабатывающая match .. with `A -> .. | `B -> .., то можно расширить её (и принимаемый-возвращаемый тип), если дописать " | _ -> действие для других вариантов), и получим, что с известными вариантами функция делает известные ей действия, с остальными -- какие-то другие действия.
[16:39:04] <f[x]> объяснил, да :)
[16:39:26] <f[x]> так-то лучше
[16:40:30] <myxomop87> ээ.. т.е. поскольку нельзя написать [ 'a | 'b ], то используется обратная кавычка и можно [ `a | `b ]
[16:41:40] <gds> не совсем -- с прямой кавычкой идут type variables (типовые переменные), они не относятся к значениям.  А вообще -- да, просто синтаксис такой: обычные варианты с большой буквы, полиморфные с обратного апострофа.
[16:41:47] <myxomop87> т.е. если я хочу чтобы функция у мнея принимала 'a или 'b, то использую ПВ ?
[16:41:48] <gds> ещё можно помедитировать над:
# let f x = match x with `A -> `A | `B -> `B;;
val f : [< `A | `B ] -> [> `A | `B ] = <fun>
# let g x = match x with `A -> `A | `B -> `B | x -> x;;
val g : ([> `A | `B ] as 'a) -> 'a = <fun>
[16:42:33] <gds> не, там полиморфизм другой.  Функция будет принимать только один тип.  (с другой стороны, его можно завернуть в любой из вариантов (обычный/полиморфный) и обрабатывать тип в рантайме).
[16:46:27] <myxomop87> да, запутанно :) вобщем надеюсь со временем разберусь
[16:48:17] <gds> по умолчанию, если нет необходимости, ни полиморфные варианты, ни объекты по своей инициативе не использовать в первое время, и всё будет ок.
[16:49:18] <Typhon> а потом надо читать Пирса и МакКлейна и иначе никак ^_^
[16:50:26] <gds> без маклейна ещё кое-как можно (есть на худой конец ncatlab! зачем именно маклейн?), а вот без пирса сложно.
[16:51:39] <myxomop87> угу, пока обхожусь, а вот объекты уже немного юзаю, иначе где хранить состояние, не в глобальных переменных же
[16:51:56] <gds> в записях можно.  это те же объекты.
[16:51:59] <gds> почти.
[16:52:39] <gds> кстати, можно и в глобальных переменных, смотря что нужно.
[16:53:28] <gds> в общем, есть такой жизненный принцип: если нельзя, но очень хочется, то можно.  В окамле уж точно.
[16:54:47] <gds> кстати, третья функция вдобавок:
# let h x = match x with `A -> x | `B -> `B;;
val h : ([< `A | `B > `B ] as 'a) -> 'a = <fun>
а вот тут я уже не очень понимаю, что за тип.
[17:22:23] <gds> можете рассказать про этот тип?  риальни не врубаюсь в его смысл.
[17:25:06] <f[x]> я так понимаю это просто запись странная, а на самом деле это эквивалентно [< `A | `B ]
[17:27:27] <gds> какое-то различие должно быть, предполагаю.
[17:30:00] gds вышел(а) из комнаты
[17:38:44] komar вышел(а) из комнаты
[17:47:28] komar вошёл(а) в комнату
[18:11:05] iNode вышел(а) из комнаты
[18:13:51] vshender вышел(а) из комнаты
[18:20:54] gds вошёл(а) в комнату
[19:03:44] f[x] не может собрать ocamlfind
[19:12:26] <f[x]> flexlink List.hd bash cygwin ненависть
[19:23:14] <gds> а чего List.hd?  Насчёт остального не против.
[19:28:06] <f[x]> потому-что exception и настоящая причина скрыта
[19:29:17] <komar> ocamldebug
[19:29:22] <gds> тонны ненависти за смесь неловли exception'а плюс за List.hd.
[19:29:49] <gds> если бы хоть что-то одно, было бы ещё ок.
[19:30:11] <komar> А вообще да, на такое дело надо ставить let h = match l with h::_ -> h | _ -> assert false
[19:31:06] <komar> List.hd, впрочем, делает то же самое, но его с дебагером искать приходится.
[19:35:48] <f[x]> ну там один hd во всё коде, так что просто grep'ом :)
[19:36:17] <gds> или просто без " | _ -> assert false", ловить так же легко, но компилятор ругается.
[19:36:49] Typhon вышел(а) из комнаты
[19:41:28] serp256 вышел(а) из комнаты
[19:42:54] Kakadu вышел(а) из комнаты
[19:48:31] <f[x]> бугага
[19:49:00] <f[x]> http://paste.in.ua/1235/
[19:49:28] <f[x]> Filename.temp_file возвращает путь вида ".\somefile"
[19:49:48] <f[x]> flexlink создаёт временный sh файл с содержимым echo something > .\somefile
[19:50:06] <f[x]> и эпически выполняет Sys.command "bash <временный файл>"
[19:50:21] <f[x]> и bash пишет в куда?
[19:50:29] <f[x]> правильно! в .somefile
[19:51:09] <f[x]> и последующий read_file ".\\somefile" возвращает пустой список на который милыми образом делаем List.hd
[19:51:21] <f[x]> ненависть
[19:51:24] <f[x]> во все стороны
[19:52:22] <f[x]> - always use bash to call external commands under Cygwin (to make it work
  when gcc is a symlink)
[19:52:52] <f[x]> жалко что ygrek запрещает материться
[19:54:42] vshender вошёл(а) в комнату
[19:58:09] vshender вышел(а) из комнаты
[20:18:13] <f[x]> хм, интересно почему при перекомпиляции flexlink я получаю тот же самый *** Fatal error: hd
[20:18:38] <f[x]> не потому ли что ocamlopt юзает flexlink?
[20:19:49] <f[x]> т.е. теперь мне нужен ещё и более древний камль без flexlink'а чтобы бутстрапиться
[20:19:54] <f[x]> omfg
[20:46:57] <gds> f[x]: я обычно решал проблему более старым flexlink'ом.
[20:47:54] <gds> не конкретно эту, но подобные.  Оно глюкавое, так как невозможно работать с шеллом под виндой так, чтобы предоставлять безглючную обёртку над глючным шеллом (причём это верно как с cmd, так и с mingw/msys bash).
[21:07:29] Kakadu вошёл(а) в комнату
[21:22:34] Typhon вошёл(а) в комнату
[21:30:29] ermine вышел(а) из комнаты
[21:37:28] arhibot вошёл(а) в комнату
[21:59:47] ermine вошёл(а) в комнату
[22:05:59] ygrek вошёл(а) в комнату
[22:10:07] <ygrek> gds: угу, я понимаю что задача скорее всего не имеет вменяемого решения
[22:11:24] <ygrek> но конкретно этот случай - полный epic fail - т.к. ocamlfind написано компилить только из cygwin shell'а - и обойти этот баг flexlink'а под cygwin'ом никак не получается - т.е. никто похоже и проверял и не пробовал ничего компилить
[22:13:02] <ygrek> и да, автор считай основной утилиты на которой построена вся эта инфрастуктура пакетов в камле вызывает сомнения в вменяемости
[22:13:29] <ygrek> нафига спрашивается генерить META файлы с помощью m4?
[22:13:35] <ygrek> выглядит как издевательство
[22:13:59] <ygrek> а патчи которые эту ситуацию облегчают/исправляют он игнорирует
[22:21:30] komar вышел(а) из комнаты
[22:33:06] <Typhon> gds коварен! http://community.livejournal.com/ru_algorithms/89662.html?thread=851006#t851006 -- советовать iphone девелоперу LogicM это жестоко :-)
[22:40:51] <Kakadu> оффтоп: кто знает способы представления математическиз  данных кроме MathML?
[22:41:15] <Kakadu> математичеких данных
[22:45:33] <Typhon> tex? или в каком смысле "представление" и каких данных?
[22:45:49] <Kakadu> математических формул
[22:45:57] <Typhon> тогда точно tex
[22:46:04] <Typhon> TeX
[22:46:06] <Kakadu> ну ещё MathML
[22:46:16] <Kakadu> ещё чтонить можно вспомнить
[22:46:45] <Kakadu> просто мне надо сделать обзор, а про mahML другой человек будет расказывать
[22:47:16] <Typhon> а, если обзор, то в msword, openoffice какие-то свои редакторы формул
[22:48:52] myxomop87 вышел(а) из комнаты
[22:49:10] <Kakadu> угу, msEquation и OO Math
[22:49:54] <Typhon> но оно всё не нужно, потому что есть TeX
[22:50:26] <Kakadu> ну это понятно
[23:10:13] ygrek вышел(а) из комнаты
[23:10:20] ygrek вошёл(а) в комнату
[23:17:20] ygrek вышел(а) из комнаты
[23:17:29] ygrek вошёл(а) в комнату
[23:18:10] ermine вышел(а) из комнаты
[23:24:50] <gds> ygrek:
> обойти этот баг flexlink'а под cygwin'ом никак не получается
у flexlink есть аргумент, говорящий, под какую платформу нужно.  Может с ним поиграться?
вторая мысль: под mingw хорошо работает flexdll 0.19 -- может её взять?
[23:27:29] <ygrek> так под cygwin он bash не зря пускает ибо если gcc симлинком то cmd его выполнить не сможет :)
[23:27:51] <ygrek> и мне нужен именно cygwin (откуда кстати mingw берётся - в ocaml README написано mingw/msys _не_ ставить)
[23:28:26] <ygrek> я сетапаю build slave и хочу сделать всё максимально чисто и по инструкции чтобы результаты были воспроизводимые
[23:29:31] <ygrek> но похоже с этим уже облом (кстати это очевидно бага bash'а которые втихую стирает бэкслеш)
[23:34:17] <gds> пиши в caml-list, ибо такую штуку должны лечить там.  Опиши относительно полно расклад, пусть лечат.  А то расслабились.
[23:40:58] <ygrek> я просто пока и сам не знаю как фиксить
[23:41:11] <ygrek> тупо менять слеши после open_temp_file?
[23:42:11] <gds> а можно перекомпилировать?  Тогда да.  Я прикидывал, как патчить бинарник, если перекомпилировать нельзя, и ни к чему не пришёл.
[23:43:07] serp256 вошёл(а) в комнату
[23:44:09] <ygrek> та как-нибудь рекомпильну, чего уж там
[23:44:37] komar вошёл(а) в комнату
[23:50:06] <gds> кстати, у меня раньше было предубеждение о том, что нельзя хранить исполняемые бинарники в репозитории.  Как посмотрел на flexdll -- поборол его остатки.
Я сейчас на одной из работ долблю foxpro/dos 2.6 (параллельно развлекаюсь теорией категорий), так я там даже *.dbf + *.idx запихал в dvcs, и результат по нраву.  Так что, бинарники -- можно.
[23:51:13] serp256 вышел(а) из комнаты
[23:51:48] serp256 вошёл(а) в комнату
[23:52:04] <Kakadu> у меня на работе в свне хранятся даже картинки жпеговские. Когда юзер загружает на сервак картинки, то они автоматически лезут в свн, от чего исходники занимают Гб и тормозят неподетски
[23:53:49] <gds> сурово.  Объём фигня, а тормоза -- такое дело, от которого лучше избавляться.  Хотя, может, бывают случаи, когда действительно надо осуществлять такое.
[23:54:56] <Kakadu> что самое интересное это всё у меня на работе в ntfs чекаутится (если полностью) около часа - на ноуте  с ext3 - 5 минут
[23:55:42] arhibot вышел(а) из комнаты
[23:56:24] <gds> подними какую-нибудь штуку, которая делает виртуальный диск, контейнером которого является файл.  пусть даже оно будет шифровать -- drivecrypt, truecrypt -- имхо будет быстрее.
[23:56:53] <gds> за час, пока идёт чекаут, можно проверить обе софтины :)
[23:57:27] <Kakadu> попробую)
[23:57:51] <Kakadu> стоп-стоп, мне что, виртуалбокс использовать??
[23:58:07] <Kakadu> установить линукс и программировать?)
[23:58:51] <gds> ntfs под виндой?  туда эти штуки ставятся хорошо, d.c. пользую, t.c. пробовал.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!