Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 24 августа 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся!
Конфигурация комнаты

GMT+4
[01:55:07] 604 вышел(а) из комнаты
[02:06:21] lelf вышел(а) из комнаты
[03:58:04] abiogenesis вошёл(а) в комнату
[03:59:36] abiogenesis вышел(а) из комнаты
[06:23:38] sevenov вошёл(а) в комнату
[06:47:02] john вышел(а) из комнаты: Replaced by new connection
[06:47:03] john вошёл(а) в комнату
[08:53:05] gds вышел(а) из комнаты
[08:54:27] john вышел(а) из комнаты
[08:58:06] sevenov вышел(а) из комнаты: Replaced by new connection
[08:58:07] sevenov вошёл(а) в комнату
[09:04:32] 604 вошёл(а) в комнату
[09:13:05] john вошёл(а) в комнату
[09:14:01] sceptic вошёл(а) в комнату
[09:22:35] sevenov вышел(а) из комнаты
[09:31:45] Mon вошёл(а) в комнату
[09:31:51] sevenov вошёл(а) в комнату
[09:58:13] Typhon вошёл(а) в комнату
[10:17:22] Mon вышел(а) из комнаты
[10:19:43] ygrek вошёл(а) в комнату
[10:27:31] Mon вошёл(а) в комнату
[10:42:30] gds вошёл(а) в комнату
[11:21:04] sevenov вышел(а) из комнаты: Replaced by new connection
[11:21:08] sevenov вошёл(а) в комнату
[11:29:42] <gds> "отговорите-птсо"
думается как-нибудь поизвращаться и сделать что-то наподобие labltk-подобного апи, но выдающего веб-страницы. конечно, сильно обрезанный (ибо js не хочу особо), возможно с дополнительными параметрами для указания деталей взаимодействия браузера и сервера.
[12:13:58] Typhon вышел(а) из комнаты: Replaced by new connection
[12:13:58] Typhon вошёл(а) в комнату
[12:18:39] <ygrek> учитывая что модель взаимодействия web и desktop разные.. всю страницу заворачивать в одну большую форму? в принципе для интранета может и сгодится.
[12:29:36] ygrek вышел(а) из комнаты
[12:39:16] <gds> вообще думал как-то через cgi. объявляют top loop -- оно рисует html, а всякие кнопки и подобное ведут на соответствующие cgi-запросы с передачей всех параметров формы на сервер, где он вызывает нужный callback.
пока нет общей картины в голове.
[12:45:29] gds вышел(а) из комнаты
[12:45:33] gds вошёл(а) в комнату
[12:46:47] ygrek вошёл(а) в комнату
[13:05:41] abiogenesis вошёл(а) в комнату
[14:31:33] john вышел(а) из комнаты
[14:37:13] abiogenesis вышел(а) из комнаты
[15:28:03] ermine вышел(а) из комнаты
[15:28:25] ermine вошёл(а) в комнату
[15:51:48] <gds> http://gds.livejournal.com/46041.html
отношение к тематике чятика -- если и возьмусь реализовывать, то известно на чём.
[15:55:16] john вошёл(а) в комнату
[15:57:27] <sceptic> эм.. а зачем такой изврат?
[15:58:09] <sceptic> правильно ли я понял: на входе C++ код компилятора X, тебе нужно получить C++ compatible код для компилятора Y
[16:00:56] <gds> нет, на входе -- скомпилированная библиотека (.a) компилятора X, а нужно дёргать её классы-объедкты из плюсового кода на Y.
[16:02:46] <gds> кстати, забыл предупредить: экспрессивная лексика инсайдэ.
[16:18:07] <sevenov> О, оффтоп!
[16:18:12] <sevenov> http://codepad.org/
[16:18:33] <sevenov> Не только хайлайт кода, но и выполнение его.
[16:20:13] <gds> миленько.
[16:20:43] <sceptic> боян
[17:03:36] <sevenov> sceptic, ну круто.
[17:14:48] <gds> в рот мне ноги! http://caml.inria.fr/pub/ml-archives/caml-list/2009/08/2959557c2868759f8c42f7e6df6d05e4.en.html -- что этот демон хочет от меня?!
[17:33:21] gds вышел(а) из комнаты
[17:33:52] Mon вышел(а) из комнаты
[17:48:55] telinit вошёл(а) в комнату
[17:49:28] telinit вышел(а) из комнаты
[18:00:28] Mon вошёл(а) в комнату
[18:36:49] xkrt_ вошёл(а) в комнату
[18:44:16] <xkrt_> драсте. а F# здесь является топиком? :)
[18:45:04] <ermine> это огрызок камля?
[18:45:36] <ermine> ygrek: тут?
[18:46:18] <xkrt_> понятия не имею, на камле не писал. вообще ФП мало использовал, только лямбды, мапы, редусы в питоне )
[18:46:38] <ygrek> да, F# вполне, как бедный родственник камля :)
[18:47:15] <xkrt_> а почему бедный?
[18:47:37] <xkrt_> я слышал окемл кривой под виндой
[18:47:41] <ygrek> его ж microsoft гнобит
[18:47:58] <xkrt_> помню хотел его пару лет назад посмотреть, что-то там было с отладчиком под виндой, не работал вроде..
[18:48:08] <ygrek> сейчас уже работает
[18:48:13] <ygrek> но мне лично не нужен был ни разу
[18:48:16] <ermine> ygrek: если я для Map или Set пишу модуль типа данных
module SmthOrd = struct type 'a t = 'a smth val compare = mycompare end, то как можно дополнить этот тип в Map.Make(SmthOrd)?
[18:48:49] <ermine> ygrek: я чота не вижу навскидку синтаксис with type ...
[18:49:46] <ygrek> что значит дополнить?
[18:49:55] <ygrek> пропихнуть полиморфный тип в Map.t не получится
[18:50:44] <ermine> ыы
[18:50:59] <ermine> не, скорее параметрический тип
[18:51:09] <ygrek> да, ыы, есть такая бяка :)
[18:51:45] <ygrek> т.е. надо инстанциировать функтор для каждого конкретного типа параметра
[18:52:07] <ygrek> имхо это мрачно, но судя по всему это фундаментальное ограничение
[18:52:40] <ermine> я где-то видела синтаксис with type t = ..., но вот навскидку чота не вижу
[18:53:20] <ygrek> это при создании модуля
[18:53:29] Typhon вышел(а) из комнаты
[18:53:39] <ygrek> для унификации абстрактных типов
[18:54:04] <ygrek> т.е. module Set(Elem : Ordered) with type elem = Elem.t = struct ... end
[18:54:05] <ermine> ну, я думаю что здесь это можно применить
[18:54:09] <ygrek> нет
[18:54:50] <ygrek> связать конкретный тип type t и полиморфный type 'a t - не получится никаким соусом (ну разве что может Obj?)
[18:55:26] <ermine> ыы
[18:56:51] gds вошёл(а) в комнату
[18:58:39] <ermine> ygrek: но расписывать модуль с тем же compare пару раз лениво
[18:59:08] <gds> а compare точно тот же?
[18:59:17] <ermine> ага
[18:59:23] <ermine> он не по параметру сравнивает
[18:59:31] <ermine> а сам t - рекорд
[18:59:43] <ermine> параметрический :)
[19:00:35] <ygrek> ну сделай функтор MakeOrd(Q:sig type t end) : Ordered
[19:00:57] <ermine> ыы
[19:01:09] <ygrek> и будет счастье типа module MapInt = Map.Make(MakeOrd(sig type t = int my_t end))
[19:01:15] <ygrek> :)
[19:01:25] <gds> омг.
[19:01:33] <ygrek> ну так камль он же вообще отстой, чего там
[19:01:50] <ygrek> а или забей и возьми полиморфный Map
[19:01:55] <gds> камл -- да. а окамл... тут появляются объекты!
[19:02:31] <ygrek> кстати, у тебя разве эти рекорды - ключи?
[19:02:55] <ermine> поле в рекорде
[19:03:01] <gds> сделать Map работающий приблизительно с < compare : <self; ..> -> 'a -> bool ; the_value : 'a >
[19:03:28] <ermine> да у меня не set/map, просто пример тот же
[19:04:16] <ygrek> если у тебя ключ - поле - конкретный тип, то проблемы нет
[19:04:37] <ermine> а?
[19:04:47] <ermine> а как описывать Ord?
[19:04:59] xkrt_ вышел(а) из комнаты
[19:05:08] <ygrek> телепатический модуль отключён за неуплату
[19:05:11] <ygrek> код покажи
[19:06:55] <ermine> type 'a r = {
name: string;
smth : 'a
}
module Ord =
type 'a t = 'a r
val compare t1 t2 = compare t1.name t2.name
end
[19:07:04] <ermine> чо тут телепатировать
[19:07:32] <ermine> а module Another = Map.Make(Ord) ведь не скомпилицо
[19:07:45] <ermine> потушта типы t не совпадают
[19:08:18] <ermine> тогда попробуем функтор
[19:09:04] <ermine> чота я сегодня не в мозговой форме
[19:10:39] <ygrek> у тебя ключ - что?
[19:10:43] <ygrek> name?
[19:11:01] <gds> module MkMap(A : sig type a end) =
Map.Make(struct type t = a r val compare t1 t2 = compare t1.name t2.name)
module IntMap = MkMap (struct type a = int)
приблизительно так.
[19:11:59] <ermine> ygrek: ну имхо слово ключ в Set условное понятие
[19:12:14] <ygrek> ermine: не путай следствие
[19:12:22] <ygrek> в предыдущих показаниях фигурировал Map
[19:12:40] gds помогает, направляя лампу в глаза
[19:12:55] <ermine> ygrek: да я особой разницы между set и map не вижу
[19:13:54] <ygrek> ну map более общо
[19:14:31] ermine пытается вникнуть в таинственные письмена gds под светом мощной лампы
[19:16:09] <ygrek> # type 'a t = { r : 'a; name : string;};;
type 'a t = { r : 'a; name : string; }
# module M = Map.Make(String);;
# let x = {r=20; name="test";};;
val x : int t = {r = 20; name = "test"}
# let z = M.add x.name x M.empty;;
val z : int t M.t = <abstr>
[19:16:59] <ygrek> в Set же только тип t - конкретный - и под него параметрический тип не пронести
[19:17:44] <ygrek> Map параметризуется типом ключа, а Set типом всего элемента
[19:18:02] <ygrek> поэтому в Map элемент может быть полиморфным, а в Set нет
[19:18:43] <ygrek> т.к. в Set ключ суть элемент
[19:18:52] <ermine> согласна
[19:22:14] <gds> так для каждого параметрического типа делать нужный Set.Make(..).
[19:23:31] <ygrek> угу, но этак модули пролазят далеко
[20:15:21] <gds> есть идея насчёт того, чтобы заюзать rank-2 полиморфизм. но изврааат :)
если определюсь, сообщу.
а то уже час голову ломаю.
(по доброй воле, кстати)
[20:17:44] <ermine> та ладно
[20:17:55] <ermine> я вынула ключ из рекорда нафиг
[20:19:12] <gds> прозаично :)
[20:47:24] <gds> в общем, если есть возможность завернуть значение перед работой с Set, то можно устроить множество любых значений, для которых определяем нужную функцию преобразования в строку. Причём, по желанию, если есть возможность предоставить в достаточной степени полиморфную функцию, то всякие iter/fold/for_all/exists тоже пишутся, и будут они кушать как раз те самые "элементы любого типа".
ключевой момент:
# type stringable = { c : !'a. (('a) * ('a -> string)) };
type stringable = { c : !'a. ('a * 'a -> string) }
# module O = struct type t = stringable; value compare {c=(a,fa)} {c=(b,fb)} = Pervasives.compare (fa a) (fb b); end;
module O :
  sig
    type t = stringable;
    value compare : stringable -> stringable -> int;
  end
[20:49:38] <gds> главная проблема, хехе, как раз в предоставлении достаточно полиморфной функции :)
[20:55:09] <gds> но конкретно в этой задаче имхо гораздо правильнее set из { name; val } довести до map : name -> val.
[21:05:03] <ygrek> что значит !'a?
[21:05:09] <ygrek> какая-то вариантность?
[21:06:56] <gds> полиморфизм на уровне поля.
[21:07:41] <gds> то есть, rank-1 -- это на уровне параметрических типов, а rank-2 -- это в пределах значения данного типа. про rank-n не в курсе в целом.
[21:09:57] <ygrek> э, по-моему для этого достаточно просто 'a. ...
[21:10:00] <gds> например, если реализовывать fold в объекте, то есть смысл описать его тип как:
fold : !'a. ('a -> self -> 'a) -> 'a -> self -> 'a
чтобы метод obj#fold работал бы для любых типов кумулятыра.
(про self -- условность; не помню точно)
[21:10:51] <ygrek> и вообще
# type stringable = { c : !'a. ('a * 'a -> string) };;
Error: Syntax error
# type stringable = { c : 'a. ('a * 'a -> string) };;
type stringable = { c : 'a. 'a * 'a -> string; }
[21:10:55] <gds> ля. конечно, original vs revised.
[21:11:30] <ygrek> аа
[21:11:48] <gds> всякие хитрые эксперименты с типами гораздо проще в revised, и привычнее, и кое-где логичнее. вот и.
[21:50:24] <gds> дамы и господа, хочу поделиться с вами одной своей проблемой.
Дело в том, что я иногда хочу на уровне camlp4 завернуть все литералы в объекты, а все типы -- в составные объекты (состоящие из значений тоже объектных типов). С опциональным переопределением методов compare, print, iter, fold. Но потом я понимаю всю глубину подобного грехопадения, бью себя по рукам и иду заниматься полезными делами.
Это нормально?
[21:59:23] sevenov вышел(а) из комнаты
[22:09:24] sevenov вошёл(а) в комнату
[22:10:15] ermine постоянно чем-то мается
[22:14:23] <ermine> но вот никогда не бью себя по рукам
[22:14:50] <ermine> скорее бьюсь головой апстенку
[22:15:44] <ermine> а еще жалею, что время идет слишком быстро и отводится так мало времени на забавы
[22:29:36] sceptic вышел(а) из комнаты
[22:33:10] <gds> бить себя по рукам иногда полезно, если ведёшь статистику по разнице "количество начатых проектов - количество оконченных проектов" либо по частному "польза проекта / время на проект".
вот смотрю я на ту штуку, которую с недавних пор ковыряю (интерфейс между разными цэ++) -- и даже не знаю, получится ли асилить, и, если получится, то какой практический выход будет из этого дела. Понятно, что две либы заюзаю на отличненько, а дальше вот...
[22:40:35] <ermine> я с удовольствием бросаю начатый проект ради того, чтобы начать еще один
[22:40:59] <ermine> особенно если в том начатом идут затыки
[22:41:27] <604> такая ж фигня
[22:41:33] <604> как лечить это?
[22:41:58] <ermine> а надо ли лечить?
[22:41:59] <gds> ermine: а я бросаю без радости.
[22:42:21] <ermine> gds: бросать навсегда?
[22:42:35] <ermine> у меня не получается навсегда
[22:42:53] <ermine> хоть когда-нить да левая пятка почешется еще чонить поворшить в том проекте
[22:42:54] <gds> не обязательно навсегда. в плане погроммирования -- редко когда понимаю, что проект вообще ничего не стОит.
[22:43:43] <ermine> вот у меня есть один любимый проект - клиент джаббера на lablgtk, каждый год примерно пару недель я трачу на него - слишком быстро бросаю
[22:44:02] <ermine> но пятка постоянно чешется чонить в нем сделать
[22:44:20] <ermine> и поэтому у меня lablgtk постоянно стоит и свежий :)
[22:44:57] <604> "каждый год" - омфг. сколько ж ты им уже занимаешься?
[22:45:34] <ermine> камлом лет 6 наверное
[22:45:37] <gds> гыгы, у меня есть неоконченные окамловские проекты где-то с 2001 :) те, что раньше, оканчивать мало смысла.
[22:45:56] <604> а клиентом?
[22:46:20] <ermine> ну наверное года 4, у меня где-то есть скриншот самого первого года
[22:46:55] <604> до сталкера, конечно, далеко, все равно впечатляет
[22:47:54] ermine посмотрела на скриншот и вспомнила, что в этом году ничего не делала, надо чоль попробовать поворшить
[22:48:17] <ermine> но надо просетапить гит репку
[22:48:23] <gds> знакомые геймеры говорили, что сталкера так и не доделали до альфа-версии.
[22:48:23] <604> кто-нить винду здесь использует?
[22:48:40] <gds> а чего там сетапить -- git init и в бой.
[22:48:51] <604> почему ж. я играл и в альфу и в ... "релиз"
[22:49:07] <gds> ну, не буду спорить, я не знаток.
[22:49:30] <gds> винду -- я использую иногда. ygrek тоже использует, как понимаю. а что случилось?
[22:49:32] <604> отличий, кстати, действительно не очень много :)
[22:49:50] <ermine> gds: надо еще туда файлик и камлобилд подточить, чтобы скомпилилось
[22:50:12] <ermine> gds: а еще решить, дописывать ли в главный myocamlbuild.ml или в отдельный
[22:51:23] <ermine> с камлобилдом проблемы еще те
[22:51:47] <gds> мне вообще страшно им собирать что-то сложное. реально ссусь.
[22:51:54] <604> ну мне интересно, много ли гемора с использованием камля в винде, со сборкой программ. а то я уже скачал VC 2005 express (с третьей попытки), поставил масм, а компилировать все равно не хочет. НО мне это пока не к спеху, я забил на это, довольствуюсь пока интерактивной сессией
[22:52:15] <gds> обязательно msvc?
[22:52:53] <604> разрабы так говорят. и именно 2005 express иначе масм не встает
[22:53:21] <604> прям так в ридми и написано
[22:53:27] <gds> какие "разрабы"?
[22:53:40] <604> разработчики окамля
[22:54:12] <gds> ёманарот. как же это я умудрился http://overbld.tk/ ...
[22:56:47] <604> ну ты пошёл по ветке Native MinGW :)
[22:57:35] <604> а я по Native MS, ибо там названия знакомые
[22:58:34] <gds> мне может masm тоже ближе, чем as/gas, но не повод же :)
гнутое -- оно на самом деле не гнутое, а ровное.
[22:59:13] <604> мой негативный опыт убеждает меня в обратном :)
[22:59:25] <604> >Respect my hoster and our halyava.
мдя...
[23:00:13] <gds> мой негативный опыт -- тоже.
а чо не ясно? некоторые англоязычные вполне знают, что такое халява.
[23:02:24] <604> странно, что англоязычные употребляют русское слово, обращаясь к англоязычным
[23:02:29] <gds> вообще писал для общего понимания и кривым языком. кто знает -- поймёт, кто не знает -- пропустит и либо просто прислушается к просьбе, либо забьёт. из 3 вариантов ровно 1 меня не устраивает.
[23:02:52] <604> так это твое?
[23:02:55] <gds> я не англоязычный, поэтому стараюсь не корчить из себя прохвессора оксфорда.
[23:03:21] <gds> моё таки.
[23:03:21] <604> так бы сразу и сказал... а я распинаюсь..
[23:05:40] <gds> ну а реально -- ocaml/mingw уже нет, с тех пор, как дистрибьютор ocaml-mingw-maxi исчез (2005г что ли). приходится брать это дело никому не известному русскому пацану с украинской фамилией и околомолдавской пропиской, напрягать знакомого украинского хостера и делать грязные делишки на ломаном английском.
[23:07:01] <604> не,я ж ничо... спасибо за документацию, в смысле
[23:07:41] <gds> я тоже ничо :) гуд.
[23:09:53] <gds> кстати, вот бы кто-нибудь помог с мета-решением по поводу ocaml/msvc...
хочется набор утилит (в идеале -- баш-скриптов), имеющие имена вида msvc-gcc, msvc-cpp, msvc-ld, msvc-as, принимающие аргументы в гнутом стиле и передающие их msvc'шным утилитам.
[23:10:33] <604> а разве нет центрального русскоязычного ресурса, вокруг которого кучкуются адепты? или все в такой полузаброшенном виде?
[23:12:38] <604> >в идеале -- баш-скриптов
вот только для их запуска придется еще bash ставить под винду :)
[23:13:19] <gds> в людей с окамлом в голове какой-то другой менталитет, что ли. индивидуалисты хреновы.
или может просто стрёмно признаваться в том, что используют.
[23:14:26] <604> всё, приехали. написал про баш, подумал про лишнюю сущность, ассоциации "бритва Окамла... Стоп! его ж как-то по-другому звали!"
[23:15:19] <gds> баш -- это не страшно, учитывая, что по условиям задачи уже планируется баш, а также всё, что не относится напрямую к форматам obj, lib и exe файлов. То есть, bash, make, sed, grep, find, ls, cp и все дела. Цель -- минималистичное кросс-компилирование.
[23:15:37] <gds> да, братва окамла -- известная штука :)
[23:15:48] <ermine> так, создала проектик клиента
[23:15:50] <ermine> уф
[23:15:57] <604> всё, пошел спать. всем спокойной
[23:16:08] 604 вышел(а) из комнаты
[23:20:02] <gds> зашел (по совсем другим ссылкам) на http://pauillac.inria.fr/~xleroy/ . К вопросу о наличии свободного времени -- кажется, он нашёл какой-то чит.
[23:23:18] <gds> убил!
What is your Erdös number?
I'm glad you asked. My Erdös number is 4 (L.Cardelli / A.Scedrov / A.R.Blass / P.Erdös, or Y.Bertot / P.Zimmermann / G.Tenenbaum / P.Erdös).
[23:30:37] <ermine> мда, что-то в lablgtk непашыть
[23:34:00] <ermine> значит пора спать
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!