Home
Objective Caml
ocaml@conference.jabber.ru
Четверг, 16 февраля 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:08:52] bobry тут частично скопипастил rose trees с х-ля, может надо кому буит https://gist.github.com/1838676
[00:09:02] <bobry> мне понравилось как там чисто функциональные графы сделаны
[00:09:10] <bobry> но они увы без ленивости фигова строятся
[00:09:25] <bobry> так что придется барбаре как нибудь без них :)
[00:12:13] <gds> да вроде нормально их строить.
а причём тут функциональные графы к этому коду?
[00:12:43] <gds> кроме того, несложно и ленивость использовать там, где надо.
[00:12:59] <bobry> при том что они используют rose trees в нутрях
[00:13:13] <bobry> ну, там сам процесс построения деревьев из графа опирается на ленивость
[00:13:25] <bobry> я что то не родил как туда lazy присунуть
[00:16:12] <gds> если нужна просто тупологическая сортировка, зачем всё это нужно?
[00:16:42] <bobry> это я хотел чисто функциональный граф :)
[00:16:50] <bobry> тупологическая сортировка еще вчера работала
[00:17:20] <gds> ocamlgraph, fgl, не?
[00:18:24] <bobry> ocamlgraph какой то слишком жирный
[00:18:27] <bobry> а что за fgl?
[00:18:52] <gds> вообще, граф можно представлять и даже как множество проходов от одной вершины к другим, но я на работе вовремя отговорил от этого представления.  а если без него, то логично задать какие-то идентификаторы узлов, а дальше -- хоть map, который чисто функциональный, чего бы и нет?
[00:19:42] <bobry> что за множество переходов? что то не улавливаю
[00:19:48] <bobry> а Map можно да, воткнуть вместо Hashtbl
[00:19:58] <gds> лучше и не надо про _такие_ графы думать.
[00:20:31] <bobry> ну расскажи, раз уж упомянул :)
[00:21:49] <gds> коиндуктивное представление тут.  граф можно представить как функцию от произвольной вершины, которая при вызове даёт список вершин, связанных с ней, тоже функций.  такой вот изврат.
[00:24:07] <bobry> звучит прикольно, ты не пробовал реализовывать?
[00:27:45] <gds> звучит прикольно, но я знаю, какие проблемы тут будут, поэтому не пробовал и никогда не буду пробовать.
[00:31:22] <gds> и вообще, идея представления данных посредством функций -- гнилая в большинстве случаев.
[00:33:57] <bobry> ну как идея вполне норм, а вот как идея полезная на практике мб и гнилая
[00:35:55] ftrvxmtrx вошёл(а) в комнату
[01:06:14] <bobry> гм, а можно как нить поиметь незаполненный Array?
[01:08:16] <bobry> nice, Array.of_list []
[01:08:17] <bobry> :)
[01:08:25] Kakadu вышел(а) из комнаты
[01:08:43] <komar> [||]
[01:08:46] <komar> Не?
[01:09:31] <bobry> ах черт, это не то -- надо незаполненный array фиксированного размера
[01:12:02] <komar> че
[01:12:18] <komar> безнихто array штоле
[01:12:36] <bobry> ага, но это вроде особого смысла в камле не имеет
[01:15:35] Typhon вошёл(а) в комнату
[01:28:19] <bobry> кто хочет почитать икспертов жавистов в (омг!) вконтактике?
[01:29:10] <bobry> чиста для затравки "Тот факт, что ФЯП не прижились повсеместно говорит только о том, что концепция эта в принципе достаточно чужда для восприятия, как ни крути цикл это нечто более человеко-понятное, чем рекурсия, а объект инкапсулирующий свойства проще для восприятия чем тысяча и одна функция с тысячей и одном параметром и 100 уровнями вложенности."
[01:31:08] Typhon вошёл(а) в комнату
[01:32:46] <komar> Давай.
[01:33:24] <bobry> http://vk.com/wall26386_2897
[01:59:42] Typhon вышел(а) из комнаты: Replaced by new connection
[01:59:47] Typhon вошёл(а) в комнату
[02:00:58] dzhon вышел(а) из комнаты
[02:06:02] <gds> кто бы им всем перевязал семенные канатики?
[02:07:39] <gds> bobry: про массивы -- случаем не подобное https://bitbucket.org/gds/cadastr/src/tip/src/cd_Array.ml#cl-30 ищешь?
[02:15:37] Typhon вышел(а) из комнаты
[02:17:41] <bobry> gds: именно, но уже решил без них
[02:21:44] Typhon вошёл(а) в комнату
[02:24:24] Typhon вышел(а) из комнаты
[02:34:23] <bobry> gds: такое ощущение что ты уже там половину камла перелопатил в кадастре :)
[02:35:10] <gds> не, сильно меньше.  что надо -- то и дописываю, согласно своим потребностям, в том числе эстетическим.
[02:35:59] <bobry> удивительно что последние у тебя есть :)
[02:36:06] <bobry> я думал ты сама практичность
[02:37:07] <gds> эстетические потребности -- в том, чтобы практично и надёжно решать типичные задачи :]
[02:37:30] <gds> ну и, действительно, "однострочники", отсутствующие в stdlib, туда идут.
[02:38:53] <bobry> а чего ты не возьмешь что нить готовое та? extlib // batteries?
[02:38:59] <bobry> и не допилишь то чего тебе не хватает
[02:40:28] bobry вышел(а) из комнаты
[02:41:15] <gds> изначально не хватало двух вещей: 1. контейнеров (точнее, отображений) вида map_... 'k 'v, таких, чтобы можно было подменять их.  там оверхед есть, и типичные камло..ы не захотят даже видеть это, там же объекты11111  2. runtime type information со всякими извращениями.  как указанные личности смотрят на полудинамическую типизацию -- не мне рассказывать, многие тут тоже плюются.  ну и в какую из либ это говно присовывать, спрашивается? :)
[03:13:54] letrec вошёл(а) в комнату
[03:25:42] f[x] вошёл(а) в комнату
[03:30:45] Typhon вошёл(а) в комнату
[03:46:46] Typhon вышел(а) из комнаты
[03:56:21] Typhon вышел(а) из комнаты
[04:07:41] <gds> интересно, как народ решает проблему с логгированием в библиотеках?
понятно, что логи бывают разными, и не всегда есть консоль, и не всегда приемлемо туда писать, и вообще, гибчее как-то надо.
syslogd не предлагать.
мне надо обязательно это сделать, иначе опять потеряю _3_ часа времени на локализацию какой-нибудь очередной х-ни, которая была отложена из-за того, что, типа, "некуда срать логами, и так пойдёт".
закатывать библиотеку в функтор, только чтобы передать ей логгер -- не вариант.  кое-как разумно выглядит вариант "по умолчанию срать на stdout/stderr, менять это поведение специальной функцией, изменяющей общее глобальное состояние".  и, разумеется, не срать в логи до первого вызова функций библиотеки.
[04:26:53] <f[x]> угу, по умолчанию stderr, и Log.set_logfile
[04:29:12] letrec вышел(а) из комнаты
[04:53:05] f[x] вышел(а) из комнаты: Computer went to sleep
[04:54:08] ftrvxmtrx вышел(а) из комнаты
[05:23:15] <gds> да, set_logfile выглядит разумно.  пока сделаю именно так.
[07:32:13] bobry вошёл(а) в комнату
[07:34:52] ermine вошёл(а) в комнату
[07:44:39] bobry вышел(а) из комнаты
[08:40:36] superbobry вошёл(а) в комнату
[09:49:58] komar вышел(а) из комнаты
[09:50:57] komar вошёл(а) в комнату
[10:01:20] f[x] вошёл(а) в комнату
[10:42:05] ftrvxmtrx вошёл(а) в комнату
[11:00:32] f[x] вышел(а) из комнаты: Computer went to sleep
[11:30:44] ftrvxmtrx вышел(а) из комнаты
[11:57:20] komar вышел(а) из комнаты: Replaced by new connection
[11:57:21] komar вошёл(а) в комнату
[12:02:11] ftrvxmtrx вошёл(а) в комнату
[13:16:12] komar вышел(а) из комнаты
[13:21:16] Kakadu вошёл(а) в комнату
[13:35:21] Kakadu вышел(а) из комнаты: Replaced by new connection
[13:35:21] Kakadu вошёл(а) в комнату
[13:48:47] <Kakadu> superbobry: я даже не знаю что в том сраче дописать....
[13:49:11] <Kakadu> superbobry: как ты их вообще находишь?
[13:51:35] <superbobry> скинули в рабочий чатик
[13:51:44] <superbobry> я тоже не знаю -- все в общем то понятно :)
[13:55:06] shaggie вошёл(а) в комнату
[14:03:30] <superbobry> гм, в камло нету strftime / strptime?
[14:05:03] <ftrvxmtrx> в extunix что-то было
[14:06:39] <superbobry> есть ага, жаль что нет искоробки
[14:08:50] Kakadu вышел(а) из комнаты: Replaced by new connection
[14:08:50] Kakadu вошёл(а) в комнату
[14:10:06] <ftrvxmtrx> http://caml.inria.fr/mantis/view.php?id=3849
[14:10:50] <ftrvxmtrx> http://caml.inria.fr/mantis/view.php?id=3851 <-- тут даже патч есть
[14:11:16] Kakadu вышел(а) из комнаты
[14:11:18] Kakadu вошёл(а) в комнату
[14:15:13] Kakadu вышел(а) из комнаты: Replaced by new connection
[14:15:14] Kakadu вошёл(а) в комнату
[14:35:55] Typhon вошёл(а) в комнату
[14:35:55] Typhon вышел(а) из комнаты
[14:36:55] Typhon вошёл(а) в комнату
[14:45:08] <superbobry> мда, даже не in progress
[14:45:11] <superbobry> <3 ocaml
[14:45:42] <Kakadu> Ну дык зачем раздувать stdlib? для этого есть кора
[14:46:07] <superbobry> может тогда вообще выпилить оттуда все?
[14:46:19] <superbobry> пишите свои контенеры, юникслибы -- кому что надо
[14:46:29] <superbobry> зато французам не надо ничего поддерживать
[14:46:55] <Kakadu> Нет , просто твоя функция просто не нужна, а списки нада всем
[14:47:04] <Kakadu> тьфу, повторение слов
[14:47:05] <superbobry> не нужна для факториалов
[14:47:09] <superbobry> но нужна для реального мира
[14:47:16] <Kakadu> для реального мира есть кора
[14:47:31] <superbobry> в 21-м веке принято такой минимум ждать от языка
[14:50:35] <Kakadu> а тебе это для работы или для барбры?
[14:53:21] <superbobry> для работы
[14:53:33] <gds> stdlib -- для того кода, который пользователям без французов написать будет сложно/невозможно.  примеры -- сишные биндинги в pervasives/unix, очередь с магией в queue, магия в lazy/obj/printf, доказанная реализация map/set.
[14:55:03] <superbobry> доказанная?
[14:55:27] <gds> да, где-то были доказательства в coq.
[14:55:48] <Kakadu> я понял что надо сделать
[14:56:20] <Kakadu> 1. пропатчить интерпрертер байткода чтобы можно было сделать N интерпретаторов одновременно --- отсюда парарллельность
[14:56:39] <gds> а сборка мусора как?
[14:57:12] <Kakadu> 2. научиться понимать что камло хорошее и код безопасный и отказаться от защиты системных тредов (сэкономить хочерта тактов при переключении контекста)
[14:57:22] <Kakadu> 3. ????
4. Профит
[14:58:09] <Kakadu> gds: я не до конца представляю себе проблему. Разворачивай давай.
[14:58:26] klapaucius вышел(а) из комнаты
[14:59:00] <Typhon> "чтобы можно было сделать N интерпретаторов одновременно" — было вроде в листе?
[14:59:01] <f[x]> gds: официальная позиция - в stdlib то что нужно для самого компилера камля
[14:59:07] <Typhon> реентрант интерпретатор?
[14:59:17] <Typhon> f[x]: для компилятора coq'а %)
[14:59:28] <f[x]> хм, тоже вариант
[15:00:06] <superbobry> похоже на правду :)
[15:00:20] <superbobry> потому что "для людей" в stdlib немного
[15:00:58] <Kakadu> Typhon: N интерпретаторов чтобы была параллельность а не зеленые треды
[15:01:31] <Typhon> https://github.com/OCamlPro/ocaml-reentrant
[15:02:02] <Typhon> и релевантный тред был, емнип
[15:02:05] <f[x]> рантаймов
[15:02:15] <f[x]> кому нужны эти интерпретаторы
[15:04:58] <gds> f[x]: про логи: случаем нет под рукой функции, форматирующей текущее время во что-то типа "2012.02.16 13:04:01.123"?
[15:05:49] <gds> Kakadu: разверну проблему: между тредами нужна передача значений, за этим надо как-то следить.
кроме того, ты хочешь избавиться от переключения контекстов, но тогда не сможешь использовать кучуядер.
[15:06:01] <f[x]> gds: http://paste.in.ua/3880/
[15:06:16] <gds> благодарю.
[15:09:56] <Kakadu> gds: надо посмотреть как в сингулярити сделано переключение кнтекстов
[15:35:18] Typhon вышел(а) из комнаты
[15:36:01] Typhon вошёл(а) в комнату
[15:41:09] letrec вошёл(а) в комнату
[15:41:09] Typhon вышел(а) из комнаты: Replaced by new connection
[15:41:10] komar вошёл(а) в комнату
[15:41:29] Typhon вошёл(а) в комнату
[16:18:40] komar вышел(а) из комнаты
[16:19:18] komar вошёл(а) в комнату
[16:27:22] <gds> запилил простенькие логи, инджоюсь нихом.  https://bitbucket.org/gds/parvel/changeset/61d5557f99e4
[16:28:20] <superbobry> а чего не bolt?
[16:29:54] <gds> nih же!1111
[16:57:50] <letrec> gds: а почему log_level и его значения не алгебраический тип даных?
[17:00:46] <gds> letrec: 1. мне было незачем это показывать, но в плане "создать и разрушить" они ведут себя именно как АТД, если ограничены сигнатурой.  2. чтобы условие "писать ли в лог" выливалось в проверку двух целых чисел.  можно было бы и с АТД так сделать, расположив их в нужном порядке, но сходу не додумался, да и не очень надёжно, надо было бы рассчитывать на полиморфное сравнение и всегда хранить их в нужном порядке.
[17:02:03] <gds> шок!  буду переводить парвел на оазис.
[17:16:30] komar вышел(а) из комнаты
[17:31:54] superbobry вышел(а) из комнаты
[17:32:49] komar вошёл(а) в комнату
[17:33:49] <gds> про parvel+oasis -- оказалось совсем не больно :]  только вот меня бесед uninstall.  Makefile:
uninstall_force :
    ocamlfind remove parvel
reinstall_force : uninstall_force install
[17:35:18] <Kakadu> а просто uninstall как ты написал?
[17:36:51] <gds> Kakadu: http://tinyurl.com/7k3jfj9
[17:38:26] <Kakadu> но тогда мне непонятно зачем uninstall_forece если он с uninstall свопадает...
[17:39:09] <Kakadu> ой, стоило ходить более чем по первой ссылке
[17:40:46] <gds> в общем-то не совпадает.
[18:17:01] Kakadu вышел(а) из комнаты: Replaced by new connection
[18:17:01] Kakadu вошёл(а) в комнату
[18:28:14] komar вышел(а) из комнаты: Replaced by new connection
[18:28:15] komar вошёл(а) в комнату
[18:48:18] Kakadu вышел(а) из комнаты
[19:35:14] Typhon вышел(а) из комнаты
[19:43:46] Kakadu вошёл(а) в комнату
[20:11:38] komar вышел(а) из комнаты: Replaced by new connection
[20:11:40] komar вошёл(а) в комнату
[20:42:53] ftrvxmtrx вышел(а) из комнаты
[20:44:36] komar вышел(а) из комнаты: Replaced by new connection
[20:44:37] komar вошёл(а) в комнату
[20:53:19] Typhon вошёл(а) в комнату
[20:55:48] letrec вышел(а) из комнаты
[21:06:20] shaggie вышел(а) из комнаты
[21:15:04] bobry вошёл(а) в комнату
[21:23:39] ftrvxmtrx вошёл(а) в комнату
[21:33:48] bobry пишет brb.conf для oasis'e
[21:33:51] <bobry> *oasis'a
[21:34:00] <bobry> будем на нем тестировать Requires
[21:52:33] <bobry> первый грабли, виват ocamlgraph, который по make install делает cp ... /usr/lib/...
[21:52:44] <bobry> а ocamlfindом ставит только по make install-ocamlfind
[21:55:15] Typhon вышел(а) из комнаты
[21:55:38] <gds> bobry: использовал бы оверблд -- проблем бы не было: http://overbld.hg.sourceforge.net/hgweb/overbld/overbld/file/aebdfcab6f1d/src/ocamlgraph/install
[21:55:46] komar вышел(а) из комнаты
[21:55:50] <gds> ну это я так.  будучи "мастером заднего числа".
[21:55:58] komar вошёл(а) в комнату
[21:57:38] <bobry> gds: а шо мне overbld -- я ш барбару проверяю
[21:58:10] <gds> ну да, нишо.
[21:58:41] <bobry> I: Running command "make install"
mkdir -p /usr/lib/ocaml/ocamlgraph
mkdir: cannot create directory `/usr/lib/ocaml/ocamlgraph': Permission denied
[21:58:43] <bobry> блажть!!
[21:58:53] <bobry> хреновы make-o-пейсатели
[22:01:04] <gds> кагбэ назревает нужда в опциях сборки или в патче?  первое -- вызвать правильный make, второе -- пропатчить Makefile.
[22:01:36] <gds> кстати, на makefile-писателей не гони, у них не было выбора.
[22:03:42] <bobry> да по хорошему надо просто --prefix в configure передать
[22:03:52] <bobry> но как его передать чтобы развернуть $PWD шота не понятно
[22:04:04] <bobry> в камле нету expandvars?
[22:04:42] <gds> какой в жопу $PWD?
[22:06:16] <bobry> а как ты мне предлагаешь еще в brb.conf писать?
[22:06:22] <bobry> этот гат хочет абсолютный префикс
[22:07:07] <gds> передавай всем конфигурям абсолютный префикс.
[22:07:30] <bobry> а они его по разному хочут суки
[22:07:41] <bobry> --prefix=/path/to/lib
[22:07:47] <bobry> --prefix /path/to/lib
[22:08:57] <gds> а если в окружении выставлять $prefix, подцепят?  а если, опционально, --prefix "${prefix}" указывать?
только ты учитывай, если сделаешь такой конфиг, который не будет учитывать пробелы в путях, то я сделаю твою куклу вуду.
[22:09:53] <bobry> вощем нафи пока окамлграф
[22:09:54] <bobry> сделаю патч
[22:09:59] <bobry> не хочу щас об этом думать
[22:10:10] <bobry> у них версия вышла буквально месяц назад
[22:10:16] <bobry> неужели сложно было запилить оазис
[22:10:17] <gds> патч -- одобряю.
[22:10:21] <bobry> мать же их французскую
[22:10:30] <gds> оазис -- кому как.  мне для итератов -- точно сложно.
[22:10:55] <bobry> у тебя версия вышла год назад
[22:24:35] <bobry> I: Running command "rm -rf /home/bobry/Code/camlunity/barbra/_dep/tmp/oasis/oasis-0.2.0"
I: Dependencies built successfully!
[22:24:37] <bobry> вуху :)
[22:24:52] <bobry> осталось завести Requires и перемешать содержание brb.conf
[22:26:42] ermine истошно стучится головой об стол, пытаясь родить инкремент развития в парсере
[22:27:28] <ermine> bobry: а оно уже проинсталлит оазис куда надо?
[22:29:39] <bobry> ermine: а куда надо?
[22:29:57] <bobry> мы ш вроде выяснили уже что тебе нужно odb для system-wide установок
[22:30:04] <bobry> у барбары другой юз кейс
[22:30:16] <bobry> oasis просто пример жирного проекта с кучей зависимостей
[22:49:10] <bobry> gds: а можно как нить заставить findlib ваще не смотреть в мой /usr/lib/ocaml?
[22:49:15] <bobry> а то он гат все равно смотрит
[22:52:46] <ermine> у него конфиг в /etc есть
[22:53:13] <bobry> это да
[22:53:19] <bobry> но мне бы скрыть все нестандартные пакеты
[22:53:33] <bobry> если просто убрать из конфига path то он даже camlp4 не находит
[22:54:07] <ermine> а финдлибу можно сунуть другой конфиг
[22:54:10] <ermine> наверное
[22:55:39] <ermine> ну стандартные скопируй скриптиком
[22:56:05] <ermine> или проинсталлить финдлиб так же как оазис, для укромного кейса
[22:56:29] <ermine> дальше - так же и само камло скромно проинсталлить в свой хоум
[22:56:40] <ermine> не жмотиться же
[23:00:58] <gds> > oasis просто пример жирного проекта с кучей зависимостей
и пример бандла, и пример venv'а, которые, гадом буду, если не сдохну в ближайшее время, то допилю рано или поздно.
[23:01:31] <gds> > bobry: gds: а можно как нить заставить findlib ваще не смотреть в мой /usr/lib/ocaml?
переменными окружения, вроде бы, можно.  поиграйся.
[23:01:51] <gds> bobry: PATH убирать не надо!  ты чо.
[23:05:04] <ermine> насчет переменной - OCAML_PATH - это только добавка к стандартной дире
[23:05:36] <ermine> ибо да, стандартные паккаджи в ином случае отомрут
[23:06:02] ermine вышел(а) из комнаты
[23:08:02] <gds> ermine ошибается, так как OCAML_PATH это для findlib, и не отомрут.
[23:08:21] <gds> хотя, если findlib строит поиск только на этой переменной, то да.
[23:09:05] <gds> я же в барбре специально прописывал append и помнил, что можно set, в случаях, когда старое отринем вон.  даже тестил чото, но смутно помню.
[23:12:57] <Kakadu> bobry: я пробовал копировать стдлиб в хомяк и фиксить конфиг. Вроде было ок
[23:14:14] komar вышел(а) из комнаты
[23:17:35] komar вошёл(а) в комнату
[23:23:34] <gds> копировать можешь хоть в /dev/null, это не эксперимент ведь.  или я чего-то не знаю?
[23:24:22] <Kakadu> gds: какой божественный сарказм
[23:24:40] <gds> * бомжественный
[23:25:00] <Kakadu> вообще-то понять, что файндлиб не среть в /usr/* можно не давая ему sudo
[23:28:46] <gds> Kakadu: спасибо, кэп.  Кстати, ровно это и показано было выше в боброго.
[23:30:17] <Kakadu> gds: всегде ваш Кэп, вечно читающий подиагонали
[23:30:50] <gds> Thank you, Cap!
[23:58:05] bobry вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!