Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 30 июня 2010< ^ >
ygrek установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | judge by commits, not comments | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:13:04] Abyx вышел(а) из комнаты
[01:06:49] Kakadu вышел(а) из комнаты
[01:18:18] ermine вышел(а) из комнаты
[02:07:42] cf-ins вышел(а) из комнаты
[02:36:53] komar вошёл(а) в комнату
[02:36:54] komar вышел(а) из комнаты
[02:57:19] Typhon вышел(а) из комнаты
[02:57:37] Typhon вошёл(а) в комнату
[04:01:18] Typhon вышел(а) из комнаты
[04:31:40] gds вышел(а) из комнаты
[07:27:54] iNode вышел(а) из комнаты
[08:17:16] iNode вошёл(а) в комнату
[08:48:37] gds вошёл(а) в комнату
[09:48:25] serp256 вошёл(а) в комнату
[10:04:32] Kakadu вошёл(а) в комнату
[10:05:35] Kakadu вышел(а) из комнаты
[10:18:40] vshender вошёл(а) в комнату
[10:51:24] ermine вошёл(а) в комнату
[10:55:25] vshender вышел(а) из комнаты
[10:58:45] vshender вошёл(а) в комнату
[11:06:54] Typhon вошёл(а) в комнату
[11:11:17] ʇsʎɯ вошёл(а) в комнату
[11:51:44] serp256 вышел(а) из комнаты
[13:29:22] <zert> здравствуйте, поцоны и девчонки
[13:29:28] <zert> кто что может сказать за mlton?
[13:29:40] zert пропонує хохлосрач
[13:29:44] valexey вошёл(а) в комнату
[13:32:11] <zert> как-то не очень :(
[13:32:53] <f[x]> языки бывают двух видов - которые все ругают и остальные (c) труп страуса емнип
[13:44:53] <f[x]> http://paste.org.ru/?6rb3qh
[13:45:09] f[x] внёс свою лепту в несостоявщийся холивор
[13:46:02] <gds> "закапывайте" (tm)
[13:47:42] <valexey> ack -- это хто? аккерман что-ли?
[13:47:43] <zert> не внушаить
[13:48:06] <f[x]> ack это идентификатор
[13:48:38] <valexey> функция на аккермана вроде похожа. внешне.
[13:49:14] <zert> да и тест синтетический
[13:49:32] <zert> надо написать два приложения с нетривиальной бизнес-логикой, после и сравнить
[13:49:48] <zert> учитывая трудности разработки, отладку и т.д.
[13:49:52] <zert> т.е. весь цикл
[13:50:03] <zert> а просто так гонять синтетику — не Ъ
[13:50:11] <valexey> только кому нужны два идентичных приложения с нетривиальной бизнеслогикой?
[13:50:35] <zert> ну веб-магазин, например
[13:51:02] <valexey> и бац. там зарулит всех ерланг. потому как окажется, что вычислений там мало. зато коннекшинов много.
[13:51:21] <zert> гггггг
[13:51:33] <zert> отож
[13:51:48] <zert> и придём к выводу, что ни камло, ни смл не нужны
[13:51:52] <valexey> и поддержка дешевле.
[13:51:57] <zert> да
[13:52:13] <zert> TCO демпінгує
[13:52:51] <zert> что бы написать такого, чтобы камло и смл были в тему?
[13:53:54] <valexey> перекодировку :-)
[13:54:04] <valexey> из g711 в g729 :-)
[13:54:08] <zert> блин :))))
[13:54:13] <zert> только об этом думал :)
[13:54:17] <f[x]> синтетика показывает регистрораспредялялку и рантайм представление значений
[13:54:33] <f[x]> и в самом деле - у mlton'а - не внушает
[13:54:38] <valexey> ибо в этом месте у ерланга всё плохо.
[13:56:58] <valexey> ну, а чтобы попроще, и спеки не курить, банальную конвертацию скажем из rgba в yuy2 или yuv420.
[13:57:16] <valexey> c масштабированием.
[13:57:21] <valexey> и кадрированием.
[13:57:46] <f[x]> ок, ты пишешь версию на mlton, потом я на камле
[13:58:08] <valexey> лучше наоборот.
[13:59:09] <zert> надо чтобы один человек писал и то, и другое
[13:59:20] <f[x]> ну значит valexey всё и пишет
[13:59:36] <zert> ок
[13:59:37] <f[x]> чтобы поддержать свои claim'ы про "более быстрый и компактный код"
[14:29:12] <vshender> SML может и неплох, но OCaml все же подальше ушел. То же можно сказать и об инструментарии, библиотеках. А что касается mlton, то это "whole program optimizing compiler": там нельзя выражения по мере написания посылать в repl, что для меня ставит на нем крест. Люблю интерактивную разработку.
[14:29:20] <vshender> И да, http://www.mpi-sws.org/~rossberg/sml-vs-ocaml.html
[14:29:30] <vshender> Если кому интересно
[14:29:42] <vshender> А вот сравнение: http://adam.chlipala.net/mlcomp/
[14:31:34] <Typhon> а было еще сравнение с картинками ^_^
[14:31:53] <vshender> а еще скоро выйдет ocaml 3.12 :)
[14:32:14] <zert> да ну
[14:32:22] <zert> он же умер
[14:32:53] <gds> бета уже вышла, но под мингвом не собирается.
[14:33:20] <vshender> И там наудивление прилично изменений в самый язык.
[14:33:26] <vshender> *в самом языке :)
[14:33:33] <gds> да, и хорошие изменения.
[14:34:35] <zert> а где про изменения в языке посмотреть?
[14:34:46] <zert> lists comprehensions будет?
[14:35:13] <gds> l.c. нет, нафиг они нужны :)
[14:35:21] <valexey> а что, у камла уже появилась спека на язык? ;-)
[14:35:29] <zert> gds: дооо
[14:35:38] <gds> да, спека есть, называется reference manual, урл дать?
[14:35:43] <zert> вот что мне не нравится, так это +., -. и т.д.
[14:35:55] <zert> спрашивается, накукуй?
[14:35:55] <valexey> референс мануал убогъ.
[14:36:04] <gds> теперь будет Float.(1.2 + 3.4)
[14:36:06] <valexey> zert: строгая типизация типо :-)
[14:36:24] <valexey> зато в sml можно просто +
[14:36:26] <valexey> :-)
[14:36:31] <vshender> Меня больше всего порадовали модули как первоклассные значения
[14:36:43] <vshender> Объекты теперь нужне еще реже :)
[14:37:08] <zert> хм..
[14:37:10] <vshender> *нужны
[14:37:28] <zert> gds: серьёзно?
[14:37:58] <gds> если модуль Float определит val ( + ) = ( +. ), то да.
[14:38:15] <zert> хех
[14:38:27] <vshender> Это они по мотивам pa_do сделали
[14:38:28] <gds> ну, точнее, Module.(expr) -- как бы равно (open Module; expr).
[14:38:50] <zert> а если несколько модулей?
[14:38:59] <zert> Module1.(Module2.(...))?
[14:39:54] <vshender> zert: если одинаковые операции, перекроются; иначе, почему бы и нет
[14:40:05] <vshender> Это вроде локальное открытие модуля, не более
[14:40:31] <zert> ну может что-то получше, чем это, есть
[14:40:47] <gds> особо лучше не придумать.
[14:41:08] <zert> (Module1,Module2).(expr)
[14:41:12] <zert> недолиспота
[14:43:13] <gds> вообще, по-моему, можно либо pa_do, либо http://gdsfh.dyndns.org/kamlo/InfixOperators использовать.  Мне хватает.  Те, кому не нравятся "+." -- синтаксис-задроты.
[14:43:39] <gds> ещё C vs Pascal поспорьте.
[14:46:59] komar вошёл(а) в комнату
[14:48:02] <valexey> они оба устарели и нинужны :-)
[14:48:18] <vshender> C нужен, это очевидно.
[14:48:26] <zert> сси ещё стопицот лет жить будет
[14:48:29] <vshender> И будет жить еще долго
[14:48:35] <gds> к сожалению, да.
[14:48:36] <valexey> а жаль.
[14:48:51] <valexey> жаль что не модула-2 наприамер.
[14:54:18] <gds> кстати, list comprehensions есть в виде кучи библиотек (например, всем известная llists, https://forge.ocamlcore.org/frs/?group_id=44 ).  Кроме того, есть к l.c. и другие претензии -- например, их пытаются использовать там, где LogicM должно быть использовано.
[14:56:43] <ʇsʎɯ> M-2? I lol'd
[15:09:02] <zert> в батарейках есть
[15:32:51] <gds> а подскажите, можно ли в юниксах передать сокет между процессами как-нибудь иначе, чем через fork()?
[15:36:11] serp256 вошёл(а) в комнату
[15:36:25] <f[x]> можно
[15:36:34] <gds> но как?!
[15:36:45] <gds> и кроссплатформенно ли между разными юниксами?
[15:39:32] <Typhon> f[x]: как?
[15:39:42] <f[x]> по unix сокету в oob-данных
[15:39:59] <f[x]> примеры гуглятся
[15:40:05] <f[x]> nginx так делает например
[15:40:10] <f[x]> достаточно переносимо
[15:41:08] <f[x]> даже либа есть - http://www.normalesup.org/~george/comp/libancillary/
[15:41:41] <f[x]> btw я уже говорил что нужен ExtUnix?
[15:42:03] <Typhon> нет, я не помню, скажи :)
[15:42:57] <f[x]> http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/2010/06/04.html#20:31:43.594120
[15:44:38] <Typhon> да, надо все-таки периодически просмотривать логи на предмет полезностей
[15:46:13] <f[x]> в core есть достаточно много но у них зависимостей много
[15:46:20] <f[x]> плюс контрибутить вряд-ли получится
[15:48:08] <f[x]> прикольно было бы наверное иметь два варианта - несуществующие функции либо кидают invalid_arg "not implemented" либо отсутствуют вообще (с каким-нибудь способом передать это знание препроцессору программы в compile-time)
[15:56:58] <gds> агааа, прочитал man 7 unix, SCM_RIGHTS и всё такое.  Прикольно.  И ещё один вопрос.
Если есть слушающий udp-сокет, его могут читать несколько процессов одновременно?  Если да, то по приходу датаграммы её получает один из процессов, читающих из сокета?
[16:00:48] <f[x]> да, но разбужены будут несколько (все), я так думаю
[16:02:48] <gds> понял.  а если сокеты будут неблокирующими, и процессы будут их проверять в стиле "авось что пришло", хоть кому-то датаграмма попадёт?  Понятно, что маловероятно, что кто-то ковырялся с этим, но а вдруг.  Ясное дело, как концепция нарисуется, буду тестить.
[16:07:31] <f[x]> ну да
[16:08:27] <f[x]> (конкретно с этим не ковырялся, но это совпадает с тем как оно себя ведёт в похожих случаях, например accept из многих процессов)
[16:09:04] <gds> понял.  благодарю за помощь.
а может ещё случайно знаешь, как венда ведёт себя в неблокирующих udp, размноженных через WSADuplicateHandle?
[16:09:27] <f[x]> без понятия
[16:09:36] <f[x]> а ты udp для message passing собрался использовать?
[16:10:02] <f[x]> кстати что такое неблокирующее udp?
[16:10:14] <f[x]> где оно там может заблокироваться?
[16:10:20] <gds> на recv().
[16:10:31] <f[x]> а, ну ок :)
[16:15:22] <gds> ага, для message passing.  Пока в основном дизайне туплю, прикидываю случаи, аналогичные тем, когда извлекают профит из work stealing.  Как раб освободился -- шлёт сообщение в стиле "я свободен, дайте мне работу, присоединяйтесь по tcp/ip на порт nnn".  Думаю, что если и делать такое, то потом, когда пойму, что расклад, когда диспетчер раздаёт работу, чем-то не устраивает.  Или может мне сейчас кто-нибудь умный объяснит, что один из раскладов (udp "я свободен" либо диспетчер "ну-ка на-ка задачу") явно лишний.
[16:18:01] <f[x]> почему udp а не tcp?
[16:18:13] <f[x]> или sctp? ;)
[16:21:13] <gds> предлагаешь, чтобы те, у кого есть работа, делал accept, а те, кто готов работать, делал connect?
А если есть сокет, но никто не делает accept -- что будет с connect() на этот порт?
[16:23:01] <gds> sctp -- почитал, клёво, но для локалхоста не нужно.  А вот если между хостами гонять, тогда да.
[16:23:21] <valexey> угу.
[16:23:28] <valexey> а на бзд его уже вкрутили?
[16:23:37] <valexey> в венде то понятно что нет и не предвидится.
[16:23:42] <valexey> искаропки.
[16:24:04] <gds> педивикия говорит, что sctp -- "FreeBSD  начиная с версии 7"
[16:29:48] komar вышел(а) из комнаты: Replaced by new connection
[16:29:50] komar вошёл(а) в комнату
[16:35:13] <f[x]> gds: воркеры всегда держат коннет с мастером, а там уже сообщения гоняешь как хочешь
[16:36:15] <f[x]> connect без listen это connrefused, а с listen - в backlog до следующего accept
[16:52:34] <gds> f[x]: да, сначала так и будет -- диспетчер и рабочие.
Чем схема с общим сокетом нравится -- 1. гоняется вдвое меньше данных (между рабами, а не через диспетчера), 2. диспетчер не создаёт bottleneck на передаче данных, 3. в случае, когда все загружены, нет нужды ни сериализовать, ни передавать данные куда-либо -- нужно исполнить задачу самостоятельно, 4. когда загружен диспетчер, он не передаст задания дальше, тогда как рабы вполне могут простаивать в это время.
Против п.1, по-хорошему, надо применить общую память, куда складывать сериализованные задания, и управлять этим руками, но это пока геморно.
Минусы сходу -- хуже контроль, труднее собирать статистику, разбиение по группам нужно выполнять так, чтобы одна группа вешалась на один порт.
[17:12:53] <vshender> f[x]: по поводу похожих случаев, на accept'е будет разбужен один
[17:12:57] <vshender> не несколько
[17:13:07] <f[x]> для начала бы определить базовый набор примитивов, а это уже детали реализации. или примитивы есть?
[17:13:13] <f[x]> все будут разбужены
[17:13:38] <vshender> Хм, "или что-то не так, или одно из двух"...
[17:13:44] <f[x]> хм :)
[17:14:24] <vshender> И во все процессы вернется новый сокет? Не находишь странным?
[17:15:32] <gds> кстати, пока чесал репу, придумал механизмы перехода рабов между ситуациями "диспетчер даёт задания всем присоединённым к нему рабам" и "свободный раб делает accept() на общем сокете".  то есть, имея одну конфигурацию, можно сделать так, чтобы через некоторое время стала другая (а то и какая-то их смесь).  Это меня радует тем, что не надо выбирать между ними, так как примитивы тут были бы очень разные.
[17:16:07] <valexey> рабовладелец!
[17:16:19] iNode вышел(а) из комнаты
[17:16:28] <gds> killall children!
[17:18:19] <f[x]> нет, в один вернётся, в остальные - EAGAIN
[17:19:29] <vshender> f[x], ну тогда может быть. Я prefork-сервер писал лишь раз на python, а там это скорее всего было скрыто. Буду знать.
[17:19:38] <gds> про самые базовые примитивы -- пока не знаю.  пока в голову не укладывается.  скоро уложу, постепенно.  в целом -- узлы, группы, сообщения, никаких closures на случай гетерогенной среды.
про уровень повыше -- пытался прикинуть в посте http://gds.livejournal.com/50978.html , но пока пришёл к выводу, что будут п.1 и п.5, скорее всего.
[17:19:43] serp256 вышел(а) из комнаты
[17:22:00] serp256 вошёл(а) в комнату
[17:26:29] <f[x]> vshender: http://paste.org.ru/?18pt4p , со 109-ой строки
[17:30:17] gds вышел(а) из комнаты
[17:41:48] <vshender> f[x]: я и так поверил :) EAGAIN -- разумно.
[18:51:20] valexey вышел(а) из комнаты
[18:59:00] gds вошёл(а) в комнату
[19:04:38] Typhon вышел(а) из комнаты
[19:08:40] ʇsʎɯ вышел(а) из комнаты
[19:32:11] gds вышел(а) из комнаты
[19:32:18] gds вошёл(а) в комнату
[19:53:53] serp256 вышел(а) из комнаты
[21:43:23] digital_curse вошёл(а) в комнату
[22:14:26] Kakadu вошёл(а) в комнату
[22:24:38] <zert> мдэ, весь день компилится mlton
[22:29:53] <komar> mlton'ом?
[22:32:09] <zert> ну да, а чем же?
[22:37:27] iNode вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!