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

GMT+3
[01:04:18] komar вышел(а) из комнаты
[01:13:17] ak79 вышел(а) из комнаты
[01:25:19] koul10 вошёл(а) в комнату
[01:30:47] koul10 вышел(а) из комнаты
[01:30:58] arhibot вышел(а) из комнаты
[01:32:19] arhibot вошёл(а) в комнату
[01:45:41] ygrek вышел(а) из комнаты
[01:47:11] arhibot вышел(а) из комнаты
[02:23:10] ermine вышел(а) из комнаты
[03:22:44] ak79 вошёл(а) в комнату
[04:17:36] zert вышел(а) из комнаты
[05:03:52] ak79 вышел(а) из комнаты
[05:15:46] ftrvxmtrx вышел(а) из комнаты
[05:15:54] ftrvxmtrx вошёл(а) в комнату
[10:42:09] ermine вошёл(а) в комнату
[10:43:37] Kakadu вошёл(а) в комнату
[10:44:19] Kakadu вышел(а) из комнаты
[11:17:33] ak79 вошёл(а) в комнату
[11:30:39] serp256 вошёл(а) в комнату
[11:34:04] ygrek вошёл(а) в комнату
[11:57:32] serp256 вышел(а) из комнаты
[12:02:24] ygrek вышел(а) из комнаты
[12:02:34] ygrek вошёл(а) в комнату
[12:22:29] ygrek вышел(а) из комнаты
[12:49:21] serp256 вошёл(а) в комнату
[12:51:52] serp256 вышел(а) из комнаты
[13:12:28] arhibot вошёл(а) в комнату
[13:12:42] arhibot вышел(а) из комнаты
[13:14:05] komar вошёл(а) в комнату
[13:26:37] iNode вышел(а) из комнаты
[14:16:08] iNode вошёл(а) в комнату
[14:19:03] <gds> кажется понимаю, зачем нужны exception printers(?).  Если есть куча модулей, в каждом свои исключения, везде нужно поддерживать функцию типа string_of_exn, которая знает обо всех модулях.
[15:02:22] <ermine> это ты о чем и где?
[15:57:09] <ermine> а функция может быть ключом хэштаблицы?
[15:59:33] <vshender> нет
[15:59:40] <komar> Exception: Invalid_argument "equal: functional value"
[15:59:42] <vshender> для функций сравнение не определено
[16:05:40] <ermine> пасиб
[16:15:39] ak79 вышел(а) из комнаты
[16:19:51] <ermine> а можно ли на этапе переполки в camlp4 узнать какая будет сигнатура?
[16:20:19] ermine всё пытается куда-то засунуть функции
[16:20:24] <vshender> если правильно понял вопрос, то не
[16:21:06] <ermine> я вот тоже думаю, что не
[16:22:23] <vshender> А что ты такое делаешь, что такие "вещи" нужны?
[16:26:06] <ermine> полиглота делаю, чтобы не юзать gettext, я с помощью camlp4 генерю код на основании форматной хитрой строки
[16:26:26] <ermine> написала генератор, теперь думаю как вызывать эти функции согласно языку
[16:27:11] <ermine> когда переводится строка типа "hello" - проблем нет, простенькая хэштаблица...
[16:27:25] <vshender> Хм, непонятно. Так ключом же в таблице должен быть языковой код, не функция. А функция -- значением. Нет?
[16:28:07] <ermine> а когда там всякие вставки типа %d %s, это уже функция с неизвестной сигнатурой на этапе генерации кода
[16:29:31] <vshender> хм, сделай тип-сумму для всех типов аргументов такой функции и передавай функциям в виде списка
[16:29:43] <vshender> будет универсальная сигнатура, код вроде генерить все-равно какой
[16:29:55] <vshender> Только что чуть медленнее прямой передачи параметров
[16:30:43] <vshender> но манипуляции хитрые со строками все-равно будут доминировать по затратам времени, поэтому не так страшно
[16:45:12] <ermine> чтобы сделать тип-сумму, надо рисовать сигнатуру
[16:45:34] <vshender> хм, не понимаю
[16:45:56] <ermine> type a = A of signature
[16:46:02] <vshender> тип сумма типа type formatFuncParam = Int of int | String of string | ...
[16:46:07] <vshender> и передавать список значений
[16:46:34] <vshender> нам просто нужно униформно закодировать список всех параметров функции
[16:46:50] <ermine> так разница в том, что у меня не принтф, а хитрый формат
[16:46:52] <vshender> для унификации типа -- тип-сумма; для унификации по числу параметров -- список
[16:47:03] <vshender> А в чем его хитрость?
[16:48:17] <vshender> если уже обсуждалось, то можно просто дать ссылку на лог
[16:49:09] <ermine> в % вписываешь вместо d функцию, которая принимает значение определенного типа и возвращает строку, таким образом я пишу "This server %string works for %uptime", где uptime берет тьюпл из года, месяца, дня, часы-минуты-секунды, но там тоже форматная строка вида "%int %year_str", где второе принимает инт и родит год в правильном числе и падеже
[16:50:11] <vshender> ух, намудрено...
[16:50:21] <ermine> и получается красивенькая строка, где не выводится 0 минут и нет лишних пробелов между частями
[16:51:02] <ermine> vshender: а что делать?
[16:51:21] <vshender> думать...
[16:51:40] <ermine> кстати, String of string тоже некуда сувать
[16:52:05] <ftrvxmtrx> в батарейках неплохо сделано похожее (если не такое)
[16:52:06] <ermine> это только интерпретировать в рантайме можно
[16:52:26] <ftrvxmtrx> на свои типы функции писать можно
[16:52:31] <ermine> и аргументы тоже придется в список складывать, что скучно
[16:52:37] <vshender> ну да
[16:52:40] <vshender> нужно подумать
[16:53:47] <ermine> ftrvxmtrx: в батарейках - это где?
[16:55:19] <ermine> кста, в gettext я чота не нашла как там применяют множественный plural в одной строке
[16:57:26] <ftrvxmtrx> http://batteries.forge.ocamlcore.org/doc.preview:batteries-beta1/html/api/Printf.html
[16:57:47] <ftrvxmtrx> ой, не тут
[16:58:19] <ftrvxmtrx> на github'e документация батареек 404 выдаёт :(
[16:58:46] <ermine> так это extlib?
[16:59:05] <ftrvxmtrx> нет, это ocaml batteries
[16:59:13] <ftrvxmtrx> есть ли в extlib именно это я не знаю
[16:59:16] <ftrvxmtrx> http://batteries.forge.ocamlcore.org/doc.preview:batteries-beta1/html/api/Print.html
[16:59:32] <ftrvxmtrx> Extending formats
[16:59:53] <ermine> только там небось не меняется на ходу форматная строка
[16:59:59] <ermine> как в любом принтфе
[17:01:11] <ermine> да, и у меня тоже unparsing
[17:07:18] Kakadu вошёл(а) в комнату
[17:07:43] Kakadu вышел(а) из комнаты
[17:12:24] serp256 вошёл(а) в комнату
[17:17:48] <ermine> такая же засада
[17:25:47] <ermine> хочется что-то типа let module M = Make(Lang) in Hashtbl.add tbl "ru" M и потом дергать (Hashtbl.find tbl "tru").say_hello "vasya"
[17:26:51] <ermine> s/tru/ru/
[17:35:28] serp256 вышел(а) из комнаты
[17:35:46] <ermine> о, а вот можно Hashtbl.add tbl "ru" M.say_hello
[17:38:52] serp256 вошёл(а) в комнату
[17:52:37] Typhon вошёл(а) в комнату
[18:03:08] serp256 вышел(а) из комнаты
[18:21:45] ak79 вошёл(а) в комнату
[19:04:25] <gds> ermine: про exception printers -- Printexc.to_string не умеет (и не должен) печатать исключения в удобочитаемом виде.  А получать исключение Mymodule1.Myexc2(_) -- это как-то неинформативно.
про функцию как ключ хеш-таблицы -- можно, но: 1. хеш ты ей не присвоишь (хотя бы потому, что функциональные значения тоже имеют непостоянные адреса), поэтому всё выродится в обычный список, чего не нужно.  2. сравнение функций -- только по физическому адресу, то есть, если функции физически равны, то из этого следует одинаковое поведение при применении к ним одинакового аргумента, но не следует обратного (иначе рисуй не-тьюринг-полный язык из тех, где выполняется принцип нормализации, и сравнивай на здоровье).
[19:14:01] <ermine> gds: не, я решила что в качестве ключа можно юзать форматную строку или ее хэш, чтобы не совать в ключ две страницы убористого текста :)
[19:14:57] <ermine> теперь вот гуглю на тему, куда регистрануть и как вызванивать функцию
[19:15:19] <gds> а сама хеш-таблица не должна содержать форматную строку, потому что там будет уже функция, или как?
[19:16:23] <ermine> gds: в качестве value - функция или какой-то еще хитрый способ ссылки на функцию
[19:18:01] <gds> только удостоверься, что форматные строки не пересекаются по хешам, иначе будет неуловимый глюк.
[19:18:03] <ermine> c let module M = .. in мало что можно сделать, ее даже вернуть низя
[19:18:39] <ermine> типа let make () = let module ... и зарегать make просто куданить, чтобы потом (make ()).say_hello
[19:19:57] <ermine> gds: я пока считаю, что нет проблем из-за "похожих" форматных строк, считаю, что это просто одна форматная строка в нескольких экхемплярах
[19:20:35] <ermine> т.е. нет вопроса что класть в ключ
[19:22:05] <ermine> видимо я хочу объект, но на самом деле не хочу объекты, а может я зря так думаю
[19:24:53] <gds> ermine: дело не в похожих, а в непохожих строках, имеющих один хеш.  Пока советую класть всё-таки всю строку в ключ, а там, если профайлер покажет, оптимизировать.
Объекты, кстати, тоже имеют проблему с хешами, но вроде это контролируется при компиляции/линковке.
[19:27:33] <ermine> gds: объекты имеют проблему для меня в том, что из одного объекта мне наверное будет тяжко поюзать функцию из "английского" (оригинального) объекта, если не хочу переопределить функцию
[19:28:11] <ermine> а вот клепать классы с наследованием - это, хм
[19:28:28] <gds> вот именно.  Делай, чтобы русский наследовался от английского, и готово.
[19:29:00] <ermine> в принципе, тоже свежая идея
[19:29:31] <gds> и, главное, сама допёрла.
[19:29:42] <ermine> фактически идею с классами высказал ygrek еще до того, как я начала писать полиглота и вообще только заикнулась об этом
[19:30:24] <ermine> он назвал "gettext для бедных"
[19:32:58] <gds> а, там я только объекты видел.  Да, вероятно, там это было.
[19:43:05] Typhon вышел(а) из комнаты
[19:43:35] Typhon вошёл(а) в комнату
[19:47:15] zert вошёл(а) в комнату
[20:09:25] <ermine> gds: http://alan.petitepomme.net/cwn/2010.06.08.html#1 ты это не пытался иметь в виду в прошлый раз?
[20:10:41] ak79 вышел(а) из комнаты
[20:18:52] <gds> ermine: именно это пытался иметь, но не поимел.  Да, маршаллинг этих штук хотел найти.
[20:20:51] Typhon вышел(а) из комнаты
[20:21:35] <ermine> круто, осталось понять о чем там речь
[20:22:32] Typhon вошёл(а) в комнату
[20:23:58] <gds> ermine: а может окажется, что эта штука тебе не подойдёт.  я обязан предупредить!
[20:24:54] <ermine> gds: да ладно, но узнать-то все равно как они делают подобные махинации в убогом языке
[20:25:19] <ermine> надо
[20:42:58] Typhon вышел(а) из комнаты
[20:43:54] Typhon вошёл(а) в комнату
[21:43:33] arhibot вошёл(а) в комнату
[21:53:15] Typhon вышел(а) из комнаты
[21:56:26] ygrek вошёл(а) в комнату
[22:00:09] ak79 вошёл(а) в комнату
[23:14:49] <ermine> хнык
[23:15:34] <ermine> пример фирст-класс модуля из доки не пашыт, особенно такая строка:
let langs : (string, module LANG) Hashtbl.t = Hashtbl.create 5
[23:15:50] <ermine> ему не нравится слово модуле в типе
[23:17:15] <ermine> дока вреть?
[23:18:38] <vshender> а камл 3.12?
[23:19:04] <ermine> ну да
[23:29:58] <vshender> module LANG в скобки заключи
[23:30:58] <ermine> и правда
[23:31:09] <ermine> как ты допёр?
[23:31:56] <vshender> в репле поигрался, оказалось действительно не работает. А потом загуглил и в примере увидел такую строку: type dyn = (module DYN)
[23:32:01] <vshender> в скобках
[23:33:41] <ermine> хитро
[23:34:53] <ermine> пасиб, будем дальше смотреть подходит ли такое засовывание модулей в хэштабло
[23:43:41] <ermine> примерчик работает
[23:44:50] <ermine> даже странно как-то
[23:45:08] komar вышел(а) из комнаты
[23:47:08] komar вошёл(а) в комнату
[23:57:05] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!