Home
Objective Caml
ocaml@conference.jabber.ru
Вторник, 10 января 2012< ^ >
ygrek установил(а) тему: 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:04:23] savikov вышел(а) из комнаты
[01:28:10] <bobry> что-то мне кажется что для bootstrap'a придется отказаться от res, ну или надо буит перенести все это хозяйство в src/ ибо Install и Source должны быть чисты от зависимостей
[01:31:38] <bobry> gds: а откуда название filew? почему w?
[01:33:14] <bobry> gds: и еще, удали у себя пжлста ветку feature/cmdliner -- а то ты ее с последним коммитом пушнул
[01:36:16] <bobry> а еще меня смущает идея с альтернативами, ну допустим wget / curl еще хоть как то обосновано, но вот альтернативы для vcs это странно
[01:36:30] <bobry> особенно учитывая планируемые bundles, где сырцы уже будут выкачены
[01:36:45] <bobry> или для архиваторов, брр
[01:40:24] <gds> bobry: filew = "file work"
про ветку -- удолю.
про res -- ээээ.  откуда "чисты от зависимостей", если res.ml[i] это всего лишь два файла?
альтернативы для vcs -- не странно.  иногда есть hg, но нет и не будет git, но есть hg-git.
[01:48:30] Kakadu вышел(а) из комнаты
[01:57:13] <gds> про альтернативы к архиваторам -- есть одна удивительная платформа, где архиватор rar умеет распаковывать zip, arj, tar.gz, вроде tar.bz2, и, кроме того, iso.  почему бы не использовать это.
[02:02:14] <Typhon> (git tip: git up == git push origin HEAD , чтобы левые ветки не пушились)
[02:06:28] <Typhon> (git put == ... , точнее, git up лучше оставить под git pull --rebase)
[02:07:25] <gds> сделал проще, "hg bookmark -d feature/cmdliner", затем при hg push оно запушило только две ветки/тега:
    default::refs/heads/master => GIT:5ca4c910
    default::refs/tags/v1.0 => GIT:43d5c28a
[02:08:17] <gds> хотя тоже нетривиальность, надо было помнить, что гитовские заморочки хранятся в hg bookmarks.
[02:09:50] <gds> но, вообще, с появлением/опробированием hg-git я стал совершенно по-другому смотреть на git.  Вроде даже нормальный dvcs, если не лазить внутрь.
[02:23:28] <bobry> gds: мне кажется что альтернативы это дело ОС, а не наше
[02:23:52] <bobry> как же максимальная простота решения? мы не комбайн делаем в конце концов
[02:24:34] <gds> попробовать несколько бинарников -- просто.  потребовать от пользователя ставить бинарники -- сложно, требует админских прав, то есть, потенциальный "стоппер".
[02:24:56] <bobry> про админски права уже было выше -- это решается бандлами
[02:25:09] <gds> лол поставь мне curl
[02:25:09] <bobry> на сервер попадает бандл, а не голый brb.conf
[02:25:29] <gds> не обязательно, что везде и всегда пользователю будет бандл.
[02:25:40] <bobry> ну это возможное и простое решение
[02:25:52] <gds> бандл -- чисто для случаев "передать пользователю" или "поставить там, где ты не админ".
[02:26:06] <bobry> ну вот, а где ты админ -- ты доставишь все чего не хватает
[02:26:29] <gds> если админ поставил wget, но не поставил curl -- вешаться?
[02:26:55] <bobry> на curl / wget я согласен
[02:27:15] <bobry> хотя по мне так "pick one"
[02:28:07] <bobry> в смысле это довольно второстепенные фичи, которые сильно пачкают код своим присутствием (по крайней мере в том виде, в котором они есть сейчас)
[02:30:30] <gds> такие вещи приходят только с опытом.  попробуй поразрабатывать в более-менее разнородном окружении, не всегда имея админские права и не всегда имея возможность ставить какой-либо софт.
если считаешь, что полезная функциональность пачкает код -- видимо, у тебя есть для этого кода более важные применения, нежели чтобы он приносил пользу людям.  тогда задрачивай его до красоты.
[02:31:30] gds вышел(а) из комнаты
[03:21:28] <bobry> сильно :)
[03:22:23] <bobry> в общем то глупо спорить про пользу, я просто хочу какого-то баланса между пользой и красотой кода
[03:34:17] Typhon вошёл(а) в комнату
[03:34:22] Typhon вышел(а) из комнаты
[03:35:27] Typhon вошёл(а) в комнату
[03:37:41] Typhon вышел(а) из комнаты
[03:39:40] Typhon вошёл(а) в комнату
[03:41:50] Typhon вышел(а) из комнаты: Replaced by new connection
[03:42:10] Typhon вошёл(а) в комнату
[03:43:15] Typhon вышел(а) из комнаты: Replaced by new connection
[03:43:35] Typhon вошёл(а) в комнату
[03:43:50] Typhon вышел(а) из комнаты
[03:44:09] Typhon вошёл(а) в комнату
[03:44:14] Typhon вышел(а) из комнаты
[03:44:50] Typhon вошёл(а) в комнату
[03:51:37] Typhon вышел(а) из комнаты: Replaced by new connection
[03:51:57] Typhon вошёл(а) в комнату
[03:52:00] letrec вошёл(а) в комнату
[03:52:10] letrec вышел(а) из комнаты
[03:52:25] letrec вошёл(а) в комнату
[03:53:49] Typhon вышел(а) из комнаты: Replaced by new connection
[03:54:09] Typhon вошёл(а) в комнату
[03:57:49] Typhon вышел(а) из комнаты
[04:01:23] Typhon вышел(а) из комнаты
[04:15:09] f[x] вышел(а) из комнаты: Computer went to sleep
[05:04:01] letrec вышел(а) из комнаты
[10:10:18] dzhon вошёл(а) в комнату
[10:20:42] Andrey Popp вышел(а) из комнаты
[10:45:13] bobry вошёл(а) в комнату
[10:51:07] ermine вошёл(а) в комнату
[11:41:04] klapaucius вошёл(а) в комнату
[11:54:16] shaggie вошёл(а) в комнату
[12:05:53] dzhon вышел(а) из комнаты
[12:20:43] Kakadu вошёл(а) в комнату
[12:25:16] gds вошёл(а) в комнату
[12:29:55] <Kakadu> что-то мне праздники не пошли на пользу. Разленился совсем
[12:34:41] <bobry> Kakadu: пили барбару!
[12:36:42] Kakadu вышел(а) из комнаты
[12:40:35] Kakadu вошёл(а) в комнату
[12:41:18] <Kakadu> bobry: барбра стрейзанд. ууууу-ууу-ууу-у )
[12:41:44] <f[x]> ах вот оно что
[12:45:02] <bobry> Kakadu: давай-давай, там надо патчи прикрутить
[12:51:15] <bobry> в общем я тут еще подумал про alternatives, если все это упрятать в модуль, а в Install вызывать только Syscaps.git ["foo"; "bar"; "baz"] то может оно и ок
[13:02:29] <Kakadu> рррр, как я ненавижу этот понедельник
[13:02:33] <gds> то есть, lazy + Lazy.force перенести в Syscaps?  ну чо, i like to move it move it, мне нравится!
[13:02:49] <gds> Kakadu: для тебя есть плохие новости, сегодня вторник.
[13:03:14] <Kakadu> gds: ну ты понял
[13:03:17] <bobry> gds: "мне нравится!" сарказм?
[13:04:18] bobry выпилил первый unsafePerformIO в коде коллеги ..
[13:07:37] <gds> bobry: ну изоморфно же в целом, код один и тот же принципиально, а старый код был нормальный.  значит, кроме эстетства разницы не будет, и всё будет работать примерно так же, как было.  у тебя будет чуть больше радости в жизни без потерь для внешнего мира.  это хорошо.
[13:10:21] <f[x]> bikeschedding ftw
[13:11:23] <bobry> :)
[13:11:39] <bobry> f[x]: ну в общем то да, давайте лучше bundles запилим уже ..
[13:12:27] dzhon вошёл(а) в комнату
[13:50:24] <gds> тогда я кое-что хочу сделать для бандлов, но пока секретно!  если получится, покажу.
[13:52:21] <f[x]> у camlunity есть аккаунт на bugs.x9c.fr ?
[14:45:04] Typhon вошёл(а) в комнату
[15:03:39] dzhon вышел(а) из комнаты
[15:07:19] <bobry> а можно с помощью camlp4 поменять ассоциативность операторов? напр. чтобы использовать $ вместо %
[15:09:48] <f[x]> имхо нет
[15:27:55] <Kakadu> гавно
[15:28:05] <Kakadu> много раз пытался скомпилить lwt под цигвином
[15:28:18] <Kakadu> одна и та же ошибка и постоянно забываю сумел ли я её пофиксить
[15:28:35] <Kakadu> и да, я знаю что он не нужен
[15:40:01] dzhon вошёл(а) в комнату
[15:45:47] letrec вошёл(а) в комнату
[15:47:29] <letrec> Kakadu: lwt не нужен?
[16:07:55] <Kakadu> letrec: цигывин
[16:09:44] Kakadu вышел(а) из комнаты
[16:18:41] ftrvxmtrx вошёл(а) в комнату
[16:36:39] dzhon вышел(а) из комнаты: Replaced by new connection
[16:36:42] dzhon вошёл(а) в комнату
[16:55:42] Kakadu вошёл(а) в комнату
[17:08:13] <f[x]> mascot - годный
[17:10:26] <gds> жги подробностями!
[17:12:56] <f[x]> делает всё что заявлено
[17:13:25] <bobry> хочу hlint для камла!
[17:13:30] <f[x]> есть всякие мелочи, но в целом выхлоп можно скармливать нубам с требованием - чтобы здеся не было ни одного ворнинга
[17:14:16] <f[x]> ну это типа синтаксический lint
[17:18:04] <f[x]> а выхлоп в html можно в post-commit хук засунунть
[17:56:11] dzhon вышел(а) из комнаты
[18:17:39] komar вышел(а) из комнаты: Replaced by new connection
[18:17:40] komar вошёл(а) в комнату
[19:16:53] <letrec> а как бы так пайп открыть, чтобы родитель писал, а потомок читал, а не наоборот как по умолчанию?
[19:18:00] <gds> letrec: передать родителю пишущий конец, а потомку читающий конец?
[19:21:07] <letrec> gds: т.е. это моё дело какой дескриптор из какого процесса использовать?
[19:21:36] <gds> если процессы рождены форком, то да.  хоть все сразу и все вместе.
[19:23:03] <gds> кстати, в парвеле хочу подобное использовать.  если сделал listen и делаешь accept на этом сокете из форкнутых процессов, то коннект подхватит первый попавшийся процесс.  для аналога work-stealing queues вполне юзабельно, хотя и кривовато, не тпруЪ.
[19:30:04] <letrec> я что-то в этом роде и хочу сделать: асинхронное выполнение функций в другом процессе и держать пул процессов
[19:30:29] <letrec> memory mapped files что-то не работают, пытаюсь через пайпы сделать
[19:31:30] <letrec> Джамбон это уже сделал - по-взрослому с lwt, но я хочу сам сделать
[19:36:38] bobry вышел(а) из комнаты
[19:37:40] <gds> понял.  Если сам, то не буду отговаривать.
[19:42:28] <letrec> если позвать Unix.close после close_out, то оно бросает исключение (хотя в доке ничего такого не указано)
[19:42:46] <letrec> похоже, что close_out закрывает дескриптор файла
[19:43:04] <letrec> хотя, опять же, дока молчит об этом
[19:46:20] <gds> по логике, close_out должно закрывать.  Если out_channel просто не нужен, а закрывать не надо, можно выбросить это значение.
[19:48:29] <letrec> т.е. дескриптор к каналу 1 к 1?
[19:49:30] <gds> если создал канал, то у него ровно один дескриптор.  остальные случаи тоже бывают.
[19:49:43] <gds> может можно создать ещё каналы.
[19:50:26] <f[x]> > я что-то в этом роде и хочу сделать: асинхронное выполнение функций в другом процессе и держать пул процессов
насколько я понимаю это примерно как монад-туториал для х-истов
[19:50:32] <f[x]> у каждого камлевода есть своя реализация :)
[19:50:45] <gds> да, только у меня будет лучшая!
[19:50:53] <letrec> f[x]: :)
[19:50:58] <f[x]> > т.е. дескриптор к каналу 1 к 1?
не всегда
[19:51:27] <letrec> по интерфесу похоже, что на один дескриптор может быть много каналов; если так, то непонятно почему закрытие канала приводит к закрытию дескриптора
[19:53:10] <gds> да, дока кривая.  если канал не нужен -- выбрасывай его.  почему close_out закрывает -- чтобы было удобно для open_in всяких.  ну и закрытие каналов нельзя/неудобно навешивать на мусорщик.  и вот, учитывая, что каналы это тупое-навешенное на дескрипторы, как-то так вот оно и выходит.
[19:53:19] <f[x]> закрытие канала приводит к закрытию всех его дескрипторов
[19:53:50] <gds> f[x]: каких "всех"?
[19:53:51] <letrec> а если открыто несколько? оно рефкаунт ведёт?
[19:53:53] <f[x]> не, не так
[19:54:05] <letrec> закрытие последнего видимо
[19:54:14] <f[x]> какого ещё последнего?
[19:54:26] <letrec> канала для дескриптора
[19:54:37] <f[x]> каналы используют дескрипторы
[19:54:40] <f[x]> а не наоборот
[19:54:41] <letrec> т.е. каунт каналов стал 0 и дескриптор не нужен
[19:54:44] <f[x]> нет
[19:54:45] <letrec> ну да
[19:55:01] <f[x]> важная сущность это дескриптор
[19:55:11] <f[x]> а канал это абстракция
[19:55:32] <f[x]> as gds said
[19:55:33] <letrec> открыли файл, и кучу каналов, после закрытия последнего канала можно и файл грохнуть, так?
[19:55:45] <f[x]> да
[19:55:49] <letrec> в смысле дескриптор
[19:56:06] <f[x]> точнее как ты можешь открыть кучу каналов к одному дескриптору?
[19:56:57] <gds> ну как, повызывать кучу раз функцию file_descr -> out_channel, вроде в Unix.
[19:57:19] <f[x]> ок
[19:57:21] <letrec> Unix.out_channel_of_descr много раз позвать для того же дескриптора
[19:57:33] <f[x]> тогда они все между собой независимы
[19:57:41] <letrec> вот и я так думал
[19:57:41] <f[x]> и по идее close_out закроет дескриптор сразу же
[19:57:42] <gds> каналы -- да.
[19:57:56] <f[x]> и все остальные каналы накроются медным тазом
[19:58:00] <f[x]> там всё тупо
[19:58:12] <letrec> суровый интерфейс
[19:58:17] <f[x]> если ты спускаешься на уровень дескрипторов - то сам за ними должен следить
[19:58:22] <f[x]> нормальный
[19:58:46] <f[x]> это системное погроммирование
[19:58:56] <letrec> я не против следить, непонятно почему закрытие канала так много на себя берёт
[19:59:05] <letrec> асиметрия получается
[19:59:18] <f[x]> потому что оно думает что "владеет" дескриптором
[19:59:27] <letrec> вот вот
[19:59:37] <f[x]> а дескриптор в униксе это int - там некуда инфу сохранить лишнюю
[20:00:03] <f[x]> ну, это компромисс vs толстых дескрипторов
[20:00:17] <letrec> вроде как за дескрипторами сам должен следить, но тебе рандомно помогают
[20:00:40] <letrec> мне кадется было бы логично не закрывать дескриптор при закрытии канала
[20:00:47] <f[x]> letrec: ы?
[20:01:11] <f[x]> т.е. let ch = open_in "dsds" in close_in ch; close (fd_of_ch ch)
[20:01:14] <f[x]> так что-ли?
[20:01:41] <letrec> да, если дескриптор я получил без помощи API каналов
[20:02:11] <letrec> а то получается, что дескриптор я получаю явно, а грохают его неявно
[20:02:22] <f[x]> сейчас думать о дескрипторах надо только если ты ими явно манипулируешь, а в предложенном варианте о них всегда надо думать
[20:02:24] <f[x]> некузяво
[20:02:32] <f[x]> letrec: так не грохай его неявно!
[20:02:41] <letrec> каналы не закрывать?
[20:02:43] <f[x]> > если ты спускаешься на уровень дескрипторов - то сам за ними должен следить
[20:02:45] <f[x]> да
[20:03:25] <f[x]> это какое-то правило иерархии API - ресурсами управлять на самом низком уровне на котором ты их используешь
[20:05:39] <letrec> вот код http://ocaml.paste.pro/5139899 - попинаете?
[20:06:15] <letrec> надо что-то с исключениями придумать
[20:06:25] <letrec> если f бросит
[20:06:42] <letrec> в принципе понятно что, но пока не сделал
[20:06:47] <letrec> что ещё криво?
[20:07:49] <letrec> unwind protect надо для всех системных ресурсов, которые сам аллоцирую
[20:08:43] <gds> попинаю, конечно!  у меня в парвеле будет кастомная сериализация-десериализация, а не только marshal, который может повалить программу.
[20:09:55] <letrec> я об этом тоже думал - можно сериализатор/десериализатор параметрами передавать
[20:10:13] <gds> ой, там ещё много чего можно сделать :)
[20:10:24] <letrec> или параметризовать ими через функторы
[20:10:32] <letrec> так ты рассказывай :)
[20:10:41] <letrec> надо ещё lwt приделать
[20:10:42] <gds> а про unwind protect -- это with-идиома?  with_fd ... (fun fd -> ..)?  да, надо.
[20:10:53] <letrec> да - она самая
[20:11:42] <gds> да тут уже, судя по срокам, надо не рассказывать, а код показывать.  Впрочем, https://bitbucket.org/gds/parvel/wiki/concepts_rus и https://bitbucket.org/gds/parvel/wiki/inter-process-protocol , там кое-что про процессы.  Сериализация -- на основе cadastr, там runtime type info.  В мелких проектах работает, но надо в парвел перенести.
[20:12:00] <letrec> вот https://github.com/MyLifeLabs/nproc/blob/master/nproc.ml как Джамбон сделал
[20:12:08] <letrec> сейчас почитаю
[20:12:14] <letrec> твой вариант
[20:13:44] <letrec> да, в твоём случае Marshal не катит
[20:13:49] <f[x]> letrec: для простого fork exec можешь погуглить invoke от Jon Harrop
[20:14:03] <f[x]> для fork'а marshall более чем ок
[20:14:12] <f[x]> бинарь то один и тот же
[20:14:50] <letrec> gds хочет процессы на разных хостах запускать, т.е. они в общем случае не из одного бинаря запускаются
[20:14:55] <letrec> есои я правильно понял
[20:15:01] <letrec> если
[20:15:20] <letrec> Marshal вроде в таких случаях юзать стрёмно
[20:18:05] <letrec> нашёл Харропа, а Unix.waitpid [] pid обязательно звать?
[20:20:51] <f[x]> letrec: угу
[20:20:52] <gds> да, мне надо на разных хостах, да ещё и из разных языков.
[20:20:54] <f[x]> я про твой случай
[20:21:06] savikov вошёл(а) в комнату
[20:21:19] <f[x]> letrec: ну если хочешь подождать children'ов
[20:21:34] <gds> savikov: по твоей наводке заценил сериальчик "шерлок", прикольно.
[20:21:34] <f[x]> если нет - можешь поллить или любым другим способом уззнавать что они сдохли
[20:22:09] <gds> кстати да, раньше в юниксах надо было явно waitpid, чтобы зомбаков не плодить.
[20:22:12] <letrec> в этом примитивно случае (каждый раз новый процесс) это выглядит как излишняя синхронизация
[20:22:44] <letrec> но я не достаточно в теме, чтобы утверждать
[20:22:55] <gds> дело в том, что ядрочистыйизумруд хранит инфу о процессе, даже если он вышел, на случай, если клиент захочет посмотреть, завершился ли процесс.
[20:23:01] <gds> и как именно завершился.
[20:23:42] <letrec> ок, понял - будем читать доку дальше
[20:24:00] <savikov> gds: я рад))) только только вышел 2 сезон 2серии довольно няшно. но уже не чувствуется что унывает :(
[20:27:36] <savikov> gds, ещё на любителя - "Ад на колёсах". Чутка весторна, а так это больше под историю где-то конец 18в начало 19, только только освободили рабов... начали вытеснять янков со своих земель... строить жд
[20:27:53] <gds> savikov: буддизм (или ещё какая срань из той оперы) кагбэ намекае, что у любой сущности есть рождение, жизнь и смерть.  Значит, в мире будет что-то другое.  Не обязательно хуже.
[20:28:07] <savikov> и вот этот сериал про стройку жд... про одного алчного политика, который вышел из самой бездны нищеты...
[20:36:29] <Kakadu> требуются телепаты: paste.in.ua/3612/
[20:36:43] <Kakadu> ой :) http://paste.in.ua/3612/
[20:37:40] savikov вышел(а) из комнаты
[20:38:53] <gds> Kakadu: телепатов не надо.  Не линкуешь камловский рантайм.
[20:41:08] <Kakadu> да
[20:42:45] <Kakadu> extern "C" гворят
[20:43:29] <Kakadu> да, я кран
[20:57:04] komar вышел(а) из комнаты: Logged out
[20:57:10] komar вошёл(а) в комнату
[20:58:30] komar вышел(а) из комнаты: Logged out
[20:58:35] komar вошёл(а) в комнату
[21:05:16] Typhon вышел(а) из комнаты
[21:10:16] komar вышел(а) из комнаты: Logged out
[21:10:21] komar вошёл(а) в комнату
[21:31:19] shaggie вышел(а) из комнаты
[21:33:41] letrec вышел(а) из комнаты
[22:08:03] <bobry> гм гм, расскажите как ocamlfindом бинарники ставить?
[22:08:20] <bobry> я вот пытаюсь собрать mascot, он все пихает в /usr/lib/ocaml/mascot
[22:14:54] Andrey Popp вошёл(а) в комнату
[22:32:59] f[x] вошёл(а) в комнату
[22:33:12] <gds> bobry: ocamlfind не ставит бинарники.
[22:33:28] <f[x]> gds: ocamlfind ставит всё что угодно :)
[22:33:36] <f[x]> но в site-lib
[22:33:44] <gds> тьфуты, тоже вспомнил, deriving как пример.
[22:33:47] <bobry> gds: ага, похоже надо запускать вот так 'ocamlfind query <binary>'
[22:33:48] <gds> но надо ли.
[22:34:03] <f[x]> bobry: INSTALL читай
[22:34:09] <f[x]> там написано что так и задумано
[22:34:16] <f[x]> я симлинк в ~/bin бросил и всё
[22:35:44] <bobry> уже прочитал ага
[22:44:47] komar вышел(а) из комнаты
[22:53:26] <bobry> gds: а что ты хотел с бандлами сделать?
[22:53:29] <bobry> или все еще секрет?
[23:10:23] <gds> да у меня тут сраный реаллайф.  докУменты оформляю всякоразные.  пока нет гарантий успеха, пока умолчу.
[23:12:07] <bobry> ну тада лана
[23:20:38] <gds> кстати, симлинк на вендах надо бросать очень осторожно, можно недокинуть ненароком.
[23:20:53] <bobry> на вендах есть симлинки? омг
[23:21:01] <gds> вот и я про то же.
[23:24:23] ermine вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!