Home
OCaml (aka Objective Caml), а также прочие ML'и, F#, Coq, etc
ocaml@conference.jabber.ru
Четверг, 19 сентября 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 | F#, Coq - де-факто онтопик
Конфигурация комнаты
Участники комнаты

GMT+4
[00:02:50] komar вошёл(а) в комнату
[00:49:52] Kakadu вышел(а) из комнаты
[01:34:25] Zbroyar вошёл(а) в комнату
[02:10:01] komar вышел(а) из комнаты
[02:30:59] komar вошёл(а) в комнату
[02:53:31] <Zbroyar> gds: +
[02:53:40] <Zbroyar> оно вообще неясно зачем
[02:53:53] <Zbroyar> если обертки делаются не просто, а очень просто.
[02:54:05] <gds> ты про какие обёртки?
[02:54:41] <Zbroyar> которыми сишечка в камл поднимается
[02:56:08] <gds> так мне не собственно си надо, а си-подобные структуры, с которыми из окамла работать хочу.  Писать их в файл, читать из файла.
[02:59:37] <gds> даже если я напишу зачем-то обёртки, все три пункта не решаются автоматически.  Кроме того, например, моя структурка имеет 20 полей на данный момент.  Руками не хочу лепить это дело.  (хотя бы потому, что есть ещё несколько структур, хоть и поскромнее, полей по 5.)
[03:00:25] <Zbroyar> А, я тогда тебя неправильно понял.
[03:00:52] <Zbroyar> А зачем именно с-подобные структуры?
[03:07:07] <gds> чтобы писать-читать в файл, чтобы они занимали предсказуемое и фиксированное место, но не больше требуемого, чтобы можно было потом кое-какие куски проекта втупую перенести на си (в данном проекте смысл есть), чтобы можно было глазами ("od -t x1") посмотреть, что и как лежит, для отладки.
[03:10:21] <Zbroyar> Хм, а вариант кодогенерации а-ля atdgen ты не рассматривал?
[03:12:31] <Zbroyar> … если ты уже хочеш работать с предсказуемыми структурами,
[03:12:56] <Zbroyar> то почему-бы не генерить сишный код сразу с обертками
[03:13:31] <Zbroyar> А в камле уже только интерфейс к соответствующим модулям юзать
[03:28:25] <gds> ну вот, что-то типа atdgen и думаю, только тупое, для простых структур.
а зачем генерить сишный код и обёртки, если можно прямо из окамла работать?
тем более, что в 4.01 появились примитивы для доступа к кускам bigarray как к соответствующим int{8,16,32,64} (если не ошибаюсь про разрядности), и оно будет всяко быстрее, чем вызов сишной функции типа get_some_field.
[04:06:17] <Zbroyar> Для того, чтобы на уровне камла работать с нормальными структурами.
[04:06:22] <Zbroyar> И сериализовать их пакетом
[04:06:27] <Zbroyar> Не по одному полю
[04:07:25] <Zbroyar> То-есть обертка могла-бы транслировать сишные структуры в соответствующие камловые и назад.
[04:08:01] <Zbroyar> Понятно, что по одному полю - заколебаться можно :-)
[04:20:04] <gds> дело в том, что я не хочу десериализовывать всю структуру, чтобы "как с нормальной" работать -- она в основном из int64 состоит, будет много выделений памяти, тогда как часты случаи, когда нужно всего 2..3 поля.
поэтому мой выбор -- bigarray из 8-битных целых, содержащий все нужные поля, и {get,set}_<field>.  Чтение/запись bigarray из/в файл[а] -- дёшево.
[05:00:43] ocaml вошёл(а) в комнату
[05:31:15] ocaml вышел(а) из комнаты
[06:49:29] f[x] вошёл(а) в комнату
[07:05:39] Zbroyar вышел(а) из комнаты
[07:06:05] Zbroyar вошёл(а) в комнату
[07:10:32] Zbroyar вышел(а) из комнаты
[07:10:53] Zbroyar вошёл(а) в комнату
[08:32:50] <gds> f[x]: http://paste.in.ua/8728/ -- признаём решение хоть кое-как работающим?
[08:46:07] <f[x]> почему кое-как?
[08:46:12] <f[x]> ведь делает то что ожидается?
[08:51:29] <gds> кое-как -- потому что я проверил только одну функцию на только одном примере.  Делает да, правильно.
[09:08:49] Zbroyar вышел(а) из комнаты
[09:09:04] Zbroyar вошёл(а) в комнату
[09:11:50] <f[x]> норм
[09:34:43] <gds> f[x]: отосрлал пуллреквест, йо.
[09:35:55] f[x] ушёл за смуси чтобы смазать пуллреквест
[09:37:15] <gds> хипстота-хипстота, перейди на педота!111
[09:39:32] <gds> и вот чо, changes.txt не менял.  Не знаю, как сформулировать эту поломку (убрал buffer) так, чтобы она казалась улучшением.
[09:40:27] <f[x]> ;)
[09:41:12] ocaml вошёл(а) в комнату
[09:48:42] f[x] вышел(а) из комнаты
[10:05:59] ocaml вошёл(а) в комнату
[10:05:59] ocaml вышел(а) из комнаты
[10:12:31] <gds> как бы культурно сказать камлобилду "если тебе надо b.ml, сначала скомпилируй a.byte из a.ml и a2.ml и ещё чего-то, затем запусти его, и всё, что он выдаст на stdout, и будет являться b.ml".
[10:12:56] <gds> (ну или не на stdout, можно передать аргумент с именем b.ml, не проблема.)
[10:20:43] <gds> и вот чо.  Если это случай типичный и описанный (в том числе "сначала скомпилировать a.byte"!), так и скажите, сам найду.
[10:29:47] ocaml вышел(а) из комнаты
[10:40:45] f[x] вошёл(а) в комнату
[10:41:49] <f[x]> угу, это обычное rule
[10:53:41] <gds> f[x]: то есть, что-то типа .. After_rules -> rule "myshit" ~prod:"b.ml" ~dep:"a.byte" begin fun env _build -> Cmd(S[A"./a.byte"; A"b.ml"]) end ?
[11:00:25] ADEpt . o O (скоро, скоро будет нормальный публичный релиз jenga и можно будет совращать людей с проторенной дорожки)
[11:01:20] <gds> для меня камлобилд не является проторенной дорожкой, к счастью.
[11:12:19] f[x] вышел(а) из комнаты: Replaced by new connection
[11:12:20] f[x] вошёл(а) в комнату
[11:12:29] <f[x]> gds: да
[11:12:33] <f[x]> но я вот сейчас посмотрел - такие таргеты просто в Makefile пишу и всё
[11:25:28] ermine вошёл(а) в комнату
[11:27:41] ocaml вошёл(а) в комнату
[11:29:05] <gds> f[x]: а как ты их там пишешь?  Мне Makefile как-то ближе будет, тоже хочу.
[11:29:54] <f[x]> gen:
    ocamlbuild runner.byte
    CAML_LD_LIBRARY_PATH=_build:${CAML_LD_LIBRARY_PATH} _build/runner.byte -generate
[11:30:14] <f[x]> а
[11:30:20] <f[x]> только я ж не ml генерю :)
[11:30:26] <f[x]> хотя есть и ml
[11:30:40] <f[x]> вообщем точно так же
[11:30:43] <f[x]> дёргается руками
[11:30:52] <f[x]> если не хочется руками - то как rule - тоже норм вариант
[11:31:09] <gds> а камлобилд потом просекает, что .ml поменялся?  помню какую-то муть на эту тему.
[11:31:21] <gds> впрочем, забей, проверю сам.
[11:33:11] <f[x]> просекает конечно
[11:35:54] <gds> руками -- это ты про make gen?
[11:37:43] <f[x]> угу
[11:38:34] <gds> не, слишком пичалька, буду забывать.  Впрочем, в _oasis есть PreBuildCommand, она-то мне и нужна.
[11:38:45] <gds> (вспомнил, как я петуха этосамое.)
[11:39:39] <gds> про петуха поясню, а то меня могут неправильно понять.  В _oasis у меня было
PreBuildCommand: ./coq_support.sh extract
[11:43:37] Zbroyar вышел(а) из комнаты: Replaced by new connection
[11:43:41] Zbroyar вошёл(а) в комнату
[12:04:46] ocaml вышел(а) из комнаты
[12:04:49] ocaml вошёл(а) в комнату
[12:36:48] zinid вошёл(а) в комнату
[12:53:25] Kakadu вошёл(а) в комнату
[13:13:23] Kakadu вышел(а) из комнаты
[13:20:12] f[x] вышел(а) из комнаты
[13:22:02] Kakadu вошёл(а) в комнату
[13:35:47] ocaml вышел(а) из комнаты
[13:35:48] f[x] вошёл(а) в комнату
[13:35:49] ocaml вошёл(а) в комнату
[14:41:57] <ocaml> как думаете, окамль удобен для серверной стороны сайта?
[14:42:04] <ocaml> или из пушки по-воробьям?
[14:42:31] <komar> Удобен.
[14:42:49] <komar> Но если ты пилишь стордап, то возьми рельсы.
[14:44:57] <Zbroyar> nginx + fcgi из ocamlnet - очень даже ничего
[14:45:07] <Zbroyar> По поводу рельс - не знаю, не пробовал
[14:45:25] <Zbroyar> но связка выше - очень даже работоспособная.
[14:46:08] <komar> komar.bitcheese.net работает на оксигене, например.
[14:46:26] <Zbroyar> Правда, если хочется красоты, то фронт нужно писать отдельно на html5+js
[14:46:45] <komar> А окамл чем мешает?
[14:47:09] <ocaml> я просто вот думаю... а какие вообще варианты есть? Пхп, питон и рельсы?
В общем-то я и хотел заняться получше хтмл и джс
[14:47:24] <ocaml> окамль все-таки не так удобен в написании скриптов я думаю
[14:48:13] <komar> Окамль все-таки удобен в плане программирования.
[14:48:50] <f[x]> кто говорит про программирование?
[14:48:55] <komar> Но неудобен тем, что на нем придется писать либо как на PHP, либо на академическом фреймворке вроде оксигена, либо изобретать свое.
[14:49:17] <komar> f[x]: да, вот иногда пишешь стордап, и тут тебе попрограммировать приспичило.
[14:49:21] <komar> И хоть вешайся.
[14:49:43] <Zbroyar> Даже если подходить к сервер-сайду как к зоопарку скриптов, то единственное неудобство - компиляться нужно.
[14:50:00] <Zbroyar> komar: отлично!
[14:50:05] <komar> Вот только-только вчера взял окамл, скомпилировал в байткод, закинул в гит и на сервер, и теперь вызываю из рубей.
[14:50:31] <komar> Zbroyar: компиляция — это дар Божий, а не неудобство.
[14:50:56] <komar> Пока это рубишное говно тормозит и заново читает свои файлы — окамл бы уже сорок раз пересобраться вместе с компилятором успел.
[14:51:21] <Zbroyar> komar: мне этого объяснять не нужно, а вот тем кто с php пришел компиляция кажется лишним движением
[14:51:32] <komar> МАКЕ МАКЕ ЦОНФИГУРЕ
[14:51:41] <ADEpt> ocaml-plugin и можно всех обмануть :)
[14:52:04] <f[x]> нащ пхпшник постоянно жалуется что отлажиывается принтфом и нету дебуггера,в сишечке говорит проще было
[14:52:23] <komar> Бида.
[14:52:27] <Zbroyar> f[x]: как это дебугера нету? Врет гад
[14:52:35] <Zbroyar> ADEpt: а оно нагрузку тягне?
[14:52:38] <f[x]> мопед не мой
[14:52:39] <ocaml> то есть варианты написания сайтов на окамле это оксиген, и еще?
[14:53:06] <Zbroyar> fcgi из ocamlnet за nginx'ом
[14:53:21] <ADEpt> Zbroyar: а что тебя смущает? Как по мне, вопрос равносилен "а окамл нагрузку тянет?"
[14:53:25] <ocaml> короче fcgi?
[14:54:19] <Zbroyar> ocaml: короче - по-разному
[14:54:50] <Zbroyar> ADEpt: я вообще ничего не знаю про ocaml-plugin, поэтому меня может пугать байт-код
[14:54:54] <Zbroyar> :-)
[14:55:21] <Zbroyar> Жаль, что у верблюда jit'а нету
[14:55:30] <ADEpt> Zbroyar: а кто сказал про байт-код?
[14:56:03] <Zbroyar> ADEpt: … нууу, мой напуганный внутренний голос? ;-)
[14:56:45] <ADEpt> :)
[14:56:49] <Zbroyar> ADEpt: а дай ссылку на почитать
[14:57:08] <Zbroyar> А то гугєл на ocaml-plugin мне норовит про eclipse прочитать
[14:57:56] <Zbroyar> ocaml: у меня система арбитража трафа построена на связке, про которую я говорю
[14:58:22] <Zbroyar> одна машина на 8 камней тянет примерно 15М хитов в день
[14:59:22] <ocaml> Zbroyar ок, спасибо
[14:59:30] <Zbroyar> На этой-же машине крутится memcached
[15:00:38] <Zbroyar> Затыкаться сервак начинал на 50М
[15:05:04] <f[x]> как это jit нету? есть же, даже два, емнип
[15:05:46] <Zbroyar> f[x]: я человек скучный, использую только официальные релизы без патчей
[15:05:55] <f[x]> скукота
[15:06:28] <Zbroyar> ADEpt:  ты про это? https://github.com/janestreet/ocaml_plugin
[15:07:44] <ADEpt> Zbroyar: да
[15:09:18] <ADEpt> получается очень удобно. Весь "конфиг" написан на ocaml, при изменении пересобирается-перезагружается
[15:11:13] <Zbroyar> Йоу, круть: In native code: load the given OCaml plugin file (usually .cmxs), and link it with the running program.
[15:11:23] <Zbroyar> Щось я від життя відстав ;-)
[15:12:26] <komar> Хуита, память жрет.
[15:12:58] <Zbroyar> Вот так грязным сапогом по хрустальной мечте… Не стыдно?
[15:13:38] <ADEpt> komar: и что, сильно жрет?
[15:13:45] <f[x]> это потому что Комар загружает 100500 одинаковых cmxs'ов
[15:14:23] <f[x]> на каждый запрос
[15:14:29] <Zbroyar> :-)))))))))))))))))
[15:14:48] <komar> Zbroyar: ну да, ГОРЯЧЕЕ ПОДКЛЮЧЕНИЕ КОДА, все дела, можно пугать ерлангистов.
[15:16:58] <komar> ADEpt: оно выгружать не умеет вроде.
[15:17:12] <f[x]> горячий oom, только что из свопа
[15:20:44] <Zbroyar> ADEpt: мне ocaml_plugin для конфигурации не подойдет, она у меня уж очень здоровая :-)
[15:21:36] <Zbroyar> поэтому лежить на машине в read-only shmem
[15:22:09] <Zbroyar> А вот php-шникам нагрузку на сознание уменьшить - очень даже подойдет
[15:22:33] <ADEpt> komar: да, не умеет. Но можно туда не совать прямо весь код. Только функции, которые хочется иметь возможность менять "на ходу"
[15:23:04] <ADEpt> Zbroyar: это ж наверняка данные, а не код, так?
[15:24:10] <Zbroyar> Ну в общем - да.
[15:25:20] <Zbroyar> … хотя тут еще вопрос что считать данными ;-)
[15:25:49] <Zbroyar> У меня это - матрица переходов, в некотором смысле - описание конечного автомата
[15:28:31] <Zbroyar> Это вы там на ходу меняете способы заглядывания в будущее ;-)
[15:28:51] <ADEpt> ну вот, можно например ф-ию, реализующую шаг автомата вынести в загружаемый через ocaml-plugin .ml-файл
[15:29:07] <ADEpt> и при необходимости ее менять, добавлять туда отладку, ...
[15:29:16] <ADEpt> или что-то похожее
[15:31:09] <Zbroyar> Да, это вкусно.
[15:31:55] <Zbroyar> Правда, если кто-то мне попытается это сделать на боевом сервере...
[15:33:04] <ADEpt> а в чем проблема делать это на боевом сервере?
[15:33:55] <Zbroyar> 1. для отладки есть отладочные машины
[15:34:07] <komar> На кой черт все это надо, если можно плодить воркеров и заменять их?
[15:35:01] <Zbroyar> 2. На боевом единственное, что меняется - это матрица переходов, которая вообще-то считается/генериться на соседних серверах и на боевой заливается
[15:35:23] <ADEpt> ок. т.е. просто инструмент не для этой задачи
[15:35:50] <Zbroyar> 3. потому-что если кто-то где-то ошибется, то мне это будет очень дорого стоить :-)
[15:37:02] <Zbroyar> ADEpt: а вы сами на боевых машинах код меняете?
[15:37:12] <Zbroyar> на лету, имеется в виду
[15:37:37] <ADEpt> Zbroyar: с помощью этой штуки? да, она используется много где
[15:37:55] <Zbroyar> Хм… Круто.
[15:38:07] <Zbroyar> Но я наверное "че-то ссу"
[15:38:19] <ADEpt> если есть какие-то специфичные для задачи "правила поведения", которые надо уметь менять на лету, то они делаются через ocaml-plugin
[15:38:59] <ADEpt> Как по мне, больше гарантий, чем от конфиг-файла с конфицурацией, которая по сути DSL
[15:39:32] <Zbroyar> По сравнению с конфиг-файлом - плагин, безусловно, круче
[15:40:10] <ADEpt> если даже в нем накосячить, то максимум ты получишь ошибку компиляции в логе, бинарник скажет "продолжаю использовать старый cmx" и полет продолжается :)
[15:55:24] f[x] вышел(а) из комнаты
[16:27:48] ocaml вышел(а) из комнаты
[16:50:36] Kakadu вышел(а) из комнаты
[18:04:31] Kakadu вошёл(а) в комнату
[18:49:10] klapaucius вышел(а) из комнаты
[18:59:37] ocaml вошёл(а) в комнату
[19:21:27] ForNeVeR вышел(а) из комнаты
[19:59:44] komar вышел(а) из комнаты: Replaced by new connection
[19:59:44] komar вошёл(а) в комнату
[20:13:14] ocaml вошёл(а) в комнату
[20:13:15] ocaml вышел(а) из комнаты
[20:21:36] <gds> ну вот, полчаса работы -- и http://paste.in.ua/8730/ .  Всяко быстрее, чем разбираться с camlp4.  Но это ещё не всё, конечно.
[20:39:25] ocaml вышел(а) из комнаты
[20:39:45] zinid вышел(а) из комнаты
[21:00:06] Kakadu вышел(а) из комнаты
[21:56:52] ermine вышел(а) из комнаты
[21:56:53] ermine вошёл(а) в комнату
[22:37:39] <gds> почти конечный результат: https://gist.github.com/gdsfh/e695c4920efafecbdb57
[23:01:54] ftrvxmtrx вышел(а) из комнаты
[23:02:10] ftrvxmtrx вошёл(а) в комнату
[23:45:43] ermine вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!