Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 7 декабря 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:00:07] <Kakadu> черт, и там патченый
[00:00:25] <Kakadu> грррррррррраррррхх
[00:00:47] <Kakadu> bobry: короче барбара сегодня ничему больше не научится
[00:00:57] <Kakadu> bobry: если только ты не сделаешь чтонить
[00:01:22] <bobry> у janest везде такие файлы
[00:01:58] <bobry> я увы ничего не могу сделать, потому что ошибка внутри OASISParse.from_file
[00:02:10] <bobry> ле галл обещал включить этот патч в грядущий релиз, но когда оно еще будет
[00:02:13] <Kakadu> ну научи барбару чемунить другому
[00:02:34] <Kakadu> потесть как ерминовская фигня собирается чтоли
[00:44:15] Kakadu вышел(а) из комнаты
[01:04:13] Typhon вошёл(а) в комнату
[01:08:09] Typhon вышел(а) из комнаты: Replaced by new connection
[01:08:10] Typhon вошёл(а) в комнату
[01:27:21] <bobry> судьба ниха печальна ..
[04:45:20] Typhon вышел(а) из комнаты
[09:51:23] klapaucius вышел(а) из комнаты
[10:36:57] Typhon вошёл(а) в комнату
[10:38:06] <Typhon> """if there would be a *nice* OCaml-T-Shirt available""" бггг
[10:39:00] <Typhon> gds: вчера поздно пришёл, да и вроде нашлась дата-структура нужная, поэтому не стал окасаки смотреть :-( но если таки нужна ещё, то сейчас книга с собой, вроде бы CatenableDeque нужен
[11:37:47] <f[x]> bobry: без паники, я уже почти пофиксил реаллайф, и вообще код то можно писать
[11:46:53] <Typhon> так эта, ни роадмапа, ни списка тасков, а по концепту не всё утверждено :-( если получится побить на таски какие-то, будет офигенно и дело быстрее пойдёт, я думаю %)
[11:50:15] <gds> Typhon: благодарю за наводку, буду читать про неё.
[11:51:03] <Typhon> ежели што — пинай тогда — буду цопипастить с бумаги! %)
[11:52:43] <gds> да где-то можно ликтронное найти, или даже чисто по названию структуры что-то найдётся.
[12:00:49] <gds> ещё по ключевому слову нашлось https://bitbucket.org/jhw/oni/src/ef09a44a61ea/cf/cf_deque.ml , более хитрое (судя по всему), но и более ссыкотно использовать.
[12:05:15] <Typhon> злодеи показывают х-ль сорсекод http://books.google.com/books?id=SxPzSTcTalAC&pg=PA191&lpg=PA191&dq=CatenableDeque+okasaki&source=bl&ots=DFlVTzGgZ_&sig=6z0EY92srPd-Pl9PIRhxAGb-7CA&hl=en&ei=Ax7fTp6OAYv3sgaT_8CLCQ&sa=X&oi=book_result&ct=result&resnum=2&ved=0CCUQ6AEwAQ#v=onepage&q=CatenableDeque&f=false
[12:06:19] <Typhon> gds: а ну вот в диссертации http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf на 115 странице есть
[12:14:11] <gds> Typhon: последнее беру как базу для кодения.  глядишь, если не отвлекут, сделаю.  но там вообще сурово как-то.
[13:02:09] Kakadu вошёл(а) в комнату
[13:28:44] <gds> уф.  вник полностью в ту, сложную очередь, которая O(1) для cons/snoc, tail/init, head/last, append.  с закрытыми глазами не реализую, но близко к тому.  красиво сделано.
[14:00:26] <f[x]> мораль: параметризуйте абстрактные алгоритмы по compare (можно опциональным параметром)
[14:02:35] <gds> или по ti 'a = < cmp : 'a -> 'a -> cmp_res ; .. > , из которого один раз доставать ti#cmp и его использовать без оверхеда от объедктов.
[14:03:04] <f[x]> угу
[14:11:30] shaggie вошёл(а) в комнату
[14:20:38] <gds> ну и как это называется...  как только решил "блин, нафиг мне кодить эти catenable deques, поищу готовое, наверняка есть!" -- так оказалось, что тут http://hg.ocaml.info/release/pure-fun/file/tip/ это не реализовано почему-то, а остальное, что ищется, это cf_deque.ml.
[14:20:43] bobry вошёл(а) в комнату
[14:23:13] gds прочитал в рассылке про t-shirts.  рука уверенно закрыла лицо на десятки секунд.
[14:23:33] <bobry> gds: а целых две темы про community прочитал?
[14:23:54] <gds> там их больше даже.  пока читаю.
[14:24:05] <gds> а, две.
[14:24:12] <f[x]> вот оно - истинное лицо камлевого "коммунити" - лишь бы футболки на халяву получить!
[14:24:17] <bobry> может я не заметил, но по моему от inria не было ни одного ответа
[14:24:23] <bobry> f[x]: там не про халяву :)
[14:24:45] <f[x]> bobry: ну мы то знаем истинные мотивы!
[14:28:12] ermine вошёл(а) в комнату
[14:29:44] <ermine> что нового?
[14:33:05] <gds> дочитал.  уныленько как-то.  пообсуждают и разойдутся.
[14:35:14] <ermine> gds: кста как там окасаки, рулит?
[14:41:39] klapaucius вошёл(а) в комнату
[14:47:38] <gds> ermine: и бибикает.
[15:06:11] komar вышел(а) из комнаты: Replaced by new connection
[15:06:12] komar вошёл(а) в комнату
[15:11:55] ftrvxmtrx вошёл(а) в комнату
[15:15:24] <gds> а вот главу 7 из http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf стоит почитать всем, интересные идеи, даже если забивать на реализацию / код / рощоты.
[15:16:57] Typhon вышел(а) из комнаты
[15:20:38] ermine скачала пдф
[15:21:03] Typhon вошёл(а) в комнату
[15:22:18] <ermine> а то у меня тут интересная задачка - как сделать список и какого типа из значений типа type t = A of t * t | B of t * t, имея в виду, чтобы собрать в список значения одного типа, то бишь сделать иерархию более плоской
[15:29:38] ftrvxmtrx вышел(а) из комнаты
[15:32:01] <gds> ermine: ничо не понял.
[15:33:42] <ermine> ну да ладно
[15:43:05] komar вышел(а) из комнаты
[15:47:12] ftrvxmtrx вошёл(а) в комнату
[15:47:55] komar вошёл(а) в комнату
[16:15:24] <ermine> мда, писать генератор парсилки - весьма полезная штука для изучения парсилок, сколько про синтакстического сахару узнаешь...
[16:17:39] <ermine> например, в чистом PEG сахаром являются выражения e?, e+ и &e и думая про первые две сахаринки, становится интересно, как избавить грамматику от epsilon (пустых строк), чтобы получить шанс сделать DFA
[16:18:20] <ermine> Kakadu: как там твои грамматики и кутя?
[16:21:42] <ermine> ой нет, гоню, e+ не создает проблем с пустой строкой
[16:22:19] <ermine> а e? - это альтернатива e / epsilon
[16:25:49] <Kakadu> да не особо
[16:32:19] <bobry> надо же, х-ль умеет матчить рекорды как камло 3.12 { foo }
[16:45:50] <ermine> в х-ле удобнее - там функциональные алгебраические типы, а не просто буквенные
[16:54:34] <gds> ermine: разверни мысль.
[16:58:26] <Typhon> вангую, что имеется ввиду, то что конструктор типа — функция
[16:58:42] <gds> а.  Это говно не нужно.
[17:00:55] <bobry> ну как, с "этим говном" на самом деле удобнее
[17:01:04] <bobry> не надо писать (fun x -> Foo x)
[17:01:07] <bobry> для каждого конструктора
[17:02:29] <Kakadu> помню я статью лероя добавлял в вику, где он писал про это
[17:02:31] <gds> а потом добавляешь/убираешь ему аргументы и удивляешься, почему типы не сходятся.
[17:02:37] <ermine> gds: сам разверни свою мысль
[17:03:29] <ermine> я тут постоянно напарываюсь на то, что хочу партиал апплишешн конструкторов и дополнять по ходу дела
[17:04:22] <gds> плохо хочешь, потому что внутри они будут представлены всё равно как функции.
[17:04:51] <ermine> разве A a в камле - это конструктор? Это просто буква A и какой-то a
[17:05:26] <ermine> и главное, не декларативно
[17:05:51] <gds> A -- это конструктор.
[17:06:38] <ermine> нефункциональный
[17:07:32] ermine еще заодно кусает тех, кто смеет камловские типы называть алгебраическими
[17:07:46] <gds> бредятина * 2
[17:10:09] <ermine> ну алгебра же предопределяет действия над типами, а тут ты можешь только тупо матчить
[17:10:33] <ermine> ну может еще создать однократно
[17:13:07] <gds> алгебра, чтобы ты знала, определяет действия не над типами, а над значениями.  Тупой пример: алгебра натуральных чисел с определёнными на ней 0, 1, +, -, *, /.
[17:14:58] <ermine> это чистая алгебра, сотворенная в Таджикистане
[17:15:11] <ermine> а какая алгебра применима к нашим конструкторам?
[17:16:08] <bobry> логгеров нормальных под х-ль нет, что за фигня
[17:16:28] <bobry> в каждом проекте по своему модулю Logger
[17:18:21] <ermine> ну у меня тоже свой чудо-логгер
[17:23:36] <ermine> т.е. в камле тоже нет стандартного или нормального логгера
[17:33:13] <klapaucius> Странное возражение. для этой алгебры типы и есть значения.
[17:33:30] <klapaucius> Это же операторы над типами - лямбда-омега.
[17:36:15] <komar> ermine: в lwt разве не запилили еще?
[17:38:33] <ermine> komar: ну это еще юзать весь lwt надо
[17:38:39] <ermine> и монадно
[17:40:18] <ermine> у алгебры есть законы какие-нить: ассоциативные, коммуникативные и тд, расскажите про подобные законы в отношении камлевых конструкторов
[17:40:42] ermine устраивается поудобнее в ожидании интересной и поучительной лекции
[17:43:22] <ermine> у монад такие законы имеются
[17:43:59] <ermine> впрочем, речь же не про монады
[17:44:01] <klapaucius> В отношении конструкторов значений у них никаких свойств нет.
[17:44:30] <klapaucius> Конструкторы значений - это просто функции, производящие население типов.
[17:46:41] <klapaucius> У типа 0 значений нет, и конструктор для него не определить.
[17:47:03] <klapaucius> У типа 1, очевидно, одно значение и один конструктор без параметров.
[17:47:23] <ermine> ну ладно, какая-то бедная алгебра, призванная только порождать значения другого типа
[17:47:36] <klapaucius> + для типов ассоциативна и коммутативна, нейтральный элемент - 0.
[17:48:09] <klapaucius> При определенной фантазии можно сказать, что для атд в окамле это выполняется.
[17:49:34] <klapaucius> хотя нет, нельзя сказать что ассоциативна даже при некоторой фантазии - группировать скобками-то нельзя.
[17:50:17] <klapaucius> В принципе, в окамле операции + как таковой нет, но можно записать тип - результат сложения.
[17:50:28] <ermine> вот только жалко, что нельзя передать функции конструктора половинку какого-нить конструктора
[17:50:58] <klapaucius> В каком смысле?
[17:52:34] <ermine> type a = A of b and b = C of int  | D of int, берем функцию, которая конструирует значение типа a, и получает на входе C или D
[17:57:08] <klapaucius> Ну, наверное, все-таки тип при С или тип при D - С и D ведь просто ярлыки, чтоб + не превратился в U.
[17:59:01] <ermine> я же выше сказала - буквенные типы
[17:59:27] <ermine> а вот можно еще поглумиться на тему, являются ли тогда в хаскеле алгебраические типы конструкторами?
[18:01:39] <ermine> кстати, надеюсь что не ошибаюсь, но в мануале по камлу нет слова "алгебраический"
[18:04:37] <klapaucius> В хаскеле ситуация с алгебраическими типами не отличается от окамловской (с неважными в данном случае оговорками)
[18:05:54] <ermine> оговорочки
[18:06:05] <klapaucius> Но можно определить функции над типами + и * и функцию, преобразовывающую обычный тип в алгебраическое представление
[18:06:37] komar вышел(а) из комнаты: Replaced by new connection
[18:06:38] komar вошёл(а) в комнату
[18:09:46] <klapaucius> Такие типы уже можно на части разбирать. а со встроенными - проблема.
[18:13:19] <klapaucius> Но чтоб сделать функцию о которо вы говорите - нужна операция U и, следовательно, сабтайпинг.
[18:14:25] <klapaucius> Или я просто вопрос не понял.
[18:18:40] <klapaucius> Потому что сами по себе алгебраические типы не бывают A of a | B of b ... Z of z . Операция + двухместная, она дает аргументам теги, по которым их можно отличать L и R например - вот и все. Никакой больше работы с тегами нет.
[18:32:02] <klapaucius> ermine: Короче говоря критерий простой. Какой у вашей функции тип? если вы его в тех алгебраических типах что есть не напишете - значит даже самые первоклассные алгебраические операции над типами + и * не помогут. т.е. если функция A U B -> A + B, то значит нужен сабтайпинг. Который, в принципе тоже реализуется если есть операторы над типами.
[18:37:22] <ermine> а в камле мы можем только производить значения другого типа, операция + в твоей алгебре не меняет тип значения
[19:35:22] <gds> "I'm responsible for the introduction of OCaml in two companies( www.incubaid.com <http://www.incubaid.com> , www.amplidata.com <http://www.amplidata.com> )."
надо бы посмотреть, как они к real world относятся.
[19:51:07] <Typhon> http://www.dimino.org/ocaml-3.12.1-generic-print.patch пробовали?
[19:52:07] <Kakadu> ппц
[19:52:08] <gds> не пробовал, малоинтересно + мало личных ресурсов.
[19:52:13] <f[x]> Generic printer patch <- wut?
[19:52:17] <f[x]> синхрон
[19:52:24] <Kakadu> у меня дефолная открывашка для этих файлв это вайновский болкнот
[19:52:49] <f[x]> но как
[19:54:22] ermine вышел(а) из комнаты
[19:54:36] <f[x]> а, новый примитив который раскрывается компилером с учётом типоинфы
[19:54:41] <f[x]> а почему этого раньше не сделали??
[19:54:53] <gds> потому что не труЪ, очевидно.
[19:54:59] f[x] как-то такой вариант даже не придумал
[19:55:10] <f[x]> ну это тот же принтинг что и в топлевеле
[19:55:28] <f[x]> имхо вполне тру
[19:56:05] <gds> да ну, на такие мелкие плебейские потребности патчить компилятор -- не тру!  sprintf в руки, нигга!
[19:56:47] <Typhon> (надо вычеркнуть одну из "фундментальных проблем языка")
[19:56:55] f[x] не распознал сарказм в конце тяжёлого рабочего дня...
[19:57:10] <f[x]> что-то я с кастом принтерами не догнал пока
[19:58:38] <f[x]> а ля deriving судя по примеру - надо в контексте string_of_t задать все string_of_x для каждого x параметра типа
[20:03:09] bobry вышел(а) из комнаты
[20:05:21] ftrvxmtrx вышел(а) из комнаты
[20:40:32] <gds> как бы потестить код окасаки (и моё его переписывание) на корректность?  этанольная реализация deque через списки есть, предположим.  понятно, надо бы попробовать посовершать одни и те же действия над обоими структурами, и вот сейчас туда и иду, но там и исключения (в _opt надо оборачивать), и append над двумя разными очередями могут быть, поэтому нетривиально сходу написать тесты на соответствие эталону.
[20:48:06] <f[x]> gds: ну экстрактишь код из coq'а и все дела
[20:48:32] <gds> кстати, без шуток, про это же думал.  по гемору -- та же фигня, но гарантий больше.
[20:50:16] <gds> разве что сложно будет доказать не просто "простые шаги", типа "если сначала положим с одного конца, а потом возьмём оттуда, то будет ок", а более сложные -- "если пихать в один конец и потом брать из другого, то будет ок".
[20:51:39] <f[x]> фух, не только у меня проблемы с сарказмом
[20:52:15] <gds> не, я серьёзно думал об этом.  только без "экстрактить код".  в чятик писать не стал, так как интересно было, предложат ли такую идею.
[20:54:13] <gds> в общем, думаю устроить что-то типа стека из этих очередей, с командами типа "добавь элемент и дай результат", с редкими командами типа "добавь / скопируй очередь", с редкими же "слей два списка с вершины стека и добавь взад".  и на каждом шаге проверять результаты на раввинство.
[21:07:52] shaggie вышел(а) из комнаты
[21:08:16] ermine вошёл(а) в комнату
[21:38:34] Typhon вышел(а) из комнаты
[21:44:40] ftrvxmtrx вошёл(а) в комнату
[21:46:55] ftrvxmtrx вышел(а) из комнаты
[21:47:03] ftrvxmtrx вошёл(а) в комнату
[22:01:42] <gds> потестил на коротких списочках, не больше 30 элементов, окасака раза в два быстрее.  чуть подлиннее пробую взять -- байткод вылетает со Stack_overflow.  ни _tags: debug, ни ocamlrunparam=b не показывают ничего, кроме "вызвано из Pervasives.(@)".  а где этот append ловить -- хрен знает.
[22:05:24] <gds> хрен рассказал, где append ловить, но это не дело.  тесткейс с неуловимым сохранил отдельной ревизией.
[22:17:56] komar вышел(а) из комнаты: Replaced by new connection
[22:17:57] komar вошёл(а) в комнату
[22:32:51] <ermine> а как в camlp4 парсить выражение на камле?
[22:32:56] <gds> чото накодил я эту окасаку (кроме пары функций), но результат неудовлетворительный.  тупые списки в 3.7 раз быстрее, даже на списках большой длины, даже учитывая затратные на списках snoc и append.
[22:33:06] <ermine> parse_implem ихний выдает str_item
[22:33:37] <ermine> а мне надо экшны в генерилку встраивать
[22:36:09] ftrvxmtrx вышел(а) из комнаты
[22:44:16] <ermine> есть parse_expr, но пока непонятно из какого модуля выкапывать
[23:21:30] <bobry> как же досадно что в камле cons это (::), а тип (:)
[23:21:42] <bobry> после х-ля постоянно путаюсь, там с точностью до наоборот ..
[23:25:59] Typhon вошёл(а) в комнату
[23:37:19] <gds> bobry: досадно, что в х-е cons это (:), а тип это []
[23:39:50] <ermine> какого типа (::)? покажите мне!!!
[23:40:01] <gds> 'a -> 'a list -> 'a list
[23:40:34] <ermine> а ты покажи вывод в ocaml интерпретаторе
[23:41:18] <gds> # ( :: );
- : 'a -> list 'a -> list 'a = <fun>
[23:41:34] <ermine> а, пробелы
[23:41:46] <ermine> жульничество
[23:41:58] <gds> два жульничества, если честно.
[23:46:07] <gds> ermine: повторишь такой же вывод топлевела? :]
[23:47:40] <ermine> gds: не, тут у меня кампилятор утверждает, что у меня currified constructor, а я в упор его не вижу
[23:50:38] <gds> ну вот, загадку получила, чеши теперь репу :)
[23:53:30] <ermine> оно умеет видеть партиал аппликешны конструкторов! но не дает юзать эту фичу
[23:53:56] <gds> хехехе
[23:58:00] <ermine> а, таки это формирование списка в camlp4, жописец, надо опять искать как его жрать
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!