Home
Objective Caml
ocaml@conference.jabber.ru
Суббота, 21 января 2012< ^ >
f[x] установил(а) тему: 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:14:56] ftrvxmtrx вошёл(а) в комнату
[00:18:29] klapaucius вышел(а) из комнаты
[01:25:16] Typhon вошёл(а) в комнату
[01:43:58] Kakadu вышел(а) из комнаты
[01:47:08] Andrey Popp вышел(а) из комнаты
[01:47:08] Andrey Popp вошёл(а) в комнату
[01:50:01] Typhon вышел(а) из комнаты
[01:56:27] dzhon вышел(а) из комнаты
[01:57:59] ermine вышел(а) из комнаты
[02:12:04] ftrvxmtrx вышел(а) из комнаты
[02:12:19] ftrvxmtrx вошёл(а) в комнату
[02:22:56] bobry вышел(а) из комнаты
[02:23:05] bobry вошёл(а) в комнату
[02:39:30] gds вышел(а) из комнаты
[03:38:50] bobry вышел(а) из комнаты
[04:16:39] Andrey Popp вышел(а) из комнаты
[04:17:26] ftrvxmtrx вышел(а) из комнаты
[04:17:46] ftrvxmtrx вошёл(а) в комнату
[04:21:09] ftrvxmtrx вышел(а) из комнаты
[04:22:44] ftrvxmtrx вошёл(а) в комнату
[04:23:41] ftrvxmtrx вышел(а) из комнаты
[04:24:36] ftrvxmtrx вошёл(а) в комнату
[04:31:10] ftrvxmtrx вышел(а) из комнаты
[04:32:00] ftrvxmtrx вошёл(а) в комнату
[07:28:48] letrec вошёл(а) в комнату
[08:31:48] Andrey Popp вошёл(а) в комнату
[09:06:09] bobry вошёл(а) в комнату
[09:51:39] bobry вышел(а) из комнаты
[13:00:50] ermine вошёл(а) в комнату
[13:13:07] Typhon вошёл(а) в комнату
[15:04:00] gds вошёл(а) в комнату
[15:23:06] bobry вошёл(а) в комнату
[15:43:04] komar вышел(а) из комнаты
[15:52:13] komar вошёл(а) в комнату
[15:53:50] komar вышел(а) из комнаты
[16:05:59] <bobry> все наверное уже видели, один я слоу http://alaska-kamtchatka.blogspot.com/2008/03/ocaml-and-typeful-programming-annotated.html
[16:06:52] <bobry> gds: у меня кстати к тебе вопрос по биологии, можно?
[16:09:24] komar вошёл(а) в комнату
[16:11:30] komar вышел(а) из комнаты
[16:11:57] <gds> bobry: я лох в биологии, поэтому без проблем давай.
[16:13:10] <bobry> gds: сегодня на экзамене возник вопрос -- что происходит с органеллами во время митоза, если для каких нить митохондрий все более менее очевидно (их больше чем одна -- можно и поделиться), то вот например с ЭР непонятно ничего :) ты случаем не знаешь? линк на статью приветствуется, беглое гугление ничего не раскрыло
[16:14:08] bobry тоже в биологии лох, но это только мотивирует хоть чуть чуть в ней разобраться :)
[16:15:05] <gds> bobry: знаний на этот счёт у меня нет.  вроде, как я понимаю, простые органеллы достраиваются после деления (таким же образом, как половина нехватающих митохондрий), но я очень не уверен.  не принимай мои слова серьёзно, лучше изучай манулы.
[16:15:51] <bobry> найти бы еще эти мануалы, поверить что аппарат гольджи достраивается довольно сложно, слишком уж он хитрый
[16:16:26] <gds> либо делится, либо достраивается, выбора ведь нет :)
[16:16:54] <bobry> ну это да
[16:18:07] <bobry> на вики про него пишут что "вроде как достраивается в телофазе", но пруфа нет :)
[16:19:21] komar вошёл(а) в комнату
[16:21:02] komar вышел(а) из комнаты
[16:23:17] Kakadu вошёл(а) в комнату
[16:28:43] komar вошёл(а) в комнату
[16:51:20] <gds> bobry: а вот и видел, но забыл ту статью аляскикамчатки.  Освежил в памяти всё по ссылкам, опять понравилось.
[16:56:04] <letrec> bobry: ссылка супер
[16:56:26] <bobry> ага, было бы круто ее обновить и в камловики
[16:56:31] <bobry> все таки 3 года прошло
[16:56:33] <letrec> интересно насколько "Many of the techniques are not applicable to OCaml, which lacks higher-ranked polymorphism" актуально сейчас в свете последних версия языка
[16:57:15] <letrec> допустим first class modules (я с ними ещё не разбирался) что-то меняют?
[16:57:26] <letrec> а GADT'ы?
[17:01:07] <letrec> надо видимо ждать gds и f[x]
[17:10:50] <gds> ну, higher-ranked есть (rank2), но насколько higher -- не знаю пока.  как-то не видел практически-полезных техник в х-е, использующих этот higher-ranked, чтобы у меня было желание это дело спортировать.
fcm что-то меняют, но надо смотреть на конкретные применения.  gadt'ы реализуются спокойно и без особого полиморфизма (вроде по той ссылке что-то было).
[17:16:39] <gds> кстати, эти гадты даже двояко реализовать можно, второй пример (без ref option) в камломануале, через две функции.  а можно гадты с подтипизацией, но с ними кое-что не срослось для практических применений.
да и вообще, сейчас вот делаю с гадтами и пока не дошёл до стадии, когда они реально нужны.  поглядим, стало быть.
[17:17:35] <gds> то есть, в моём примере достаточно было бы не хранить type equality, а просто ограничивать конструкторы конкретным типом.  но я ещё не всё сделал, может в будущем вылезет.
[17:17:55] <gds> гадты полезны для edsl, а у меня он не такой уж "e-".
[17:19:57] <ermine> gadиtь
[17:20:29] komar вышел(а) из комнаты
[17:22:45] <gds> есть подозрение у меня, что о подобных "клёвых техниках" достаточно лишь иметь общее представление, а кодить лучше как-нибудь попроще, там, где приемлемо.  а если уж точно нужно сложное, тогда да, изучать плотно.
[17:25:09] <ermine> переходить на хаскиль
[17:26:01] <ermine> Kakadu: как там твой дипдлом продвигается?
[17:26:46] <Kakadu> да вот к экзамену готовлюсь
[17:28:03] <ermine> какому?
[17:28:30] <Kakadu> философия
[17:28:41] <ermine> а я тут бьюсь головой об свой ast в парсилке, хочу встроить туда еще одну штуку, но никак не пойму с каким типом
[17:29:11] <Kakadu> а я задал про диплом вопрос, а все либо говорят, либо думают что я наркоман
[17:29:40] <gds> Kakadu: ты так говоришь "наркоман", как будто это что-то плохое.
[17:31:55] <ermine> gds: как классно ты утешаешь :)
[17:40:40] <gds> ermine: да вообще, кроме опиатов, алкоголя и никотина по сути "страшных" норкотеков нет.
[17:44:47] <ermine> gds: ты говоришь так, как будто камло - не для ведущих здоровенный образ жизни
[17:45:18] <gds> среди камло#$ов по-разному бывает.
[17:46:39] <ermine> здоровяки остаются на с++/java
[17:47:00] <letrec> читая Олега создаётся впечатление, что он инопланетянин
[17:47:06] <letrec> нихрена непонятно
[17:47:21] <letrec> как хардкорная фантастика
[17:47:44] <gds> да, он действительно ненормальный, но в хорошем смысле слова.  а ещё, собственно, не только контент поражает, но и скорость его генерации.
[17:48:22] <gds> впрочем, кое-что по его папирам я могу рассказать, если будут конкретные вопросы.
[17:50:05] komar вошёл(а) в комнату
[17:50:21] <letrec> расскажи про GADT'ы на примере Show c option ref - я у тебя видел такое
[17:50:37] <gds> Show -- это что?
[17:52:04] <letrec> я у тебя видел какую-то шизу, вроде как имитирующую тайплкасс Show с какими-то option
[17:52:12] <letrec> сейчас попробую найти
[17:52:18] <gds> попробуй, не помню сходу.
[17:53:06] <gds> я лучше расскажу про gadts в целом.
[17:53:31] <ermine> в камле нет ADT из аббревиатуры GADT
[17:53:36] ermine hides
[17:53:51] <gds> ermine, не прячься, есть они.
[17:54:59] <ermine> gds: у меня тут в парсинге часто применяется костыль fun t -> A t, к примеру, и это меня ужасно бесит
[17:59:50] <letrec> это было что-то типа EQ из http://okmij.org/ftp/ML/GADT.txt
[18:00:06] <letrec> в упор не понимаю, что там происходит
[18:00:23] <letrec> и ещё более интересно что нужно знать, чтобы понимать
[18:02:55] <ermine> чудес не бывает, в камле всё жестоко типизируется гвоздями
[18:03:45] <gds> во, придумался пример.  letrec, готов поработать над гадтами?
[18:04:35] <letrec> их же не зарелизили ещё, не?
[18:04:56] <gds> гадты были в окамле с самого начала.  как только полиморфизм появился.
[18:05:09] <gds> "власти всё скрывают!"
[18:05:26] <letrec> есть пример их мотивирующий?
[18:05:59] <gds> вот, накалякал.  но для полного понимания это будет в стиле "я прошу тебя кое-что сделать и показать результат", а потом будем результат мучить.
[18:06:20] <gds> по той ссылке -- так называемое "кодирование existentials через двойное отрицание" -- там, где
type ('a,'b) fmt =   | FLit of < m_flit : 'w. (('a,'b) eq -> string -> 'w) -> 'w > ...
[18:06:51] <gds> само кодирование смотреть в пирсовском TaPL, там есть целая глава.  правда вот, мне она понимания не особо дала.
[18:07:00] <letrec> звучит уже страшно
[18:07:24] <letrec> я по-моему на экзистенциалах и застрял в последний раз
[18:08:19] <gds> но гадты это совершенно другое.  хотя по той ссылке их используют вместе.  про это кодирование рассказывать у меня не получится, я его не слишком понимаю.  то есть, использовать/модифицировать под нужды могу, но это "кристалльно-ясное понимание".
[18:15:06] <ermine> начинать объяснять имхо надо с полиморфизма
[18:16:07] <ermine> gds: напиши научно-популистическую статью в своем журнале :)
[18:16:28] <gds> что именно описать?
[18:18:33] <ermine> что  таое гадты и как их изобразить в камле
[18:19:29] <gds> нужен подопытный кролик.
[18:19:41] <ermine> про знаменитую лямбду лучше не писать, надо брать чонить более хозяйственное
[18:20:17] <gds> из хозяйственного придумался
type t 'a = [ Int of int | Bool of bool | Add of t int and t int ];
и его вычисление функцией
eval : t 'a -> 'a
[18:21:45] <ermine> блин, опять упрощенный вариант лябды
[18:22:52] <ermine> но вообще годится
[18:22:57] <bobry> да, заколебало что все GADT примеры всегда expr. calc
[18:23:23] <gds> примеры с show не очень-то умны.  достаточно определить
type showable = unit -> string
sh_int : int -> showable
sh_str : string -> showable
и всё.
ну или через объекты, чтобы побольше операций было,
type sometype = < show : string ; someshit : ... >
[18:24:20] <gds> тут фишка в том, что сами по себе гадты -- штука тупая.  потому и "типизированные вычисления".  впрочем, мне в шелл дсл они пригодятся, но не там, где в шелл транслирую (хотя может и там), а там, где буду этот дсл вычислять в камле.
[18:24:25] <bobry> gds: а ты случаем int map для камло не искал какое то время назад?
[18:24:40] <ermine> bobry: трудно придумать пример с разноместными штучками (оператор, переменная)
[18:24:42] <gds> bobry: что это?
[18:25:03] <bobry> gds: т.е. IntMap
[18:25:23] <ermine> gds: давай лучше sql, у тебя уже есть пример про AF
[18:25:29] <bobry> а то выяснилось что она в батарейка есть
[18:25:35] <bobry> нафига в sql gadt?
[18:25:42] <bobry> точнее каким местом там его
[18:25:50] <bobry> s/его/их
[18:27:56] <ermine> bobry: в sql разнотипные поля таблиц!
[18:29:36] <ermine> bobry: у вас барбара уже умеет инсталлить оазис с потрохами куда надо?
[18:29:53] <gds> ermine: всё ждём от тебя brb.conf!
[18:30:27] <ermine> gds: а смысл, если после сборки барбарой использовать что-либо невозможно
[18:32:55] <gds> чтобы локально ставить оазис!
[18:34:25] <bobry> ermine: потому что барбара не для этого (пока что)
[18:34:32] <bobry> она умеет только per-project environments
[18:34:54] <ermine> да я тут болею парсером
[18:35:42] <ermine> yaml резко отличился от других примеров текстов, которых надо парсить, из-за него надо думать об параметризованной продукции
[18:36:30] <ermine> а это - надо иметь немусорный способ добавлять расширения в основной код парсера
[18:37:23] <gds> используй динамически-типизированные значения.  я так делал в подобных случаях.  внутри мономорфно, а снаружи -- вполне типизированно.
[18:38:26] <ermine> а чему равен 'extension t там где не нужны расширения?
[18:39:08] <gds> я предлагал более другую штуку.
впрочем, если хочешь параметрический тип, то хоть unit.
[18:39:21] <ermine> короче я пока думаю в другом направлении
[18:40:52] <ermine> а вообще проблема не в типе
[18:43:34] <ermine> эту задачу уже решил аффтар camlp4 через блоки EXTEND .. END, там легко добавлять расширения
[18:45:35] <ermine> Kakadu: когда экзамен?
[18:47:12] <ermine> похоже зубрит труды Нищце
[18:48:53] <Kakadu> ermine: в понедельник
[18:49:19] <gds> кстати, там, где я работаю, сейчас серьёзно думают привлечь к работе доктора философских наук.  что характерно, по специальности.  что удивительно, я этому буду рад.  вот такой вот казус.  а вот специфики не выдам, не могу.
[18:52:19] ermine знает только безработного эксперта по Японии
[18:54:57] ermine задумчиво смотрит на функциз sprintf, которым придется сгенерить код, который надо будет распарсить camlp4, чтобы тот еще раз сгенерил код...
[18:55:17] <ermine> вот ведь философский вопрос - откуда должен браться код
[18:56:31] <gds> из жопы гагага
[18:59:49] <ermine> это легко, если руки оттуда растут
[18:59:58] komar вышел(а) из комнаты
[19:05:12] komar вошёл(а) в комнату
[19:05:39] komar вышел(а) из комнаты
[19:08:43] komar вошёл(а) в комнату
[19:11:38] komar вышел(а) из комнаты
[19:12:58] <Typhon> gds: не переводчика ли TAPL'а ?
[19:16:29] <gds> Typhon: не, вообще мало связанного с компьютерами человека, и именно по его специальности.
[19:27:57] <ermine> поиск божественных идей?
[19:28:47] ermine не представляет себе, где нужны философы, кроме как в исторических исследованиях
[19:30:46] <gds> например, в задаче "подвести кое-какую базу под набор фактов, принципов, воркфлоу", если сами эти сущности кое-как относятся к нетехническим вопросам.
[19:31:37] <Kakadu> ermine: что ты думашь об онтологическом доказательстве существования Бога у Рене Декарта?
[19:34:19] <ermine> Kakadu: думаю, что всё это - хорошо забытое известного и что философы нового и полезного не найдут, т.е. они не производят полезный продукт
[19:34:39] <ermine> который можно применить в хозяйстве
[19:34:57] komar вошёл(а) в комнату
[19:35:25] <ermine> как говорится, на бога надейся, но сам не прощай
[19:36:21] ermine вспомнила, что есть более крутой способ сгенерить код из расширения - через AST камла
[19:36:37] <ermine> ща попробуем этот путь
[19:50:04] letrec вышел(а) из комнаты: Replaced by new connection
[19:50:06] letrec вошёл(а) в комнату
[19:53:54] <ermine> понимание чистого ast камла - высший уровень дзена
[19:55:02] f[x] вошёл(а) в комнату
[20:03:55] Typhon вышел(а) из комнаты
[20:30:53] komar вышел(а) из комнаты
[20:39:49] <gds> да ничего там хитрого нет.
[20:42:08] <ermine> самая первая хитрость - найти где это, чтобы знать что опенить и какой тип указать
[20:42:48] <ermine> потом подумать о том, как в ast ыглядит безвинное "add 1 2" и решить применить квотации, чтобы не страдать поисками
[20:43:04] <gds> обе проблемы -- не проблемы вовсе.
[20:44:11] <ermine> далее, как-то изобразить в форме ast match with с несколькими ветвями, тут квотацией не решить эту задачу
[20:49:00] <gds> ты встала на порочный путь использования синтаксических расширений.  по(ка)+йся!
[20:52:16] <ermine> Kakadu: не, я осознала, что ast вообще - это божественный рулез, ибо это абстрактный рулез
[20:53:13] <gds> ermine: да, ленка, всё так.
[20:53:35] <bobry> кстате, а есть для камло расширение добавляющее explicit imports? типа х-левского import Foo (bar, baz)?
[20:53:45] <ermine> я еще это чудо не скомпилила
[20:54:30] <gds> bobry: да, есть.
module Foo = struct include Foo let bar = bar let baz = baz end open Foo
[20:54:49] <Kakadu> мрррргрррбарррххх
[20:55:40] <bobry> gds: нещитается
[20:55:46] <ermine> жуть, есть же попроще
[20:56:11] <bobry> ну да, let bar = Foo.bar and baz = Foo.baz
[20:56:47] <ermine> еще проще можно, надо вспомнить синтаксис оператора include
[20:57:16] <bobry> удивительно что include это не функция
[20:57:22] <bobry> учитывая что модули теперь first class
[20:57:45] <gds> include должно быть не функцией всегда и везде.
[20:57:51] <bobry> gds: почему?
[20:58:17] <gds> а какая ещё функция внесёт тебе в окружение кучу значений, кроме своего собственного?
[20:58:50] <bobry> gds: ну сайд эффекты же разрешены :)
[20:59:03] <gds> и чо.
[21:05:48] <ermine> у него верблюд не боится грязи
[21:05:51] komar вошёл(а) в комнату
[21:08:08] <gds> вопрос в другом: как вызов функции может модифицировать окружение, да ещё и таким извращённым образом?
[21:16:25] Typhon вошёл(а) в комнату
[22:02:25] <bobry> gds: ну если в динамическом языке то ок
[22:02:36] <bobry> в камло действительно слегка неочевидный сайд эффект
[22:02:46] <bobry> но в любом случае -- хочу selective open
[22:07:05] <ermine> о, недоделанный хозяйственный комбайн скомпилился, что бы там gds ни думал!
[22:21:36] <ermine> так, следующая загадка, сотворенная чьими-то мужскими лапками...
[22:29:59] letrec вышел(а) из комнаты
[22:46:53] bobry вышел(а) из комнаты
[23:23:35] ftrvxmtrx вышел(а) из комнаты
[23:27:35] ftrvxmtrx вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!