Home
Objective Caml
ocaml@conference.jabber.ru
Воскресенье, 12 февраля 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:00:40] ermine вышел(а) из комнаты
[00:11:56] <bobry> да, еще кстате на середине чувствуется нехватка интерактива в туториале
[00:12:34] <bobry> хочется чтобы первые примеры можно было скопипастить в репл и легко покормить их чем нибудь
[00:12:38] <gds> bobry: я бы замудохался писать код, содержащий плотную смесь как итератов, так и (!) Ю-монады, через lift.  Кроме того, тот lift вроде кое-как зависит от конкретных монадных >>= и >>%.  Вот и.
[00:12:42] <bobry> или мб я просто еще не дочитал до нужного места :)
[00:13:14] <gds> не, дальше такого тоже нет.  Но я на такое как бы нацеливался, поэтому сделать можно.
[00:14:15] <bobry> вообще, halfthrough ощущения приятные, написано кошерно и доступно :)
[00:15:19] <bobry> вот еще эстетский вопрос, почему 'S.get_first_item' а не 'S.hd'?
[00:15:30] <gds> по крайней мере, tech writer из меня выйдет неплохой, даже если стукнут кирпичом по голове.  старался "объяснить" именно.
[00:15:40] <bobry> да-да, по моему удалось
[00:16:29] <gds> hd -- abused/overused.  Я лепил первое, что пришло на ум.  А в момент создания этой функции я мало представлял себе итераты.
Но даже сейчас, задним числом, отмазка очевидна: hd -- оно же для списков11111
[00:16:40] Typhon вышел(а) из комнаты
[00:17:25] <bobry> ну какбе, List.hd для списков
[00:18:10] <bobry> это как в stdlib, List.length, Array.length, Map.cardinal (! внезапно)
[00:18:34] <gds> потому и "отмазка" :)  Ну да, там не ок.  Но для простых случаев get_first_item, по-моему, вполне приемлемо, его не спутают ни с чем даже императивщики.
[00:18:58] <gds> про Map.cardinal -- знаем, помним, скорбим.
[00:19:05] <bobry> :)
[00:19:16] <bobry> с трудом представляю себе императивщика, который внезапно захочет себе итератов
[00:19:37] <bobry> кстати как унутри устроены камловские Map'ы? какая там структура?
[00:19:40] <gds> ну бывают сишники даже.  Но вопрос реально сложный.
[00:20:45] <gds> map -- бинарное дерево, за конкретикой в исходники.  почти балансированное, на каждом узле разница в глубине между левым и правым не больше определённого числа (1? 2? rtfs).
[00:21:42] <bobry> ну шо оно бинарное это да, но их же до чертиков разных
[00:22:11] <gds> дальше ищи без меня.
[00:22:14] <bobry> :)
[00:22:16] <bobry> okay
[00:35:11] bobry дочитал до енумератов, enum_string -- классная идея! у Олега по-моему примеры были с файлами -- что конечно же ни к чему по началу
[00:45:02] Kakadu вышел(а) из комнаты
[00:46:05] <gds> enum_string надо почанково, по-любому, если subarray хранит элементы в массиве.  А с файлами -- я планировал.  Да и допишу, мне не сложно будет.  Как только завершу текущие дела.
[00:47:58] <gds> кстати, "на подумать".  можно оформить что-то типа итератов по сути, но не читающих, а срущих в массив, созданный чем-то типа энумератора, только наоборот -- сущностью, дающей массив для записи и кормящий всех этим содержимым.
[01:09:50] <bobry> кстати мне в core понравилось что они почти не используют сокращений
[01:10:07] <bobry> например ~bufsize у enum_string у js был бы ~buffer_size
[01:10:21] <bobry> </эстетский блок>
[01:10:54] <bobry> gds: про кормящих не понял, т.е. у нас есть генераторы, которые срут в массив -- а кормить то кого?
[01:12:50] <bobry> gds: можно мне глупому minimal working example с iteratees?
[01:12:53] <gds> кормить -- iteratee/enumeratee.  то есть, частично переложить обязанности enumerators на них.  или же, если по-другому, отобразить iteratee по отношению к потоку данных.  в этом случае будет не enumerator, а симметричная конструкция.
[01:13:05] <bobry> чего можно пихнуть в Iteratees.Make() чтобы оно просто заработало с дефолтным камло io
[01:14:12] <gds> с камловским io -- не заработает.  проще lwt + ocaml_monad_io.  завтра вечером сочинил бы ocaml_monad_io поверх камловских функций, но это будет не сейчас.
[01:14:31] <bobry> identity чтоли пихнуть
[01:15:09] <bobry> lwt не хочется как то совсем, ну их эти треды, мне просто поиграться в репле
[01:16:46] <bobry> https://bitbucket.org/gds/ocaml-iteratees/src/66877bac6e96/direct_IO.ml вроде оно ка краз
[01:16:53] Typhon вошёл(а) в комнату
[01:17:34] <gds> ну это же не камловский, а обёрнутый.  но да, с этим получится точно, я такую связку использовал на практике.
[01:18:24] <bobry> как то досадно, что приходится писать Iteratees.Make(Direct_IO.Direct_IO)
[01:18:32] <bobry> в смысле два раза Direct_IO
[01:19:43] <gds> хз почему так сделал.  действительно, как-то нехорошо.  запишу себе на будущее, исправлю или расскажу, почему так.
[01:22:28] <bobry> в 0.3 нет enum_string <_<
[01:23:03] <gds> в 0.3 какой либы?
[01:23:57] <bobry> ocaml-iteratees :)
[01:26:31] <gds> bobry: разгадка в hg clone ssh://hg@bitbucket.org/gds/ocaml-iteratees .  0.3 почти годовалой давности.
[01:28:59] <bobry> imho стоит добавить в туториал шо брать надо tip
[01:30:19] <gds> да там, вообще, многое стоит добавить.  Начнём с того, что надо там создать "топлевел" -- какое-то средство для того, чтобы либа поставилась.  Может барброй даже, когда/если сделаем venv'ы.
[01:30:34] <gds> топлевел -- то, что ты сейчас делал руками, я про это.
[01:30:56] <bobry> где будет minimal working example?
[01:33:24] <gds> в каком смысле "где будет"?
[01:35:00] <bobry> ну в смысле в топлевеле сразу будет модуль Iteratees уже параметризованный какой то простой монадой
[01:35:07] <bobry> шобы не надо было писать .Make() явно
[01:38:22] <bobry> ну что, осилил до конца -- ощущения прежние, написано годно, но не хватает интерактива :)
[01:38:24] <gds> скорее будет копипаста для топлевела, чтобы этот модуль создать.  Но так, что при её вставке (при условии ocaml+findlib+ocaml-iteratees) всё работало.
[01:39:06] <bobry> они для сборки же lwt требуют у тебя
[01:39:15] <bobry> было бы клево сделать lwt опциональным канеш
[01:40:41] <gds> вот про это тоже думаю.  в минимальном случае оно не нужно ведь.
[01:40:52] <bobry> oasis + flag?
[01:40:57] <bobry> как у lwt сделано
[01:47:11] <gds> а что у lwt зависит от флагов и как оно работает?
[01:47:38] <bobry> react / text / unix как минимум
[01:48:09] <bobry> случай аналогичный твоему, на каждую опциональную фичу по флагу
[01:48:24] <bobry> плюс каждая фича в отдельном модуле
[01:48:52] <bobry> и по моему в ocamlfind'e каждая еще и в отдельном packag'e (правда parent у них у всех общий -- lwt)
[01:50:09] <gds> посмотрю.  для compile-time зависимостей -- может и разумно выйдет.
[03:47:43] Typhon вышел(а) из комнаты
[03:50:40] f[x] вошёл(а) в комнату
[03:57:01] komar вышел(а) из комнаты
[03:57:42] komar вошёл(а) в комнату
[04:08:36] bobry вышел(а) из комнаты
[04:31:39] komar вышел(а) из комнаты: Replaced by new connection
[04:31:39] komar вошёл(а) в комнату
[04:34:22] f[x] вышел(а) из комнаты: Computer went to sleep
[05:24:37] komar вышел(а) из комнаты: Replaced by new connection
[05:24:37] komar вошёл(а) в комнату
[05:39:52] letrec вошёл(а) в комнату
[05:45:37] komar вышел(а) из комнаты: Replaced by new connection
[05:45:37] komar вошёл(а) в комнату
[07:02:32] komar вышел(а) из комнаты: Replaced by new connection
[07:02:32] komar вошёл(а) в комнату
[07:32:54] komar вышел(а) из комнаты: Replaced by new connection
[07:32:54] komar вошёл(а) в комнату
[08:09:26] komar вышел(а) из комнаты
[08:09:26] komar вошёл(а) в комнату
[08:42:15] komar вышел(а) из комнаты: Replaced by new connection
[08:42:15] komar вошёл(а) в комнату
[09:52:55] komar вышел(а) из комнаты
[09:58:38] ermine вошёл(а) в комнату
[10:00:15] Typhon вошёл(а) в комнату
[11:21:55] Kakadu вошёл(а) в комнату
[12:33:50] bobry вошёл(а) в комнату
[12:39:39] f[x] вошёл(а) в комнату
[13:14:33] f[x] вышел(а) из комнаты: Replaced by new connection
[13:14:34] f[x] вошёл(а) в комнату
[14:05:40] Typhon вышел(а) из комнаты
[14:45:37] ftrvxmtrx вышел(а) из комнаты
[14:47:20] ftrvxmtrx вошёл(а) в комнату
[15:54:21] f[x] вышел(а) из комнаты: Computer went to sleep
[16:36:23] komar вошёл(а) в комнату
[16:56:48] savikov вошёл(а) в комнату
[17:01:36] savikov вышел(а) из комнаты: QIP 2010: Спокойное общение
[18:16:42] <bobry> Set.S.of_list
[18:16:46] <bobry> ГДЕ я спрашиваю?!
[18:17:12] <gds> где-то в районе List.fold* и S.add.
[18:17:30] <bobry> причем йома, to_list (названный elements) есть
[18:17:42] <gds> если extlib пользуешь -- им пиши issue, если батарейки -- им.
[18:17:46] <bobry> ну да, но ведь это довольно типичная задача ..
[18:17:56] <bobry> да не, я про stdlib
[18:18:02] <bobry> чертовы французы
[18:20:03] <gds> существует большое количество требований, которые они не реализуют никогда.  stdlib -- минимален.  учитывай это.
[18:21:32] <bobry> гм, я могу понять желание минимального stdlib, но кто же при этом забивает на консистентность?
[18:21:52] <bobry> либо не делай to_list / from_list ни у кого, либо у все
[18:21:56] <bobry> *of_list
[18:23:19] <gds> ещё один из критериев вноса функции в либу -- то, что она может быть реализована эффективнее, чем надстройками над либой, например, из-за известности внутри либы конкретных структур данных.  я по этому критерию часто разделяю.
[18:25:04] <bobry> ок, пример из х-ля
[18:25:21] <bobry> абсолютно все контейнеры там имеют fromList / toList
[18:25:46] <bobry> и не только built in
[18:26:12] <bobry> и когда мне вдруг захочется заюзать какой нибудь супер контейнер, от неизвестного чувака, я уже заранее буду знать как мне с ним работаьт
[18:26:23] <bobry> в камло увы ничем таким и не пахнет
[18:26:35] <bobry> написали себе все по stdlibу ..
[18:26:41] <gds> ну, х-ь со списками как лисп, дружба форева.
про "как с ним работать" -- перегоняя в список?  Вот потому в окамле такого и нет.
[18:26:55] <bobry> нет, fromList / add / length etc
[18:27:01] <bobry> все функции называются однотипно
[18:27:28] <gds> stdlib only? - ССЗБ
[18:27:42] <bobry> так может возьмем extlib в барбару?
[18:28:06] <bobry> но вот незадача, extlib мертв
[18:28:11] <bobry> а батарейки "слишком жирные"
[18:28:14] <bobry> правда ведь?
[18:28:58] <gds> если тебе там extlib нужен -- бери.  вроде его можно использовать как "drop-in".  батарейки -- про жырноту хз, но они не везде / не всегда компилируются.  extlib тупее, для барбры это плюс.
[18:29:25] <bobry> да не то чтобы нужен, пока *можно* и без него
[18:29:36] <bobry> но уже сильно бесит убогость камлоstdlib
[18:30:00] <gds> но, опять же, если в барбре что-то используется, это должно быть встроено унутрь.  то есть, без обращений к сети, к репкам, к системе, требуя только ocaml+findlib.  я так считаю.
[18:30:47] <gds> никто не обещал хорошую stdlib в компиляторе.  бери extlib/batteries.  проблема?
[18:31:11] <bobry> назови мне еще хоть один язык с такой паршивой stdlib?
[18:31:25] <bobry> никто не обещал, но вообще это то что я ожидаю by default
[18:32:04] <gds> сишечьку назвать?  плюсеки?
[18:32:52] <bobry> лол
[18:32:57] <bobry> ну разве что, вполне могут сравниться
[18:33:13] <gds> нет могут.
[18:33:22] <bobry> почему?
[18:33:34] komar вышел(а) из комнаты
[18:34:17] <gds> посмотри на их stdlib'ы.  найди там list, map, queue.
[18:35:47] <bobry> ну уж у плюсов точно есть
[18:35:58] <bobry> если считать STL за stdlib
[18:36:29] <bobry> и в libc тоже было все перечисленное
[18:39:10] <gds> STL -- хз, насколько это stdlib.  libc -- вообще юниксовая поделка.
[19:05:59] <bobry> я вот думаю как бы мне рецепты парсить
[19:06:09] <bobry> вроде бы хочется переиспользовать тот же код что и для конфига
[19:06:15] <bobry> а вот как это сделать не придумывается
[19:11:50] <gds> если не вдаваться в детали -- вроде просто.  Если вдаваться -- вдавайся без меня, у меня жестокое ональное сношение со своими же либами.  В парвел впиливаю "протоколы" (кодирование протокола общения между клиентом и сервером через индуктивные типы данных, используя их как утверждения -- ну, чистые coq/agda).  Но в рантайме многое.  Оттуда попоболь и мозгоболь.
[19:14:02] <gds> кстати, заметка.  когда говорят, что утверждение представлено типом данных, это значит, что не только утверждение представлено, но и его "тег", который "конструктор" в окамле.  то есть, утверждения type z = [ ... | Add of z and z | Sub of z and z ] логически оба являются утверждениями о том, что сумма и разность натуральных чисел является натуральным числом, но они чуть разные.
[19:14:39] <gds> вот, как zert дозапилит свою бложико-платформу, херню типа предыдущего сообщения буду кидать туда.
[19:14:50] <gds> а пока...  такая вот фигня :]
[19:15:26] dzhon вошёл(а) в комнату
[19:27:06] komar вошёл(а) в комнату
[19:29:38] <bobry> gds: а чем жуйк не православен?
[19:29:51] <bobry> вроде за угничем больше ничего не было замечено?
[19:30:43] <gds> http://gds.livejournal.com/62728.html?thread=309768#t309768 , произвольные баны.  это не ок.
[19:31:07] <komar> Не произвольные.
[19:35:09] <gds> komar: рекламируешь жуйк?
[19:35:39] <komar> Да я бы прямо нназвал необходимые условия для бана, но тут не тот формат дискусси.
[19:36:21] <gds> я догадался интуитивно.
[19:36:41] <komar> bobry: это тебе: http://i.juick.com/photos-1024/1754491.jpg
[19:40:06] <gds> посоны не дрочите на тоню!  у меня брат от этого умер!
[19:42:10] <bobry> gds: ага, я в курсе драмы :)
[19:43:38] rren вошёл(а) в комнату
[19:43:49] <komar> Олсо, zert пилит говно.
[19:45:11] <gds> будет результат => не говно.  у меня пожелания небольшие.
[19:45:29] <komar> Он его пилил пару месяцев.
[19:45:32] <komar> Потом дал посмотреть.
[19:48:54] <bobry> покажите шоли шо там зерт пилит
[19:48:57] <bobry> я только псто видел
[19:51:48] <komar> http://komar.psto.net/ohihit#1
[19:51:52] <komar> Первый комментарий.
[20:11:33] letrec вышел(а) из комнаты
[21:48:55] komar вышел(а) из комнаты: Replaced by new connection
[21:48:56] komar вошёл(а) в комнату
[22:13:36] komar вышел(а) из комнаты: Replaced by new connection
[22:13:38] komar вошёл(а) в комнату
[22:48:03] komar вышел(а) из комнаты
[22:48:15] komar вошёл(а) в комнату
[22:49:08] ftrvxmtrx вышел(а) из комнаты
[22:52:03] ftrvxmtrx вошёл(а) в комнату
[23:09:03] bobry вышел(а) из комнаты
[23:09:09] bobry вошёл(а) в комнату
[23:29:26] ftrvxmtrx вышел(а) из комнаты
[23:32:52] ftrvxmtrx вошёл(а) в комнату
[23:53:33] komar вышел(а) из комнаты
[23:56:12] komar вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!