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

GMT+3
[00:03:50] Typhon вошёл(а) в комнату
[00:23:03] ermine вышел(а) из комнаты
[00:33:15] gds вышел(а) из комнаты
[01:01:04] superbobry вышел(а) из комнаты
[01:03:42] superbobry вошёл(а) в комнату
[01:10:04] Kakadu вышел(а) из комнаты
[01:23:55] superbobry вышел(а) из комнаты
[01:24:03] bobry вошёл(а) в комнату
[01:24:42] bobry вышел(а) из комнаты
[01:25:10] superbobry вошёл(а) в комнату
[03:10:11] zert вышел(а) из комнаты
[04:45:15] komar вышел(а) из комнаты
[08:09:55] f[x] вышел(а) из комнаты
[09:26:17] f[x] вошёл(а) в комнату
[09:56:51] Typhon вышел(а) из комнаты: Replaced by new connection
[09:56:55] Typhon вошёл(а) в комнату
[09:57:02] Typhon вышел(а) из комнаты
[09:57:31] Typhon вошёл(а) в комнату
[10:15:28] ftrvxmtrx вышел(а) из комнаты
[10:52:14] ftrvxmtrx вошёл(а) в комнату
[11:01:04] ermine вошёл(а) в комнату
[11:08:27] gds вошёл(а) в комнату
[11:16:11] komar вошёл(а) в комнату
[11:18:49] arhibot вошёл(а) в комнату
[11:19:16] <f[x]> Kakadu: https://forge.ocamlcore.org/plugins/mediawiki/wiki/gsoc-team/index.php/GSoC2011/Applying#Ocsigen ?
[11:22:37] arhibot вышел(а) из комнаты
[11:57:25] Kakadu вошёл(а) в комнату
[11:58:33] Kakadu вышел(а) из комнаты
[12:04:36] <gds> # Sys.word_size;;
- : int = 64
во.  Впервые по-нормальному овлодел 64битной операционкой.  Какую бы гадость сделать?..
[12:10:20] <f[x]> первое что делают обладатели 64-бит это malloc(1024*1024*1024*1024) чтобы ощутить своё превосходство
[12:12:22] <f[x]> насчёт unixsupport - bigarray то зависит от unix
[12:13:32] <f[x]> вкомпиливать .o следует только в один .a
[12:14:40] <gds> # String.make (1024*1024*1024*1024) '\x00';;
Out of memory during evaluation.
бида-бида.
[12:14:53] <f[x]> дык, это ж не malloc
[12:15:03] <f[x]> Bigarray пробуй тогда
[12:15:22] <gds> то есть, логично было бы пофиксить camomile (в данном случае), чтобы линковалось ещё и libunix.a (или как там его)?
[12:16:35] <f[x]> да, потому что camomile хватает очевидно unix.cmi без линковки кода (т.к. map_file не используется и сишные примтивы из модуля Unix не нужны) поэтому авторы camomile "срезали угол"
[12:17:32] <f[x]> а у тебя теперь получается что любой код использующий file_descr требует сишных примитивов
[12:17:54] <f[x]> кстати, попробуй заменить _caml_win_struct_fd на функцию
[12:18:12] <gds> а чем лучше это будет?
[12:19:21] <gds> а хотя, там таки должна быть функция уже.  Проверю, добьюсь того, чтобы была функция.
[12:19:51] <f[x]> хотя да, не поможет наверное
[12:20:16] <gds> угу, не поможет, но там должна быть функция.
[12:21:15] <gds> но это позднее, а сейчас у меня запланированный секс с lwt и message passing.  Там тоже были вопросы, вчера задавал, но знатоки молчат, т.е. буду как-то сам пробовать.
[12:22:03] <f[x]> ага, т.е. оригинальный bigarray из unixsupport.h юзает только макросы, а ml часть юзает только тип Unix.file_descr
[12:22:15] <f[x]> поэтому достаточно unix.cmi при линковке
[12:23:02] <f[x]> для тебя получается недостаточно, т.к. доступ к file_descr на сишной стороне требует вспом. структуру из libunix.a/dllunix.a
[12:24:29] <f[x]> как вариант хака - вкомпилить в bigarray -cclib -lunix
[12:25:16] <gds> а там, где будет честно указаны и bigarray, и unix, будут опять две копии структур?
[12:26:29] <f[x]> не, линкер не будет два раза линковать один и тот же .o
[12:26:45] <f[x]> кстати в .h ты же его extern'ом должен был объявить
[12:28:59] <f[x]> тогда никаких траблов не было бы
[12:31:19] <gds> в .h всё объявлено как extern таки, но проблема была в том, что я явно линковал unixsupport.o в dllbigarray.dll.  А если не линковать, то camomile не хочет.  Таки попробую твой хак с -cclib -lunix обязательно, хотя бы чисто посмотреть, что будет.
[12:33:10] <f[x]> а, теперь всё понятно, сам себе отстрелил конечность %)
[12:34:08] <gds> с другой стороны, других вариантов тогда не видел (т.е. либо линковать, либо не линковать и иметь ошибку компиляции camomile).
[12:38:38] arhibot вошёл(а) в комнату
[13:15:11] Kakadu вошёл(а) в комнату
[13:17:49] <f[x]> Kakadu: https://forge.ocamlcore.org/plugins/mediawiki/wiki/gsoc-team/index.php/GSoC2011/Applying#Ocsigen ?
[13:18:18] <Kakadu> да, сейчас почитаю
[13:18:40] <Kakadu> уау
[13:19:00] <Kakadu> черт, почему у меня лето такое занятое
[13:19:07] <Kakadu> долбаная война
[13:35:29] superbobry вышел(а) из комнаты
[13:35:36] bobry вошёл(а) в комнату
[13:37:14] bobry вышел(а) из комнаты
[13:37:46] superbobry вошёл(а) в комнату
[13:59:50] <gds> лол, я изобрёл actors.
An actor is a computational entity that, in response to a message it receives, can concurrently:  send a finite number of messages to other actors; create a finite number of new actors; designate the behavior to be used for the next message it receives.
[14:08:02] Typhon вышел(а) из комнаты: Replaced by new connection
[14:08:10] Typhon вошёл(а) в комнату
[14:59:19] <Typhon> http://users.livejournal.com/_darkus_/560114.html   душкин хаскиль и окамл сравнивает -- в первой же окамловой функции Obj.magic использовал :-)
[14:59:54] zert вошёл(а) в комнату
[15:01:06] <Typhon> gds, somehow related: "Any sufficiently complicated concurrent program in another language contains an ad hoc informally-specified bug-ridden slow implementation of half of Erlang." Armstrong's corollary from Greenspun's Tenth Rule
[15:01:54] <komar> > так ещё и такую типовую идиому, как «список с головой и хвостом» пришлось определять самостоятельно
[15:01:57] <gds> да, про ырланк -- факт.
[15:02:22] <Typhon> komar, там вообще хохм достаточно
[15:02:33] <Typhon> не осилили перегрузку нормальную!
[15:06:29] <Typhon> а новая мода точно вырисовывается -- coq/agda :-) так что ждите постов на хабре про "бенчмарки" рейтрейсеров на coq, agda и javascript
[15:08:04] <f[x]> о, это лол
[15:10:10] <Typhon> можно взять посты/комменты двухлетней давности, заменить "haskell/scala" на "coq/agda" и получим свежие посты/комменты
[15:10:37] <gds> идея грамотная.
[15:11:04] <gds> а душкин, однако, мудачок.
[15:11:08] <ermine> ну и троллинг
[15:12:00] <komar> Одни мы тут сидим в белом пальто красивые.
[15:12:20] <superbobry> :)
[15:12:45] <superbobry> я кстати не понял претензию к отсутствию hd / tl у списокв
[15:12:50] <komar> Это потому что илитные академики сюда еще не добрались.
[15:12:52] <superbobry> вроде все на месте -- в чем проблема?
[15:12:52] <ermine> чего только люди не придумывают, лишь бы не писать на tcl
[15:13:01] ermine прячется быстро-быстро
[15:13:15] <Typhon> superbobry, там окамловый код вообще оч. эээ "странный" %)
[15:13:19] <komar> ermine: тебе ж далеко до академика вроде.
[15:13:26] <gds> superbobry: да просто дебилы писали первый кусок кода, вот и всё.  Либо им поставили требование сделать через жопу.
[15:13:45] <gds> я только первый кусок посмотрел, дальше не осиливал.
[15:13:48] <komar> Я бы так не сумел, кстати.
[15:14:00] <gds> а я так умею, но никому не расскажу.
[15:14:04] <f[x]> гг
[15:16:44] <Typhon> gds, чоткий коммент %)
[15:20:10] <gds> но срача не будет.  Но ничего страшного.
[15:20:36] <komar> Сейчас придет Зефиров и обзовет дураком.
[15:48:29] <Kakadu> этот душкин просто пипец. Думаю даже я так бы не написал.
[15:54:41] <ermine> не каждый напишет хоть одну статейку за всю свою (бесполезную?) жизнь
[15:54:51] <ermine> а душкин пописал много статей :)
[15:55:22] <Kakadu> ermine: я про его тип мутабельного списка
[15:55:32] superbobry вышел(а) из комнаты
[15:56:48] <ermine> Kakadu: ты еще не видел "список" параметров в ocsigen
[15:56:55] <ermine> хоть он и не мутабельный
[15:58:23] <Kakadu> ermine:  ~get_params:(int "i" ** (int "ii" ** string "s"))
??
[15:58:54] <ermine> ну да
[15:58:58] superbobry вошёл(а) в комнату
[15:59:38] arhibot вышел(а) из комнаты
[16:00:16] <Kakadu> Ну когда я это в первый раз увидел, то немного удивился синтаксису, но не слишком испугался.
[16:00:32] <Kakadu> а вот от термина косервис я напрягся
[16:01:50] <ermine> да косервисы нормально, у них просто путей нет, кроме них есть еще экшны
[16:02:17] <ermine> есть аттаченные и не аттаченные косервисы
[16:02:31] <ermine> неаттаченные рулят, с ними удобно работать :)
[16:04:07] <ermine> Kakadu: если тебе привычнее вызывать нужный код сайта по его пути на сайте - тебе дорога в пхп
[16:05:06] <Kakadu> ermine: я немного обиделся,но потерплю)
[16:06:17] <ermine> Kakadu: а на что именно обиделся? на прямую дорогу в пхп?
[16:06:22] <Kakadu> да
[16:06:38] <ermine> ну можно еще в джангу направить
[16:06:52] <Kakadu> а это что такое? джанга?
[16:07:12] <ermine> фреймворк на питоне
[16:11:37] <ermine> Kakadu: не слышал про django?
[16:11:53] <Kakadu> ermine: не-а
[16:13:12] <gds> http://users.livejournal.com/_darkus_/560114.html?thread=10864882#t10864882
[16:17:54] <zert> флюродрос
[16:18:18] <Kakadu> zert: а что это означает?
[16:19:54] <ermine> кста, сегодня заценила красоту:
module Map = Map.Make(String)
let (<<) m (n, v) = Map.add n v m
let data =
  Map.empty
  << (smthm "value1")
  << (name2, "value2")
[16:20:17] <ermine> а потом зарыдала, когда camlp4 сказало, что не понимает такой квотации
[16:21:31] <gds> ну так можно let ( <+ ) например сделать, заодно и по смыслу ок.
[16:22:11] <ermine> ну я замеила на ++
[16:22:33] <ermine> а вообще порадовало, что не надо применять fold
[16:29:45] <Kakadu> ermine: а почему код выше не работает?
[16:30:04] <Kakadu> вроде норм всё. Либо я опять не понял что-то
[16:31:22] <ermine> Kakadu: если для кода включен camlp4.syntax, то он воспринимает << как зарезервированный keyword
[16:31:54] <ermine> это quotation безымянный
[16:32:13] <Kakadu> а, я понял
[16:32:16] <f[x]> ещё годный трюк - let module Array - http://repo.or.cz/w/mldonkey.git/blob/HEAD:/src/networks/bittorrent/bT_DHT.ml#l93
[16:32:19] <ermine> именнованный идет с <:...<
[16:41:52] <gds> трюк хороший, ещё со String прокатывает хорошо.  Ну и всякие bigarray дают .{} или типа того.
[16:43:53] <zert> Kakadu: да он на х-е в продавшын ничего не писал
[17:21:16] <gds> про параллельный велосипед.  Рассмотрим ревизию https://bitbucket.org/gds/parvel/src/90c1ae2c8de8 .  Конкретнее, файл https://bitbucket.org/gds/parvel/src/90c1ae2c8de8/tests.ml .  При запуске он выдаёт "do_something: 0.50" и сразу "done", что говорит о том, что ignore_results и прочее, ждущее унутре lwt, не является основанием для того, чтобы реально подождать окончания обработки всех сообщений.  Но это как раз логично.  Думаю вот, что делать.  Если "сервер" крутится где-то в фоне, то по окончании работы главной нити он должен выполнить все задания и только потом выйти.  Либо нужно явным образом слать всем сообщения "закругляемся, выходим" и ждать завершения?  Но тогда сигнатура loop (строка 10 tests.ml) должна иметь другую сигнатуру, типа [ `Msg of 'i | `Command of [ `Finish ]].  Какие идеи?
[17:47:29] <gds> в принципе, можно взять поведение эрланга с его деревом супервайзоров.  Но там мне что-то не понравилось поначалу.  Однако, надо перечитать.
Но, сходу, непонятка такая: допустим, где-то глубоко по дереву, на листве запущен процесс, с которым хочется общаться.  Получается, он должен регистрировать себя каким-либо образом (сообщить кому-то свой пид), чтобы с ним можно было общаться.  А нормальные методы для этого не придумываются сходу.
[18:01:30] <zert> да, регистрируется где-то
[18:01:55] <zert> например, есть библиотека gproc, которая реализует регистратор
[18:02:22] <zert> процес регается под каким-то термом или несколькими термами
[18:02:43] <zert> сделано это всё поверх базы ets
[18:04:54] <gds> ага, понял.  А вообще, если смотреть объективно, это получается удобно или слегка костылеподобно?
[18:07:20] <zert> удобно, ибо иначе никак :)
[18:07:39] <gds> гы, аргумент :)
[18:08:18] <zert> к тебе из сети пришёл пакет, например, SIP
[18:08:30] <zert> его надо откинуть соответствующему процессу транзакции
[18:09:27] <zert> разбираешь его, сооружаешь из записей идентификатор транзакции, находишь по таблице, есть ли уже соответствующая транзакция. если есть, то откидываешь ей, если нет, то создаёшь новую
[18:09:42] <zert> по-другому никак
[18:11:10] <gds> ага, всё понял.  Ну насчёт "никак" -- пока не знаю, буду думать.
[18:12:09] <zert> ну думай, только реально никак :)
[18:12:32] <zert> это я тебе про ерланговскую модель говорю
[18:12:48] Typhon вышел(а) из комнаты: Replaced by new connection
[18:12:54] Typhon вошёл(а) в комнату
[18:13:02] <zert> у себя ты можешь какой-нибудь модный диспетчер замутить, который будет делать то же самое, но на более низком уровне
[19:30:01] Typhon вышел(а) из комнаты
[20:53:13] superbobry вышел(а) из комнаты
[21:14:10] ftrvxmtrx вышел(а) из комнаты
[21:25:34] komar вышел(а) из комнаты
[21:31:12] arhibot вошёл(а) в комнату
[22:07:18] superbobry вошёл(а) в комнату
[22:43:13] komar вошёл(а) в комнату
[22:52:09] <gds> интересно, почему нет чего-то среднего между Lwt.choose и Lwt.join?  Я про что-то типа select.  Допустим, с типом
select : list (Lwt.t 'a) -> (list ([ `Ok of 'a | `Error of exn]) * list (Lwt.t 'a))
, возвращающий всё, что завершилось, сразу.
Понятно, в большинстве случае в lwt завершается сразу только одна операция, но всё же.
Или чего-то не понимаю?
[22:55:22] <Kakadu> это типа как в юниксах select и pselect?
[22:56:24] <gds> именно.
[22:56:44] <gds> вот интересно, может кто понимает, почему так.
[22:57:22] <gds> понятно, что всё, что может обрабатываться через такой гипотетический select, может быть обработано через Lwt.choose.
[22:58:10] <Kakadu> по модулю эффективности
[22:58:33] <Kakadu> ладно. я больше не буду кэпствовать.
[23:00:17] <gds> лично мне в плане эффективности не ясно, что лучше.  Не буду же по мелочам тревожить французов.
[23:14:37] arhibot вышел(а) из комнаты
[23:32:27] Typhon вошёл(а) в комнату
[23:53:27] superbobry вышел(а) из комнаты
[23:54:05] superbobry вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!