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

GMT+4
[00:36:42] Typhon вышел(а) из комнаты
[01:02:20] sceptic вышел(а) из комнаты
[01:02:33] sceptic вошёл(а) в комнату
[01:21:11] Ernesto вышел(а) из комнаты: offline
[01:22:04] ygrek вышел(а) из комнаты
[03:48:43] inky-kinky вышел(а) из комнаты
[06:54:52] john вышел(а) из комнаты: Replaced by new connection
[06:54:53] john вошёл(а) в комнату
[07:18:08] sevenov вышел(а) из комнаты
[07:59:54] sevenov вошёл(а) в комнату
[09:23:44] ygrek вошёл(а) в комнату
[10:38:11] 604 вошёл(а) в комнату
[10:40:15] ygrek вышел(а) из комнаты
[10:47:47] f[x] вошёл(а) в комнату
[10:51:01] <f[x]> зачем сразу bit magic, есть extlib IO
[11:14:47] sevenov вышел(а) из комнаты
[11:33:01] sevenov вошёл(а) в комнату
[12:00:36] sevenov вышел(а) из комнаты
[12:02:52] sevenov вошёл(а) в комнату
[12:34:47] <gds> кстати, давно заметил, но только сейчас проверил -- camlp4 в директиве -I не кушает пути вида c:/some/dir падвендой. Хочет c:\some\dir или, вроде /c/some/dir. Надо бы зафайлить, но сначала исходниками доказать, что это таки баг.
[13:41:47] Typhon вошёл(а) в комнату
[13:51:18] <gds> удивительно, но "weak hash table" -- это на самом деле "weak hash set". какой удар от инриа.
[13:54:23] <f[x]> > A weak hash table is a hashed set of values.
[13:54:41] <f[x]> :)
[13:54:42] <gds> о да. так почему table, а не сразу set.
[13:56:04] <f[x]> с другой стороны в чём разница?
[13:57:19] <f[x]> можно в set хранить пары и будет table
[13:57:34] <f[x]> кстати, ты какую лит-ру по ТК читаешь?
[13:57:41] <f[x]> ну не совсем кстати, да
[14:02:47] <gds> мне надо по ключу, который может исчезнуть при сборке мусора, получать значение. Как это сделать с помощью hash set -- не знаю.
Допустим, есть (weak_key, my_value). Не понимаю, какие гарантии того, что этот тупл будет оставлен вживых в weak hash set. Из того, что я знаю про weak values, сборщик может убить тупл, даже при живом weak_key.
[14:06:46] <gds> по ТК -- единственное труЪ это МакЛейн (есть djvu, если чо). Однако частенько помогает для понимания просто забить в гугле нужное и там это найти. Взгляд с другой стороны, что ли.
Ещё есть жжшное коммунити category_theory, там помогают в случае непоняток.
Ещё что там плохо, что они частенько опускают "типы" и подразумевают неочевидные преобразования, которые в мозгу плохо типизируются. Извожу этим знакомого математика на досуге :)
[14:07:46] <gds> кстати, адский дядька этот МакЛейн, даже по фотачьке: http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BD%D0%B4%D0%B5%D1%80%D1%81_%D0%9C%D0%B0%D0%BA%D0%BB%D0%B5%D0%B9%D0%BD
[14:08:29] <Typhon> а в пдфе или с тектовым слоем джву есть МакЛейн?
[14:08:42] <Typhon> а то джву перегнал в пдф, на ридере плохо отображается(
[14:09:07] <gds> он у меня как раз с текстом, а не отсканированный.
[14:09:39] <Typhon> о, положить можешь куда-нибудь?
[14:13:23] <gds> http://gdsfh.dyndns.org:8111/gds/maclane.djvu
[14:14:25] <Typhon> спасибо :)
[14:18:34] Typhon вышел(а) из комнаты
[14:23:36] <ermine> утро
[14:23:56] <ermine> есть у меня либла, которая хочет знать два пути к каталогам
[14:24:41] <ermine> что с этой хотелкой делать? - зашивать в код при компиляции, делать пути мутабельными и при запуске программы задавать или как-то еще?
[14:26:24] <gds> не зашивать. Как варианты (скомбинируй нужные): делать мутабельными или оформлять их через функторы; брать разумные дефолты; передавать в ком.строке или через окружение.
[14:26:53] Typhon вошёл(а) в комнату
[14:27:49] <ermine> рада бы как функтор юзать, если знать как функтор юзать в двух независимых друг от друга плагинах
[14:28:32] <ermine> если два функтора, то будут две инстанции либлы
[14:28:43] <gds> инстанциировать его в каком-либо ml, который юзать в обоих плагинах.
[14:28:44] <ermine> по путям они конфликтовать не будут
[14:29:09] <ermine> ну вот я делаю третий плагин, который инстантирует либлу
[14:29:43] <ermine> а функтор делать после того, как получит кусок конфига :)
[14:30:01] <ermine> в общем, только мутабельные пути спасут, причем именно в либле
[14:30:31] <gds> тогда проще без функтора.
да, мутабельные пути тоже вполне ок.
особенно если следить, чтобы их вписывали ровно один раз, например.
[14:33:48] <ermine> оке, пасиб
[14:52:33] <ermine> а как в .mli вписать ref? чота запамятовала
[14:58:24] <ermine> блин, надо спать больше
[15:04:18] <f[x]> gds: да, с weak set такое не работает, слажал
[15:05:13] <f[x]> знакомый математик это круто
[15:26:36] Typhon вышел(а) из комнаты
[15:27:39] Typhon вошёл(а) в комнату
[15:47:52] Typhon вышел(а) из комнаты
[15:51:47] Typhon вошёл(а) в комнату
[17:50:45] <gds> f[x]: а вот не факт, что не сработает, как я уже подумал. Надо почитать исходники, как с weak-значениями работают, ну и сам weak.ml асилить.
Математик -- это круто, но он сейчас в процессе переформулирования ТК (а именно, он выбрасывает объекты как лишние сущности, однако с некоторыми ограничениями на построение категорий; и строит категории чисто на стрелках). Поэтому далеко не всегда его объяснения вкатываются легче той же википедии :)
[18:07:29] sceptic вышел(а) из комнаты
[18:11:31] sceptic вошёл(а) в комнату
[19:02:10] inky-kinky вошёл(а) в комнату
[19:08:27] <f[x]> Ещё засада -- собираю кастомный toplevel :
Error: Files bittorrent.cmo and /usr/lib/ocaml/toplevellib.cma(Config)
make inconsistent assumptions over interface Config
[19:09:45] <f[x]> мораль -- свой модуль проще не называть config
[19:15:44] john вышел(а) из комнаты: Replaced by new connection
[19:15:45] john вошёл(а) в комнату
[19:23:20] <gds> смотрю на weak hashtables. http://caml.inria.fr/pub/ml-archives/caml-list/2002/03/460868fecf70812f617397932a1371d6.en.html
вот блин, как всё просто: сделайте так, чтобы тупл был доступен из того значения, которое weak. Да если бы можно было менять тип weak-значения, всё бы обошлось без weak hashtable.
[20:19:22] <gds> чем больше читаю про weak hashtables (inurl:caml.inria.fr weak (hashtable|"hash table")), тем меньше мне нравится идея городить что-то подобное поверх стандартного Weak.
Оформить вместо этого, что ли, with-идиому? Эдакое явное прекращение времени жизни.
[20:30:42] ermine раздумывает - не применить ли weak там где хранятся таблицы перекодировок
[20:35:18] <gds> как я почитал всяких гуглей, weak нужны в двух случаях. 1. случай как у меня -- нет возможности/желания курочить внешний модуль. 2. явное изменение структуры данных внесёт нехилый оверхед для явного учёта, тогда как простые, несложные вопросы в стиле "живо ли оно" может взять на себя сборщик мусора.
И не стоит юзать там, где нужен хоть какой-нибудь контроль за weak hashtable: где надо уметь явно мочить ненужные записи, где по записям контроль хоть сколько-нибудь сложнее, чем "доступно ли оно из других частей программы". lru cache не реализуешь, expire-время тоже не закодить.
[21:00:30] <gds> наткнулся, читаю http://till-varoquaux.blogspot.com/ , первая страница ок.
[21:01:24] <gds> (а, это не первая страница, это вся днявочка)
[21:09:45] Typhon вышел(а) из комнаты
[21:10:45] <ermine> gds: не, у меня случай проще - вызываем функцию для перекодировки, она ищет в хэштаблице нужную таблицу перекодировки и не находит ее, и загружает ее и перекодирует текст себе дальше. Вот тут вопрос в том, надо ли теперь выкинуть таблицу из хэщтаблицы
[21:10:47] <ermine> после использования
[21:11:02] <ermine> лучше выкинуть, когда рядом нет функций, юзающих ее
[21:11:09] <ermine> типа кэша
[21:12:10] ermine вчера сотворила подобие memcached на основе treap - код получился маленький, пришлось отложить, когда встал вопрос о протоколе
[21:12:50] <ermine> ик, а теперь время поцамлить на ырланке
[21:12:59] <gds> weak вносит непредсказуемость. я бы реализовал явную lru-очередь на сотню таблиц перекодировки.
[21:15:15] <ermine> lru?
[21:15:57] <ermine> а что за непредскажуемость? по идее она в хэштаблице пока жива функция, ее юзающая
[21:16:02] <ermine> она - табличка
[21:16:10] <ermine> всё остальное неважно
[21:20:36] <gds> может случиться так, что функций слишком много, а памяти слишком мало. lru гарантирует ограниченное количество памяти. weak -- нет.
[21:25:48] <ermine> нуу, мне трудно предположить, что зараз будут тексты на тысячах языках
[21:25:57] <ermine> а все же что такое лру?
[21:27:05] <gds> предположить -- трудно. реализовать -- можно, хехе.
lru = less recently used.
[21:29:05] <gds> но тут нужно следить за освобождением таблиц вручную. при установлении/изменении кодировки, например.
[21:32:21] <ermine> не, у меня проще - кодировка задается в заголовке xml файла и статична до конца парсинга этого файла, всё
[21:32:59] <ermine> хм, неужели ocsigen перестал утекать
[21:33:06] sceptic вышел(а) из комнаты
[21:33:24] sceptic вошёл(а) в комнату
[21:33:25] <gds> количество файлов как-то ограничено? если да, то можно и weak -- больше, чем одна таблица на один файл не будет точно.
[21:34:57] <ermine> такая формулировка немного вгоняет в ступор
[21:35:39] <ermine> я имела в виду, что weak следовало бы использовать в качестве утекающего по неиспользованию кэша таблиц
[21:35:41] <gds> одновременно обрабатываемых файлов, конечно.
[21:36:43] <ermine> а какая разница, сколько обрабатываемых файлов?
[21:37:16] <gds> если одновременно обрабатывается 1 мульён файлов, то будет максимум 1 мульён таблиц перекодировки.
[21:37:54] <ermine> максимум, да :)
[21:38:15] <ermine> по одному уникальному языку на файл
[21:38:23] <ermine> мож, мы таки о разном?
[21:40:11] <gds> я -- о максимальном использовании памяти в твоей модели. может неправильно её понимаю, конечно, но вроде правильно.
[21:40:43] <gds> учёт использования памяти -- важная штука для надёжных программ.
[21:42:02] <ermine> ну вот я доверила бы weaky самому схлопывать таблицы, если их никто не юзает
[21:42:30] <ermine> а всякие лимиты - это пожалуй во вторую очередь
[21:43:19] <gds> доверила бы -- значит действуй. стандартная weak hashtable это как раз weak hashset, так что для твоего использования это дело вписывается на отличненько.
[21:44:45] <gds> как я понял, для того эту штуку вообще и делали -- hash consing таки хорошая вещь для символьных вычислений, например.
[22:04:09] ygrek вошёл(а) в комнату
[22:15:05] <gds> кстати вот, кое-как интересен вопрос сведения изоморфности к равенству. На последнем этапе вопрос "структурное равенство = физическое равенство" эффективно решается посредством hash consing. Первые же этапы сильно хитрее в общем случае.
[22:16:22] sceptic вышел(а) из комнаты
[22:18:28] Typhon вошёл(а) в комнату
[22:29:08] sceptic вошёл(а) в комнату
[22:29:59] sceptic вышел(а) из комнаты: Replaced by new connection
[22:30:03] sceptic вошёл(а) в комнату
[22:55:55] 604 вышел(а) из комнаты
[23:21:41] inky-kinky вышел(а) из комнаты
[23:22:49] inky-kinky вошёл(а) в комнату
[23:36:22] inky-kinky вышел(а) из комнаты
[23:50:13] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!