Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 11 июля 2012< ^ >
f[x] установил(а) тему: OCaml / ОКамл / Камль -- http://caml.inria.fr | Камло - http://camlunity.ru/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire | Мойте руки перед чатом
Конфигурация комнаты
Участники комнаты

GMT+4
[00:03:49] ermine вышел(а) из комнаты
[00:25:00] <Kakadu> а в revised ещё можно писать let ... and ... in ?
[00:25:32] <Kakadu> c value такая рекурсия работает, а вот с летами у меня нет ((
[00:27:27] Typhon вошёл(а) в комнату
[00:54:19] komar вошёл(а) в комнату
[01:35:01] bobry вышел(а) из комнаты
[01:35:38] <gds> Kakadu: всё работает.  let rec f1= .. and f2 = .. in ..
[01:44:12] Kakadu вышел(а) из комнаты
[01:50:19] ludovik вышел(а) из комнаты
[04:28:18] ftrvxmtrx вышел(а) из комнаты
[08:15:33] bobry вошёл(а) в комнату
[09:06:44] bobry вышел(а) из комнаты
[09:17:56] ermine вошёл(а) в комнату
[11:17:29] Kakadu вошёл(а) в комнату
[11:56:44] ftrvxmtrx вошёл(а) в комнату
[11:59:08] <f[x]> gds: элегантным регекспом?
[12:06:40] <gds> f[x]: ет!  заметил, что в setup.ml код, заключённый между (* OASIS_XXX *), не имеет сайд-эффектов.  беру эту секцию, дописываю туда изнасилование определённого значения, которое строится внутри секции, и read_process_lines "ocaml fckd_setup.ml".
[12:10:34] <f[x]> а, так этот способ наверное и апстримнуть можно
[12:10:39] <f[x]> выделить в функцию
[12:11:01] <gds> ээ.  в какой проект апстримнуть?  не вижу подходящего.
[12:15:59] Typhon вышел(а) из комнаты
[12:16:42] Typhon вошёл(а) в комнату
[12:17:48] Typhon вышел(а) из комнаты
[12:20:14] <f[x]> оазис?
[12:21:17] <gds> в пределах оазиса проще налепить бинарник, который будет парсить _oasis. (или добавить опцию в setup.ml).  это изнасилование -- хз нужно ли там.
[12:25:17] ludovik вошёл(а) в комнату
[13:14:40] Typhon вошёл(а) в комнату
[13:20:21] ludovik вышел(а) из комнаты
[13:25:51] gnusf вошёл(а) в комнату
[13:27:12] gnusf вышел(а) из комнаты
[13:29:02] klapaucius вышел(а) из комнаты
[13:54:02] klapaucius вошёл(а) в комнату
[14:24:23] <f[x]> $ OCAMLPATH=../site-lib ocamlfind query xxx
../site-lib/xxx
$ OCAMLPATH=../site-lib ocaml setup.ml -build
Finished, 0 targets (0 cached) in 00:00:00.
+ ocamlfind ocamldep ... -package xxx ...
ocamlfind: Package `xxx' not found
Command exited with code 2.
[14:24:40] <f[x]> а, понял, _build же
[14:25:32] <f[x]> надо резолвить в абсолютный путь просто
[14:31:52] dzhon вошёл(а) в комнату
[14:47:36] <f[x]> (* OASIS_STOP *)
#load "unix.cma";;
let () =
  Unix.putenv "CAML_LD_LIBRARY_PATH" (Filename.concat (Sys.getcwd ()) "../site-lib/stublibs/");
  Unix.putenv "OCAMLPATH" (Filename.concat (Sys.getcwd ()) "../site-lib/");
  Unix.putenv "OCAMLFIND_DESTDIR" (Filename.concat (Sys.getcwd ()) "../site-lib/");
  setup ();;
[14:48:49] <f[x]> осталось только ../site-lib пробрасывать через configure
[15:08:39] Sun][ вошёл(а) в комнату
[15:08:41] <gds> f[x]: а чо ты там такое делаешь?
[15:22:37] <f[x]> ну во-первых это просто наблюдение насколько просто оазису было бы поддерживать venv'ы
[15:22:58] <f[x]> нужно только удобно указывать site-lib на этапе configure
[15:30:34] <f[x]> мне же просто надо билдить проекты с либой из нескольких разных веток, поэтому удобней ставить локально
[15:39:52] dzhon вышел(а) из комнаты: Replaced by new connection
[15:39:53] dzhon вошёл(а) в комнату
[15:45:15] dzhon вышел(а) из комнаты
[15:52:52] komar вышел(а) из комнаты
[15:54:19] komar вошёл(а) в комнату
[16:26:17] <gds> f[x]: может мне проще будет зарелизить ребилдол, чтобы ты использовал даже если не пакеты и их ребилд (хотя удобно, проверил), то хотя бы "rebildol -venv path1 -venv path2 run make ..." или "rebildol -venvs path1,path2 run make ..."?
[16:41:12] <f[x]> билд должен запускаться по make
[16:41:25] <f[x]> на это завязан редактор, и не только у меня
[16:41:40] <f[x]> а настройки venv'ов могут идти в файлике отдельном
[16:41:45] <f[x]> могут?
[16:42:00] <gds> ну, запускай редактор в нужном окружении, будет билд по make.
[16:42:23] <gds> настройки можно сделать в файлике, только непонятно, как при билде по make их использовать, надо ведь как-то установить окружение.
[16:42:33] <f[x]> export
[16:42:42] <gds> где конкретно export?
[16:42:45] <f[x]> в Makefile
[16:43:00] <f[x]> плюс если завязаться на oasis - то можно в setup.ml что угодно творить
[16:43:25] <gds> в принципе, можно в ~/.profile прописать установку окружения, если захочется именно так.
[16:44:35] <gds> в Makefile -- хз, нужно ли -- считай, завязывать билд проекта на ребилдол -- криво.  А вот где-нибудь сделать опциональный Makefile_for_include и инклудить его при его существовании -- это вариант.  И этот файл можно генерить вполне.
[16:48:24] <f[x]> http://paste.in.ua/4501/
[16:49:58] <gds> ну и вот, проблема решена?
[16:50:10] <gds> (я вижу, тебе понравился трюк с oasis_end!)
[16:50:25] <f[x]> я его давно использую ;)
[16:50:29] <f[x]> вроде да
[16:50:53] <f[x]> просто логично - задача - откуда брать пакеты зависимостей - должна решаться системой сборки на этапе configure
[16:51:03] <f[x]> и куда ставить - тоже
[16:51:23] <f[x]> или нет
[16:51:25] <gds> не согласен.
[16:51:49] <gds> то есть, про этап -- возможно, но не проектом это должно решаться.
[16:52:13] <f[x]> да, решается пользователем на этапе configure
[16:52:30] <gds> вот, захотел я сделать виртуальные окружения для разных версий либ -- не либы должны решать, а я, куда их ставить, и какие из других окружений должны быть видимы для поиска пакетов и бинарников.
[16:52:44] <f[x]> ессно
[16:52:57] <f[x]> решается через указание в комстроке при сборке
[16:53:16] <f[x]> просто поддержка этой штуки в системе сборки которая распостраняется с проектом
[16:53:17] <gds> кстати, про бинарники, долепи ещё PATH навсяк, чтобы точно казусов не было.
[16:53:32] <f[x]> а я хз как с бинарниками делать правильно
[16:53:47] <gds> PATH="$prefix/bin:$PATH", чо
[16:53:52] <f[x]> причём можно договориться что этот параметр configure (сейчас называется target) также может браться из окружения
[16:54:19] <f[x]> тогда кто не хочет руками все вызовы configure править - ставит этот параметр в окружение
[16:54:37] <f[x]> короче по факту это часть rebildol или barbr'ы только в oasis'е
[16:54:41] <gds> про поддержку -- не знаю вот, где лучше поддерживать.  Мне кажется, что лучше централизованно, "ребилдолом", а не в каждом из пакетов, который должен знать эту фичу.
[16:55:16] <f[x]> это да
[16:55:32] <f[x]> особенно учитывая частоту релизов оазиса
[16:55:44] <gds> то есть, считаю, что достаточно, чтобы ocamlfind знал, откуда читать (OCAMLPATH), чтобы знал, куда ставить (OCAMLFIND_DESTDIR (?)), чтобы рантайм видел CLLP, чтобы бинарники были доступны (PATH).
[16:55:58] <f[x]> мне для локальных проектов - пофиг
[16:57:17] <gds> кстати, я чуть не отложил кирпичей с новым релизом оазиса.  Они там вынесли весь код в #use "чото-оазис-где-то-как-то", и думал, что придётся долбаться более плотно.  А всего лишь надо было открыть модуль-другой для видимости типов.
[16:58:29] <f[x]> вообще да - в оазисе эта штука не нужна
[16:58:29] <gds> а мне для локальных проектов не пофиг -- какие-то либы уже надо иметь в старой версии для старого софта, какие-то в новой версии.  вот и вылезают три окружения: одно с общими либами, одно со старыми версиями не-общих либ, одно с новыми версиями не-общих либ.
[16:59:02] <gds> точнее, 4 окружения, одно дефолтовое с общими либами.
[17:09:24] <f[x]> ок, хочу посмотреть rebildol
[17:15:44] <f[x]> меня только смущает эта часть которая ребилдит все зависимости
[17:16:03] <f[x]> зависимости указываются явно руками в файлике - с прилагающимися патчами?
[17:20:27] <gds> f[x]: могу выложить сейчас, но документация по "конфигурации пакетов" только в .ml-файле, предоставляющем "апи".  думал вечером взяться за нормальную доку, ибо пока срочная работа.  выкладывать без доки?
[17:20:43] <f[x]> давай без доки
[17:24:31] <gds> f[x]: ребилдит оно не все зависимости, а только указанные, типа somedir/*.ml, при этом удаляет первое из указанных окружений, создаёт его и ставит их туда с учётом зависимостей.  при этом фейлится, если ни в описаниях пакетов, ни в текущем ocamlfind нет каких-то нужных пакетов.
(были геморы сделать культурно, но это будет потом; алгоритм понятен, но мутен.)
На каждый пакет (не в смысле ocamlfind, а в смысле targz/tarbz/repo -- то, что ставится за раз) идёт отдельный .ml-файл, где прописываются provides, requires, install, source (ещё uninstall и is_installed, но это для более умной логики).
В общем, выложу сейчас.
[17:31:33] <f[x]> интересно, будет ли для камля всё-таки хоть когда-то нормальный пм
[17:33:38] <gds> нормальный -- какой?
[17:34:00] <gds> f[x]: https://bitbucket.org/gds/rebildol
[17:34:41] Kakadu вышел(а) из комнаты
[17:35:02] <gds> если будешь описывать пакеты как-то, документация пока что только в src/pre_template.ml
[17:35:54] <gds> и учти, что я это писал под веществами.  пусть это были и лекарства, но воздействие на моск было ощутимым.
[17:36:13] <f[x]> gds: какой - это надо сформулировать ещё
[17:37:08] <gds> f[x]: факт.  Но вот культурную работу с install/uninstall я точно добавлю.  А там и до пм недалеко.
[17:39:57] <f[x]> а нормальный парсер влом было делать?
[17:41:35] <f[x]> омфг, оно не в ревизед
[17:41:41] <gds> парсер можно было бы, да вот хотел быстро и гибко.  Вот, сейчас оно так.  Надеюсь, спорить не будешь насчёт гибкости.
[17:42:11] <gds> не, многое там в revised!  а вот то, что используется в том числе в сгенерированных программах, да, в original.
[17:42:33] <gds> тебе ещё понравятся src/stringify.*, рвотные позывы обеспечены.
[17:42:49] <f[x]> я уже
[17:42:53] <gds> да чо я мелочусь.  Там от всего можно хорошенько сблевать!
[17:45:11] <gds> а как я мило дважды применяю stringify на один ml-код -- просто нямням.
[17:49:27] komar вышел(а) из комнаты: Replaced by new connection
[17:49:27] komar вошёл(а) в комнату
[17:54:29] <f[x]> все эти штуки которые скачивают должны скачивать в кэш и его юзать по возможности (с опциональной проверкой по хэшу)
[17:55:34] <f[x]> интересно как такие рецепты фэйлятся при ошибках в коде
[17:55:49] <f[x]> хотя номера строк можно подкрутить прагмами
[17:55:58] <f[x]> но типы всё равно не посмотришь..
[17:59:05] <gds> f[x]: line-директивы я вывожу чотко, иначе сам бы задолбался отлаживать компилируемость.  Типы, соответственно, фейлятся тоже нормально, так как ограничиваются сигнатурой.
[18:00:44] <gds> f[x]: про кеш -- почти согласен.  Только беда в том, что в случае, когда скачивание идёт из репки, не очень-то проверишь, скачал или нет.  Разве что можно делать, для меркуриала, hg ident remoterepo и сравнивать с локальной копией, и в случае чего делать hg pull && hg update.  А вот как в случае удалённого .tar.gz проверять по хешу -- это расскажи.
[18:01:58] <f[x]> репки не проверять и не кэшировать - мороки много
[18:02:08] <f[x]> хэш имеется ввиду в рецепте
[18:02:18] <f[x]> скачал - сверил что хэш совпадает
[18:03:16] <gds> ну, в случаях удалённых .tar.gz это нормально, для того, чтобы удостовериться, что скачали не битое.  А остальное?
[18:04:15] <f[x]> остальное не надо
[18:04:36] <f[x]> это покрывает большинство случаев
[18:04:36] <gds> а, так это мелочи.  Точно есть смысл запилить?
[18:04:49] <f[x]> просто мысли вслух
[18:05:18] <f[x]> а общий кэш - да
[18:05:36] <gds> про общий кеш -- давай подробности, как это должно быть, по-твоему.
[18:07:36] <f[x]> ~/.cache/rebildol/file-x.y.z.tar.gz
[18:07:49] <f[x]> перед скачиванием проверяется что файл есть
[18:08:01] <f[x]> всё скачивается тоже туда же
[18:08:22] <f[x]> убедиться что половинчатые файлы не пишутся
[18:09:30] <f[x]> ну и всё
[18:10:01] <f[x]> просто чтобы не зависеть от сети когда это не нужно
[18:10:20] <f[x]> use case - в самолёте
[18:13:42] <gds> логично, запилю.  Будет опциональный аргумент ?md5:
let source = Source.remote_tar_gz
  ~md5:"123918....c0c0c0" "http://../somefile.tar.gz"
[18:14:08] <gds> кеш приобретает смысл только при наличии проверки скачанных тарболов по хешу.
[18:14:23] <gds> потому-то я и не додумался до этой двухходовки изначально.
[18:14:42] <f[x]> почему-то этого нет ни в одном пм-е
[18:14:56] <f[x]> а у меня уже пару раз было что не мог скачать нужный тарбол
[18:15:18] <f[x]> мегаидея - запилить миррор всех тарболов камлевых пакетов
[18:15:55] <gds> про "нужный тарбол" -- ога.
прикольная идея, однако.  а там можно и обеспечивать "билдимость" потихоньку, по нужде.
[18:15:58] <f[x]> точнее две идеи - каталог ссылок на все тарболы и все тарболы тоже
[18:16:58] <gds> только вот меня волнует вопрос версий и перверсий -- какое-то говно сраное сейчас идёт.  oasis, findlib, ocaml <4 || >=4, lwt -- какие-то сраные ограничения на тему "я хочу вот эту версию, а не вот эту".
[18:17:36] <f[x]> кстати, ermine, а есть ли rsync-доступ к логам? чтобы бэкап сделать?
[18:18:02] <f[x]> gds: ?
[18:18:33] <gds> f[x]: !111
пытался собирать окружение под камлом4, фейлы кругом.
[18:19:28] <gds> про миррор тарболов -- можно описывать те же let source = ..., мне не западло будет добавить отдельную опцию типа "взять все пакеты, скачать их и поместить в определённую диру".  заодно польза в том, что эти .ml-описания можно будет доработать потом на предмет установки.
[18:19:46] <f[x]> не, там всё сложнее
[18:19:55] <f[x]> я ж не хочу руками этот список мейнтейнить
[18:20:05] <f[x]> надо будет скрейпить всё что можно
[18:20:19] <f[x]> forge, oasis-db, hump
[18:20:22] <f[x]> godi
[18:21:53] <gds> а, если так ставить вопрос, то да.
[18:23:47] <ermine> f[x]: чочо?
[18:24:14] <f[x]> логи чата говорю откуда rsync'ать
[18:24:20] <f[x]> историческая ценность же
[18:24:38] <f[x]> бсд вдруг сожрёт логи - что тогда?
[18:24:47] <ermine> доступа снаружи внутрь нету
[18:25:13] <f[x]> ну значит буду wget'ом mirror'ить - сами виноваты
[18:25:15] <ermine> а наружу могу
[18:25:30] <f[x]> т.е. пушить в меня?
[18:25:42] <ermine> ну да
[18:25:54] <f[x]> это как-то не круто
[18:26:27] <ermine> ну дырочку лучше у тебя сверлить чем у меня :P
[18:26:58] Kakadu вошёл(а) в комнату
[18:27:01] <ermine> плюс можно не только камловую конфу, а вообще все, это несколько гигабайт наверное будет каждый день
[18:27:35] <ermine> хотя не, rsync все же качает только свежак
[18:28:24] <ermine> f[x]: а чего ты вдруг забеспокоился об логах конфы?
[18:29:26] <f[x]> та что-то слишком много вокруг меня дисков сыпется
[18:29:51] <f[x]> ermine: дырочка на запись и на чтение это две разные дырочки!
[18:30:53] <ermine> f[x]: один фиг - ДЫРОЧКА!
[18:31:40] <ermine> а диски и у нас пару раз сыпались
[18:32:50] <f[x]> а, у меня же уже есть анонимно на запись
[18:34:03] <ermine> свап который?
[19:11:03] <f[x]> итого: http://camlunity.ru/chatlogs/
[19:22:13] Sun][ вышел(а) из комнаты
[19:45:58] Typhon вышел(а) из комнаты
[20:39:46] ftrvxmtrx вышел(а) из комнаты
[20:40:54] gnusf вошёл(а) в комнату
[20:41:04] gnusf вышел(а) из комнаты
[20:55:03] bobry вошёл(а) в комнату
[21:22:49] ftrvxmtrx вошёл(а) в комнату
[21:24:28] komar вышел(а) из комнаты: Replaced by new connection
[21:24:28] komar вошёл(а) в комнату
[21:25:37] <bobry> очень мило, коллега х-лист ушел в отпуск, закоммитив кучу кода и даже ни разу не запустив его
[21:25:41] <bobry> "компилируется значит работает"
[21:25:44] <bobry> правда пасаны?
[21:30:38] <gds> правда!
[21:31:11] <bobry> так то
[22:00:17] ludovik вошёл(а) в комнату
[22:02:13] <ermine> а писал ли он код?
[22:02:55] <ermine> есть разные источники возникновения файлов с кодом
[22:05:31] <bobry> писал писал
[22:05:35] <bobry> там половина кода переписана
[22:05:43] <bobry> на х-левский орм
[22:07:52] f[x] вошёл(а) в комнату
[23:07:15] ludovik вышел(а) из комнаты
[23:32:14] Sun][ вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!