Home
OCaml (aka Objective Caml), а также прочие ML'и, F#, Coq, etc
ocaml@conference.jabber.ru
Вторник, 26 ноября 2013< ^ >
f[x] установил(а) тему: OCaml / ОКэмл / Камль -- http://ocaml.org/ | Камло - http://camlunity.ru/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire | Мойте руки перед чатом | KEEP CAML AND CURRY ON | Coq далее доказывает в coq@c.j.r | F# - де-факто онтопик
Конфигурация комнаты
Участники комнаты

GMT+4
[00:06:41] Typhon вышел(а) из комнаты
[00:10:35] Typhon вошёл(а) в комнату
[00:28:08] Typhon вышел(а) из комнаты
[01:00:42] komar вышел(а) из комнаты: Logged out
[02:39:54] strobegen вышел(а) из комнаты
[02:43:44] tilarids вышел(а) из комнаты: Machine going to sleep
[02:48:03] tilarids вошёл(а) в комнату
[03:04:37] komar вошёл(а) в комнату
[04:59:14] tilarids вышел(а) из комнаты: Machine going to sleep
[05:14:49] tilarids вошёл(а) в комнату
[05:30:33] tilarids вышел(а) из комнаты
[05:30:54] tilarids вошёл(а) в комнату
[05:37:23] tilarids вышел(а) из комнаты: Machine going to sleep
[05:37:35] ForNeVeR вышел(а) из комнаты
[05:38:09] ForNeVeR вошёл(а) в комнату
[05:42:03] ForNeVeR вышел(а) из комнаты
[05:42:43] ForNeVeR вошёл(а) в комнату
[05:43:12] ForNeVeR вышел(а) из комнаты
[05:44:08] ForNeVeR вошёл(а) в комнату
[05:46:34] ForNeVeR вышел(а) из комнаты
[05:47:51] ForNeVeR вошёл(а) в комнату
[06:05:57] dlebedev вошёл(а) в комнату
[06:08:41] f[x] вошёл(а) в комнату
[06:26:07] strobegen вошёл(а) в комнату
[06:33:30] dlebedev вышел(а) из комнаты: Replaced by new connection
[06:33:31] dlebedev вошёл(а) в комнату
[06:34:45] mrm вошёл(а) в комнату
[06:41:36] <mrm> f[x]: А, на самом деле, зачем сейчас нужен Extlib? Ради меньшего размера бинарников в сравнении с батарейками (которые со второй версии значительно полегчали)?
[06:41:36] ADEpt вышел(а) из комнаты
[06:42:10] <mrm> Догадываюсь, что размер бинарников для ембеда имеет значение.
[06:43:42] <f[x]> этот вопрос вне моей компетенции :)
[06:44:00] <f[x]> я привык и использую
[06:44:26] <f[x]> ещё можно вот этих товарищей спросить -> http://opam.ocaml.org/pkg/extlib/1.6.0/ (список required by)
[06:45:33] <mrm> Я тоже когда-то использовал Extlib, но узнал про батарейки и легко перевёл на них свои проекты (в батарейках есть режим совместимости с Extilb).
[06:47:14] <f[x]> вообщем на этот вопрос есть простой объективный ответ - статистика на опаме говорит что extlib скачивают больше чем батарейки
[06:47:23] <mrm> Только вот с батарейками бинарники жирными стали получаться (особенно в первой версии, когда там Camomile в зависимостях был), поэтому я модуль Batteries не использую, а дёргаю реально используемые подмодули в свой стандартный Prelude.
[06:47:27] <f[x]> зачем, почему, правильно это или нет
[06:47:31] <f[x]> это вопрос следующий
[06:47:49] <f[x]> моя задача сделать extlib лучше, а использовать или нет это каждый для себя решает
[06:48:06] <mrm> Ясно :-)
[06:57:10] <mrm> Среди пакетов, использующих extlib, вижу популярные oasis и pgocaml, но они в самых последних версиях от extlib уже отказались. Видимо, из-за этих двух зависимостей (их старых версий) у extlib пока ещё много установок.
[06:58:06] <mrm> Хотя нет..
[06:58:17] <mrm> У этих старых версий установок за последний месяц практически не было.
[06:58:54] <mrm> Похоже, олдскульный народ в своих проектах использует extlib.
[07:08:34] <f[x]> угу
[07:08:40] <f[x]> у меня тоже такое впечатление
[08:12:54] mrm вышел(а) из комнаты
[09:25:56] mrm вошёл(а) в комнату
[09:43:42] mrm вышел(а) из комнаты
[09:47:38] tilarids вошёл(а) в комнату
[10:05:53] f[x] вышел(а) из комнаты
[10:40:04] mrm вошёл(а) в комнату
[10:44:44] mrm вышел(а) из комнаты
[10:59:22] f[x] вошёл(а) в комнату
[11:20:22] ermine вошёл(а) в комнату
[11:48:36] dlebedev вышел(а) из комнаты: Replaced by new connection
[11:48:37] dlebedev вошёл(а) в комнату
[12:17:42] tilarids вышел(а) из комнаты: Machine going to sleep
[12:18:07] f[x] вышел(а) из комнаты
[12:28:37] f[x] вошёл(а) в комнату
[12:38:29] Kakadu вошёл(а) в комнату
[12:40:06] Typhon вошёл(а) в комнату
[13:34:14] Ankoù вошёл(а) в комнату
[13:35:13] <Ankoù> буэнос тардес всем
[13:35:50] <Ankoù> подскажите мне, пожалуйста, по юниксовым тредам
[13:38:08] <Ankoù> let somefun () =
  let _somefun () =
    prerr_endline "Receiving 1";
    ... in
  prerr_endline "Receiving 0";
  Thread.create _somefun ()
;;
зову somefun (), на консоль выводится 0, но не выводится 1, и весь _somefun такое ощущение, что не исполняется
[13:38:44] <f[x]> во-первых _somefun -> somefun
[13:38:56] <f[x]> ну или любое другое имя
[13:39:03] <f[x]> у прочерка особый смысл
[13:40:09] <Ankoù> хм? кажется, в стандартных библиотек для внутренних функций так же делают, не?
[13:40:16] <f[x]> нет
[13:40:45] <Ankoù> окей, somefun' — ок?)
[13:41:03] <f[x]> угу Ж)
[13:41:12] <Ankoù> но кажется, что это не решает проблему)
[13:41:33] <f[x]> а топлевел как запускаешь?
[13:41:45] <f[x]> потому что в топлевеле байткод и у него свои приколы с потоками
[13:41:51] <f[x]> плюс в байткоде есть два вида потоков
[13:41:59] <f[x]> у меня вообщем всё работает как и должно
[13:43:57] <gds> f[x]: странно, что у тебя работает без Thread.join.
[13:44:51] <f[x]> gds: why so?
[13:44:59] <f[x]> Thread.join просто ждёт завершения
[13:45:15] <Ankoù> f[x]: собираюсь в общих чертах так:
ocamlopt -c  -verbose -g -I +threads -thread file.ml
g++ -o file -I $HOME/.opam/4.01.0dev+trunk/lib/ocaml -g -fPIC -L$HOME/.opam/4.01.0dev+trunk/lib/ocaml -L$HOME/.opam/4.01.0dev+trunk/lib/ocaml/threads file.o -lthreads -lasmrun -lunix -lm -ldl -lpthread
[13:45:34] <Ankoù> Thread.join не обязателен же)
[13:45:35] <f[x]> а, так это не топлевел
[13:45:40] <f[x]> тогда обязателен
[13:45:49] <Ankoù> э? Зачем?
[13:45:51] <f[x]> у тебя процесс выходит очевидно до того как тред запустится
[13:45:59] <Ankoù> нет, не выходит
[13:46:08] <Ankoù> процесс сидит крутит ивентлуп
[13:46:19] <f[x]> я автоматически на ;; подумал что топлевел
[13:46:21] <f[x]> хм
[13:46:26] <Ankoù> так что Thread.join там явно противопоказан)
[13:46:48] <gds> > why so?
BECAUSE!111  http://paste.in.ua/9060/
[13:47:20] <gds> Ankoù: а вот попробуй добавить flush stderr.
[13:47:31] <f[x]> gds: print_endline делает флаш
[13:48:08] <f[x]> а линковка где?
[13:49:47] <f[x]> хм, тогда ещё одно подозрение что шедулер не переключается на новый тред
[13:50:13] <Ankoù> как ему намекнуть?
[13:50:30] <gds> Thread.yield ()
[13:50:43] <gds> но, если в лупе есть выделение памяти, это не обязательно.
[13:50:59] <f[x]> не помогает :(
[13:51:26] <gds> а чочо?
[13:52:17] <f[x]> хм, а под strace работает
[13:52:18] <f[x]> красота
[13:53:25] <Ankoù> и правда
[13:53:27] <Ankoù> прикольно
[13:54:24] <f[x]> вообщем всё дело в шедулере
[13:54:39] <f[x]> почему yield не помогает вот непонятно
[13:55:39] <f[x]> Thread.delay 0.
[13:55:41] <f[x]> помогает
[13:56:00] <gds> а у меня -- нет.
[13:56:39] <gds> более того, delay 0.0000001 не помогает, delay 0.000001 помогает.
[13:56:42] <f[x]> короче камлевый шедулер потоков читит, а линуксовый - бяка, из-за этого бывают всякие фокусы
[13:56:52] <f[x]> gds: лайк!
[13:56:54] <Ankoù> и у меня не помогло
[13:57:16] <f[x]> и правда
[13:57:20] <gds> f[x]: лойс!  // шедулерам
[13:57:22] <f[x]> _иногда_ помогает
[13:57:52] <f[x]> на практике если прога что-то делает то такой проблемы нет
[13:58:07] <Ankoù> в рамках программы невиданной щедрости я ему даже 0.001 дал
[13:58:16] <f[x]> реальная проблема это когда один тред захватывает быстрым циклом без выделения памяти шедулер
[13:58:18] <Ankoù> 4 раза помогло, на пятый сломалось
[13:58:39] <f[x]> а ивентлуп чей?
[13:58:43] <Ankoù> кутишный
[13:58:54] <f[x]> он должен blocking_section делать и тред переключится
[13:59:03] <Ankoù> тихо-мирно себе крутит гуй
[13:59:04] <f[x]> биндинги kakadu?
[13:59:06] <Ankoù> ага
[13:59:17] <Ankoù> а тред с сетью работает
[14:01:06] <f[x]> ммм
[14:01:18] <f[x]> а ключевые слова как этот ивент луп зовётся скажешь?
[14:01:59] <f[x]> подозреваю что он лок не отпускает
[14:02:13] <f[x]> а если в гуе поклацать - всё равно не работает?
[14:03:35] <Ankoù> срабатывает, да
[14:04:25] <Ankoù> ключевое слово: http://qt-project.org/doc/qt-5.0/qtcore/qeventloop.html
[14:04:39] <Ankoù> он где-то внутри QApplication крутится
[14:05:36] <f[x]> а, ну вот
[14:05:58] <f[x]> если он внутри крутится то про камло он и не знает ничего и камлевый лок не отпускает
[14:06:13] <f[x]> и в lablqt слов blocking_section нет
[14:07:15] <Ankoù> Kakadu: ты кастуешься в тред
[14:08:40] <f[x]> хотя всё равно тупняк
[14:09:04] <f[x]> у меня как-то и выделения памяти ничего не переключают
[14:18:27] <Kakadu> я запутался
[14:18:41] <Kakadu> получается кутэшный евентлуп не дает камлёвому времени поработать?
[14:19:35] <f[x]> я ещё не распутался
[14:19:44] <f[x]> может ты и не виноват
[14:19:49] <f[x]> :)
[14:19:55] <Ankoù> Kakadu: насколько я понимаю, у тебя вообще переключение контекста между Qt и окамлом случается только когда дёргается какой-то окамловый коллбэк
[14:19:56] <f[x]> без qt тоже лажа
[14:21:00] <Kakadu> Ankoù: по идее если  ы камле что-то случится и поменяется какое-то свойство, то сигнал до Qt должен дойти
[14:21:27] <Ankoù> Kakadu: так а когда оно может поменяться?)
[14:21:37] <Ankoù> только внутри какого-то коллбэка
[14:22:22] <Ankoù> ты же как только говоришь QApplication.exec(), запускается кутишный ивентлуп, который отдаёт управление только при вызове каких-то коллбэков
[14:22:54] <Ankoù> и если событий, которые должны дёргать окамл, нет, то и окамловый код никакой работать не будет, соответственно и менять свойства некому
[14:33:34] <Kakadu> Там при соединении сигналов со слотами есть такая фигня: http://qt-project.org/doc/qt-5.0/qtcore/qt.html#ConnectionType-enum
[14:33:46] <Kakadu> может это может натолкнуть на какие-то мысле
[14:34:27] <f[x]> нет, это на другом уровне
[14:34:28] <Ankoù> Kakadu: не в этом смысл
[14:35:57] <Ankoù> как я понимаю, нужно где-то в районе processEvents дёргать окамл, чтобы его шедулер тоже отработал
[14:36:21] <Kakadu> Т.е. камлёвый код не работает как бы?
[14:36:28] <Ankoù> хотя каждый раз в processEvents переключать контекст, боюсь, будет медленно
[14:36:33] <f[x]> ивент луп нужно крутить внутри enter_blocking_section
[14:36:44] <f[x]> перед вызовом коллбэка делать leave_blocking_section
[14:36:48] <f[x]> стандартная схема
[14:38:54] <Ankoù> f[x]: там внутри отпускается родной лок для всех потоков, что ли?
[14:39:53] <f[x]> да
[14:40:22] <gds> http://tinyurl.com/o6abdd7
[14:40:31] <f[x]> внутри blocking_section нельзя трогать камлевый хип и рантайм обв
[14:40:47] <f[x]> gds: 1!11
[14:42:20] <Ankoù> gds: а этот Thread.join на всякий случай советует)
[14:42:38] <Ankoù> f[x]: кстати, в чём высший смысл начального подчёркивания?)
[14:43:01] <Kakadu> чтобы не ругался про неиспользуемый байндинг
[14:43:31] <Ankoù> в смысле?
[14:43:33] <Ankoù> кого к кому?
[14:44:15] <Kakadu> let байндинг
[14:44:23] <Kakadu> компилятор чтобы не ругался
[14:44:52] <Ankoù> а, окай
[15:02:00] dlebedev вышел(а) из комнаты
[15:11:52] <Kakadu> Вы что-нибудь осмыслили?
[15:28:08] f[x] вышел(а) из комнаты
[15:31:45] f[x] вошёл(а) в комнату
[16:01:14] f[x] вышел(а) из комнаты
[18:15:43] Ankoù вышел(а) из комнаты
[18:17:32] f[x] вошёл(а) в комнату
[20:02:13] irezvov вышел(а) из комнаты
[20:40:20] f[x] вышел(а) из комнаты
[20:46:46] Kakadu вышел(а) из комнаты
[21:47:24] Kakadu вошёл(а) в комнату
[21:47:58] Kakadu вышел(а) из комнаты
[22:16:37] tilarids вошёл(а) в комнату
[22:23:01] Typhon вышел(а) из комнаты
[22:35:20] ermine вышел(а) из комнаты
[22:54:13] komar вышел(а) из комнаты: Replaced by new connection
[22:54:14] komar вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!