Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 29 марта 2010< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | voice по запросу | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:13:32] <olegfink> gds, http://ullasinnerplace.punt.nl/upload/onzin/TgsSexyCamel1216.jpg (первый хит в гугле по "camel human face", между прочим)
[00:13:49] <olegfink> хорошо пойдет для статьи про ocaml c bindings
[00:15:11] Kakadu вышел(а) из комнаты
[00:15:31] Kakadu вошёл(а) в комнату
[00:16:16] <Kakadu> а есть какие-нить библиотеки для работы с графами (что из математики)
[00:16:23] <Kakadu> кто нить сталкивался?
[00:18:09] <olegfink> ocamlgraph? (лично не сталкивался)
[00:18:29] <Kakadu> по-моему это несколько другое
[00:18:43] <Kakadu> я с ним умею графы визуализировать и рисовать
[00:21:32] <Kakadu> э нет, это то что надо)
[00:33:36] Kakadu вышел(а) из комнаты
[00:34:22] serp256 вошёл(а) в комнату
[01:17:58] serp256 вышел(а) из комнаты
[01:32:17] ermine вышел(а) из комнаты
[01:38:32] Typhon вышел(а) из комнаты
[02:26:24] ygrek вышел(а) из комнаты
[07:24:27] sceptic вошёл(а) в комнату
[08:17:31] gds вышел(а) из комнаты
[08:27:44] iNode вошёл(а) в комнату
[08:59:49] gds вошёл(а) в комнату
[09:19:56] ermine вошёл(а) в комнату
[09:39:22] gds вышел(а) из комнаты
[09:39:35] gds вошёл(а) в комнату
[10:10:02] Mon вошёл(а) в комнату
[10:21:08] serp256 вошёл(а) в комнату
[10:32:45] f[x] вошёл(а) в комнату
[11:26:04] valexey_ вошёл(а) в комнату
[11:39:16] inspektordufi вошёл(а) в комнату
[11:39:20] inspektordufi вышел(а) из комнаты: QIP Infium: Спокойное общение
[12:56:03] valexey_ вышел(а) из комнаты
[13:21:02] Kakadu вошёл(а) в комнату
[13:26:28] valexey_ вошёл(а) в комнату
[13:53:53] Mon вышел(а) из комнаты
[13:56:57] Mon вошёл(а) в комнату
[14:44:18] <gds> интересно, есть ли что-нибудь подобное http://php-mysql-video.ru/ , только для ocsigen?  Надо сделать!  Можно кучу денег заработать!11111222
[15:04:44] <f[x]> ааа, мой моск
[15:09:40] <gds> Так!
[15:26:49] <valexey_> >> Вышел Ocsigen 1.0
> закапывайте его обратно
(c) LOR
[16:05:45] n99nyqqp вошёл(а) в комнату
[16:05:46] n99nyqqp вышел(а) из комнаты
[16:55:16] Typhon вошёл(а) в комнату
[16:55:21] <olegfink> сравнение html с php+sql само по себе прекрасно
[16:58:11] <gds> да вообще, спасибо евгению попову за сегодняшнее настроение, ржу аки лошадь.
[16:59:09] <valexey_> а что же, камло единственное функциональное нечто имеющее императивные алгоритмы со сколь-нибудь приличной скоростью?
[17:02:13] <olegfink> valexey_, могу предложить J ;-)
[17:02:44] <valexey_> а у J есть свободная реализация? И, оно, кстати, компилируемое, или таки интерпретируемое?
[17:04:12] <f[x]> как же я раньше ban_topology не видел..
[17:04:36] <f[x]> сегодня какой-то день "стоп работа" что-ли?
[17:04:51] <olegfink> интерпретируемое
[17:05:02] <Kakadu> а как такой вывод про стопработы получился?
[17:05:10] <Kakadu> мне вообще не работается\
[17:05:30] <valexey_> olegfink: ну, оно же в результате по скорости всё равно С++ сольет. и даже жабе сольет :-)
[17:06:13] <olegfink> необязательно
[17:06:36] <olegfink> вот пример из господина попова: при всей критике php никто обычно не говорит, что он сильно медленный, верно?
[17:06:49] <olegfink> хотя и интерпретируемый
[17:06:50] <sceptic> olegfink: потому что он довольно шустрый
[17:06:55] <Typhon> так у них вся стдлиб на си написана
[17:06:59] <olegfink> да
[17:07:05] <olegfink> у J то же самое
[17:07:15] <valexey_> потому, что на нем никто хитрые алгоритмы не пишети.
[17:07:17] <olegfink> только вместо стдлибы -- функциональные примитивы
[17:07:18] <sceptic> да и не нужна ему большая производительность, он ведь проблемно ориентированный
[17:07:19] <valexey_> *не пишет
[17:07:31] <valexey_> например на php никто не пишет перекодирование медиапотоков.
[17:08:12] <olegfink> J тоже проблемно-ориентированный, он для написания icfpc и project euler
[17:09:50] <olegfink> в общем, численные алгоритмы на J (при правильном написании, как и в случае php) примерно с той же скоростью работают, что и код на си (что и неудивительно)
[17:09:56] <valexey_> т.е. медиапотоки им лучше не конвертировать :-)
[17:10:22] <f[x]> Kakadu: мне теперь тоже
[17:10:23] <olegfink> ну не знаю, вообще может медиапотоки как раз и надо им
[17:10:46] <olegfink> там основная проблема -- что обязательно все надо измерять
[17:11:11] <valexey_> в смысле?
[17:11:23] <olegfink> т.к. все оптимизированные места нигде не описаны, то может повезти, а может не повезти
[17:11:26] <valexey_> в случае медиапотоков хорошо бы иметь мутабельные переменные.
[17:11:31] <valexey_> чтобы память туда-сюда не гонять.
[17:11:49] <olegfink> ну оптимизации в J, о которых я, примерно по смыслу соответствуют хаскельным fusions
[17:12:20] <olegfink> для чего-то в ghc написано, как фьюзить, и оно будет быстро работать, а для чего-то нет, и будет тормозить
[17:12:47] <olegfink> ну mutables в J точно есть
[17:14:18] <valexey_> ну, в общем ничего компилируемого окрома окамла вроде как нету для подобных задач.
[17:15:12] <olegfink> фортран? ;-)
[17:15:25] <valexey_> а когда он стал ФЯ? :-)
[17:15:52] <olegfink> ну там вроде что-то из алгольного call by name есть?
[17:16:22] <valexey_> не помню такого.
[17:19:58] <olegfink> наверное, если тебе надо писать много критичной по скорости императивщины, лучше делать это в императивном языке
[17:20:57] <ermine> а как можно найти value с заданным указателем?
[17:28:39] <valexey_> olegfink: не то чтобы много, но отдельные части критичные ко скорости. ну, классика же жанра: sip + sdp + rtp + медия что в нем содержится. нужно соответственно: парсить sip+sdp, нужно реализовывать логику sip-клиента и сервера, нужно генерить sip/sdp, нужно принимать rtp поток, перекодировать и извергать из себя в нужном формате.
[17:30:45] <f[x]> ermine: для того чтобы что-то найти, надо это что-то куда-то сохранить загодя :)
[17:31:33] gds вышел(а) из комнаты
[17:33:22] <olegfink> ну, J достаточно просто интерфейсится с си ;-)
[17:33:28] <olegfink> а вообще я тут J не рекламирую, вовсе нет.
[17:35:19] <valexey_> olegfink: ой, а кто сложно интерфейсится с Си?
[17:35:26] <valexey_> Оно и как императивщина никакой критики не выдерживает :-)
[17:35:32] <ermine> f[x]: вот есть два решения - хранить на стороне камля и на стороне цэ и возвращать вместо реального вызова сишней функции, которая возвращает уже имеющийся у тебя указатель
[17:35:45] <valexey_> Си не хочется совсем.
[17:36:03] <olegfink> valexey_, посмотри на параллельную дискуссию на этом канале ;-)
[17:37:23] sceptic вышел(а) из комнаты
[17:38:55] <f[x]> ermine: не понял
[17:40:24] <valexey_> olegfink: там какие-то буквы непонятные :-)
[17:40:41] <valexey_> проблема по заданному адресу выцепить значение что-ли?
[17:41:07] <ermine> f[x]: скажем, ты создаешь два указателя с помощью двух разных функций API, потом в третьей функции "аттачишь" один указатель к другому, далее четвертая функция позволяет тебе выдать приаттаченный указатель - это все на чистом С
[17:41:33] <ermine> f[x]: как в этом случае выглядит камлевый биндинг 1:1?
[17:41:54] <valexey_> что значит "аттачишь" указатели?
[17:42:21] <f[x]> ну у камлевого value хранятся список value соответствующих приаттаченным указателям
[17:42:46] <ermine> valexey_: скажем, первый указатель - указатель на envronment, второй указатель - на db
[17:43:06] <valexey_> и что же их связывает?
[17:43:06] <ermine> valexey_: и чтобы открыть db, надо в функции указать оба указателя
[17:43:31] <ermine> но в то же время environment - необязательный аргумент
[17:43:54] <ermine> это вопрос не реализации, а дизайна
[17:44:01] <valexey_> typedef struct {Db* p_db; Env* p_env;} attach; // ???
[17:44:17] <ermine> valexey_: ты не ответил на мой вопрос
[17:44:34] <valexey_> на какой?
[17:45:18] <ermine> на вопрос, как вернуть пользователю value с этим аттаченным указателем - где его хранить, на какой стороне хранить :)
[17:45:53] <ermine> тупое решение - это аллокатить всякий раз заново value для возврата этого указателя юзеру
[17:45:56] <valexey_> а как вернуть пользователю на Си value с этим аттаченным указателем?
[17:46:13] <valexey_> я пока саму механику не понимаю :-)
[17:46:42] <ermine> но тогда будешь иметь две разные переменные одного типа, указывающие на один и тот же объект
[17:47:10] <ermine> несравнимые с дефолтным custom_compare или custom_hash
[17:47:13] <valexey_> как это делается в Си?
[17:48:06] <ermine> ну тут отличие от цэ в том, что value оборачивает все в новую оболочку
[17:48:57] <ermine> отсюда был первый вопрос - как найти value с заданным указателем, ну это вопрос от лабуды
[17:49:05] valexey_ реквестует пример на Си, чтобы можно было подумать о том как это реализуемо в функциональщине.
[17:49:14] <valexey_> а словесные описания маздай :-)
[17:49:19] <valexey_> все четыре функции реквестую.
[17:49:54] <ermine> valexey_: сколько биндингов камло-цэ ты освоил?
[17:50:03] <valexey_> 0
[17:50:12] <valexey_> поэтому мне интересно
[17:50:20] <ermine> тогда наверное не знаешь, что такое value
[17:51:02] <ermine> а я про цэ вообще и не спрашивала
[17:51:05] <valexey_> небось нечто вроде ref'a
[17:51:17] <valexey_> причем вложенного.
[17:51:24] <ermine> потому что мне цэ в этом вопросе как раз неинтересен
[17:51:38] <valexey_> а мне интересен в плане понимания задачи.
[17:52:09] <ermine> ну прочитай главу 18 документации по камлу
[17:52:41] <ermine> а еще я вчера сюда кидала ссылку на ocaml internals
[17:59:01] <valexey_> ermine: мне было бы интересно на примере Сишном посмотреть что такое "приаттаченные указатели" :-)
[18:02:04] <ermine> valexey_: T1 *t1 = create_t1();
T2 *t2 = create_t2(t1);
T1 *t11 = get_t1(t2);
[18:02:48] <valexey_> ага. т.е. побочне эффекты в полный ростъ.
[18:03:02] <valexey_> и глобальные переменные.
[18:04:59] <ermine> где глобальные?
[18:06:04] <valexey_> где. как думаешь, хранится информации о связи t1 и t2?
[18:06:36] <ermine> а это меня не должно волновать
[18:06:47] <ermine> скорее всего в структуре T2
[18:08:18] <ermine> я вот хочу чтобы камлевый биндинг к get_t1 вернул в камло то что было выдано функцией create_t1
[18:08:50] <ermine> *выдано биндингом к create_t1
[18:09:19] <valexey_> с точностью до адреса размещения в ОЗУ, или же с точностью до семантики?
[18:11:31] <ermine> c точки зрения экономии места
[18:20:41] iNode вышел(а) из комнаты
[18:29:04] gds вошёл(а) в комнату
[18:54:29] <olegfink> ermine, а много у тебя T1 в программе?
[19:02:22] iNode вошёл(а) в комнату
[19:25:09] Typhon вышел(а) из комнаты: Replaced by new connection
[19:25:10] Typhon вошёл(а) в комнату
[19:37:34] serp256 вышел(а) из комнаты
[19:49:55] <ermine> olegfink: ну фактически оно - environment и казалось бы, что один раз создается в обычных условиях
[19:50:39] <ermine> он позволяет создать много T2 в одном environmente
[19:51:56] <olegfink> ну с окамлем я на си почти никогда не интерфейсился, а так в принципе, конечно, хранил бы аллокаченное в окамле забоксенное (value) у себя
[19:52:07] <olegfink> (т.е. видимо надо еще будет сказать gc, что оно нам дорого как память)
[19:52:30] <valexey_> память нынче дешева :-)
[19:52:37] <olegfink> в языке с refcounting это точно самое здравое (aka все так и делают)
[19:54:31] <olegfink> valexey_, так его примерно одна штука
[19:54:39] <ermine> хуже то, что я пока не видела как это сделано у соседей
[19:55:08] <ermine> но я лично видела не одну библиотеку, которые имеют функции, которые возвращают уже ранее созданный тобой указатель
[19:55:27] <ermine> поэтому вопрос чисто теологический
[19:58:37] <ermine> olegfink: память дешева, а вот gc-у бегать по minor heap - не особо дешево
[19:59:08] <valexey_> Ня. Народ в обсуждении радостно приравнял режим работы 24*7*365 к режиму работы -- "не 24 часа в сутки, но рабочие дни заполнены с утра до вечера"
[19:59:12] <ermine> а еще хочется на стороне Цэ сразу двинуть такое value в major heap
[20:05:27] <olegfink> ermine, судя по описанию, caml_register_generational_global_root делает что-то похожее на то, что ты хочешь?
[20:05:35] f[x] зануда: make it run, make it right, make it fast
[20:06:59] <ermine> ыгы
[20:07:55] <valexey_> ну, первое то просто. а вот со вторым обычно возникают проблемы, даже после того как как бэ достигли третьего :-)
[20:09:17] valexey_ вышел(а) из комнаты
[20:13:57] f[x] вышел(а) из комнаты
[20:15:50] <ermine> make it works - давно сделано, и оно просто аллокатит заново
[20:27:55] Kakadu вышел(а) из комнаты
[21:26:37] valexey вошёл(а) в комнату
[21:29:13] digital_curse вошёл(а) в комнату
[21:41:05] Kakadu вошёл(а) в комнату
[21:43:55] Typhon_ вошёл(а) в комнату
[22:26:11] <Kakadu> а очень сложно нафигачить свою обертку над Map.Make(мой_конкретный_тип)
[22:26:13] <Kakadu> ?
[22:26:49] <Kakadu> я вот не понимаю что надо возвращать в empty...
[22:27:07] <Kakadu> нада мануал хорший найти
[22:37:38] <Kakadu> Блин, вот как класс я понимаю как это описать, но как в модуле сделать дополнитьльные поля для хранения - пока не понятно
[22:53:37] <gds> зачем обёртку, какая конечная цель?
[22:57:40] <Kakadu> я хочу чтобы во время добаления в словарь у меня строился некоторый граф
[22:57:47] <Kakadu> математический граф
[22:58:04] <Kakadu> у меня просто ключом будет тип хороший
[22:58:29] <Kakadu> type term = Var of String | FuncSymbol of string * term list;;
[22:59:16] <Kakadu> у меня будет много подстановок "переменная в функц. символ"
[22:59:51] <Kakadu> Основная задача: выявить что переменная подставляется сама в себя
[23:00:16] <Kakadu> я придумал строить граф где вершинами будут мои переменные
[23:00:34] <Kakadu> а ребра я буду получать исходя их постановки
[23:01:04] <Kakadu> потом запущу в графе поиск на циклы простейший с помощью dfa и всё будет ОК
[23:08:02] serp256 вошёл(а) в комнату
[23:38:15] ygrek вошёл(а) в комнату
[23:51:34] <ygrek> > Re: [Caml-list] no_scan_tag and int array
> It's safe, and will be in the forseeable future.
> You should enter this as a feature wish in the BTS.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!