Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 12 августа 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся!
Конфигурация комнаты

GMT+4
[00:26:03] sceptic вышел(а) из комнаты
[00:29:18] sceptic вошёл(а) в комнату
[00:30:13] sceptic вышел(а) из комнаты: Replaced by new connection
[00:30:17] sceptic вошёл(а) в комнату
[00:57:54] sceptic вышел(а) из комнаты: Replaced by new connection
[00:57:56] sceptic вошёл(а) в комнату
[01:00:59] sceptic вышел(а) из комнаты: Replaced by new connection
[01:01:02] sceptic вошёл(а) в комнату
[01:05:19] sceptic вышел(а) из комнаты: Replaced by new connection
[01:05:23] sceptic вошёл(а) в комнату
[01:08:27] sceptic вышел(а) из комнаты: Replaced by new connection
[01:08:29] sceptic вошёл(а) в комнату
[01:10:21] sceptic вышел(а) из комнаты
[01:15:20] sceptic вошёл(а) в комнату
[01:18:49] ygrek вышел(а) из комнаты
[01:24:43] sceptic вышел(а) из комнаты: Replaced by new connection
[01:41:28] sevenov вышел(а) из комнаты
[01:41:33] sevenov вошёл(а) в комнату
[02:10:14] sceptic вошёл(а) в комнату
[02:10:56] sceptic вышел(а) из комнаты
[02:11:10] sceptic вошёл(а) в комнату
[02:34:03] sevenov вышел(а) из комнаты
[02:36:56] sevenov вошёл(а) в комнату
[04:53:19] daapp вошёл(а) в комнату
[08:31:17] gds вышел(а) из комнаты
[09:03:41] Typhon вошёл(а) в комнату
[09:09:18] gds вошёл(а) в комнату
[09:51:41] john вошёл(а) в комнату
[09:56:11] <gds> боян, но для систематизации: http://alaska-kamtchatka.blogspot.com/2009/05/polymorphic-recursion.html
[10:20:42] Mon вышел(а) из комнаты
[10:21:06] ygrek вошёл(а) в комнату
[10:21:27] Mon вошёл(а) в комнату
[10:37:30] f[x] вошёл(а) в комнату
[10:42:55] john вышел(а) из комнаты
[10:45:35] john вошёл(а) в комнату
[11:18:52] ygrek вышел(а) из комнаты
[11:29:55] ygrek вошёл(а) в комнату
[12:02:18] john вышел(а) из комнаты: Replaced by new connection
[12:02:19] john вошёл(а) в комнату
[12:28:45] f[x] вышел(а) из комнаты: Replaced by new connection
[12:28:46] f[x] вошёл(а) в комнату
[12:36:46] ygrek вышел(а) из комнаты
[13:24:22] john вышел(а) из комнаты
[13:45:22] john вошёл(а) в комнату
[14:29:28] ygrek вошёл(а) в комнату
[14:45:18] daapp вышел(а) из комнаты
[15:13:21] f[x] грепает логи
"<ermine> кто-нибудь делал С биндинг с использованием камлобилда?"
актуально ещё? (недавно пихнул камлобилд в ocaml-sqlite3 :)

[15:21:16] <gds> интересно вот. Допустим, есть функция, принимающая форматную строку и аргументы, которые она может приложить как-то типа let print fmt = Printf.printf fmt. Есть вызов этой функции -- Logger.print "kva=%i" 123. Допустим, это отладочная печать. В случаях без отладки мы можем сделать Printf.ifprintf fmt. Но вроде при этом форматная строка всё равно парсится, аргументы подставляются, и всё такое.
Можно ли путём манипуляций с исходником, содержащим определение функции "print", что-нибудь сделать так, чтобы форматная строка не парсилась?
Вопрос скорее из эстетических, нежели из практических соображений.
[15:22:23] <f[x]> форматная строка парсится на этапе компиляции еяпп
[15:24:03] <f[x]> но при это еяпп значения конвертятся в строки и игнорятся
[15:25:23] <f[x]> а может и не конвертятся
[15:26:59] <gds> про этап компиляции -- хз, есть там какие-то приколы с форматами в рантайме, вроде.
ну вот вообще хочется, чтобы вызова ifprintf не было.
хотя фигня, эстетика чисто.
[15:29:10] <f[x]> хм?? форматы парсится компилером и по нему генерится и тип и код (асмовый код там забавный получается)
[15:43:20] <gds> ага, посмотрел в printf.ml. ifprintf таки получает на вход массив (со строками, что ли), и игнорит его. В общем, чем ковырять там, проще забить, тем более, для практики не важно.
Но интересно, нельзя ли по-другому проигнорировать форматную строку в функции, куда её передали?
[15:45:18] <f[x]> без препроцессора никак думаю, там же параметры
[15:45:21] <f[x]> которые зависят от строки
[15:45:25] <f[x]> форматной
[15:46:30] <gds> а препроцессором как -- выкусывать вызовы Logger.print?
[15:47:05] <f[x]> про препроцессор ничего не знаю и никому не скажу
[15:55:27] ygrek вышел(а) из комнаты
[16:07:59] sevenov вышел(а) из комнаты
[16:10:22] sevenov вошёл(а) в комнату
[16:18:07] <gds> чото туплю с форматными строками: http://paste.defun.ru/m5a84346d
есть идеи?
[16:24:48] <f[x]> с ksprintf'ом не получится имхо
[16:25:28] sevenov вышел(а) из комнаты
[16:27:12] <gds> а в чём вообще причина такой ботвы, не в курсе?
[16:35:27] <f[x]> ну, там типы разные :)
[16:35:54] <f[x]> т.е. ksprintf по типу даёт строку
[16:36:14] <f[x]> должен быть отдельный ifksprintf :)
[16:39:31] <gds> ksprintf (fun (str:string) -> someshit) fmt -- имхо должен вернуть someshit. или ():unit. ну хрен его знает, какие ещё варианты могут быть. или ошибаюсь?
[16:40:03] <gds> типы -- понятно. знать бы ещё, чему эти типы соответствуют в реальной жизни.
[16:40:27] <f[x]> не, это я не разбирался
[16:42:28] <gds> в caml-list попробовать отписать? ведь с точки зрения типов, которые принимают и возвращают функции, всё как бы ок. тип форматной строки разве что выбивается.
[16:47:51] <f[x]> open Printf
let print fmt =
if Random.bool ()
then ifprintf () fmt
else ksprintf (fun str -> ()) fmt
;;
[16:48:11] <f[x]> так ближе, осталось только 'c унифицировать
[16:49:17] <gds> а у меня даёт
('a, unit, unit, unit, unit, unit) format6
('a, unit, string, string, string, unit) format6
и дальше не знаю уже, куда думать.
[16:50:39] <f[x]> а, это то же что и было, да
[16:51:28] <f[x]> по доке 'c is the result type for the "printf"-style function
[16:51:44] <f[x]> у ksprintf это string, а у ifprintf это unit
[16:51:47] <f[x]> видимо так
[16:52:20] <gds> let print fmt =
if Random.bool ()
then Printf.ifprintf (raise Exit) fmt
else Printf.ksprintf (raise Exit) fmt
;;
даже тут фигня -- три string vs unit в типах.
[16:58:20] sevenov вошёл(а) в комнату
[17:18:53] <gds> решение есть, но кривоватое.
let dummy_buffer = Buffer.create 1;;
let print ch fmt =
if Random.bool ()
then Printf.kbprintf (fun b -> output_string ch (Buffer.contents b)) (Buffer.create 100) fmt
else Printf.ifprintf dummy_buffer fmt;;
[17:33:10] gds вышел(а) из комнаты
[17:37:11] <f[x]> хых
[18:03:24] gds вошёл(а) в комнату
[18:04:32] Typhon вышел(а) из комнаты
[19:02:19] sceptic вышел(а) из комнаты
[19:50:51] f[x] вышел(а) из комнаты
[20:12:46] sceptic вошёл(а) в комнату
[20:27:14] sevenov вышел(а) из комнаты: Replaced by new connection
[20:27:16] sevenov вошёл(а) в комнату
[20:40:58] sevenov вышел(а) из комнаты
[20:41:28] sevenov вошёл(а) в комнату
[22:18:07] sceptic вышел(а) из комнаты
[22:26:13] sevenov вышел(а) из комнаты
[22:26:29] sevenov вошёл(а) в комнату
[22:31:21] sevenov вышел(а) из комнаты: Replaced by new connection
[22:31:24] sevenov вошёл(а) в комнату
[22:46:17] ygrek вошёл(а) в комнату
[22:56:11] sevenov вышел(а) из комнаты: Replaced by new connection
[22:56:20] sevenov вошёл(а) в комнату
[23:11:28] sceptic вошёл(а) в комнату
[23:36:37] <ermine> скажите, а конструкция вида {t with a=newvalue} копирует в памяти всюзапись в новую запись с изменением данного поля?
[23:37:22] <ygrek> eугу
[23:37:26] <ygrek> * угу
[23:38:35] <ermine> видать не стоит злоупотреблять
[23:39:14] <ygrek> premature optimization is бяка
[23:40:14] <ermine> ну вот пример - использовать такой финт в fold_left, где первым аргументом в функции будет рекорд
[23:40:45] <ermine> и в каждой итерации меняется какое-нить поле рекорда
[23:40:48] asprit вошёл(а) в комнату
[23:41:10] <ygrek> ermine: так и делай
[23:41:25] <ygrek> альтернатива - мутабельный рекорд
[23:41:26] <ermine> да уж
[23:41:36] <asprit> привет
[23:42:06] <ermine> не, мутабельный не нужен
[23:42:48] <asprit> ermine: а нельзя логи включить для openbsd@c.j.r?
[23:43:00] <ygrek> а я за оффтопик забаню сейчас
[23:43:06] <ygrek> в приват с логами
[23:43:24] <asprit> просил в приват
[23:43:30] <ygrek> ermine: ты с таким подходом скоро аллокации у List.map начнёшь считать :)
[23:43:35] <asprit> раньше
[23:43:50] <ygrek> asprit: и это не повод просить в конфе теперь
[23:43:59] <asprit> сорри
[23:45:21] <ermine> ygrek: ой, я тут декодю вкард, это такая мутотень
[23:46:03] <ermine> иной раз непонятно как репрезентить в памяти
[23:47:03] <ygrek> рекомендую принцип - make it run, make it right, make it fast
[23:48:14] <ermine> asprit: ты еще попроси включить логи где-нить, например в vista@
[23:50:05] <ermine> ygrek: не, вот рассмотрим адрес в вкарде: там можно указать от нуля до нескольких типов адреса: домашний, рабочий, еще что-то там, и кроме этого куча необязательных полей: улица, город, страна и тп
[23:51:04] <ermine> в виде рекорда представлять - это куча полей bool/string option
[23:51:38] <ermine> а если просто списком представлять, то придется проверять на неповторяемость элементов
[23:55:21] <ygrek> пустые поля - пустая строка в рекорд, зачем option?
[23:56:17] <ermine> ну наверное можно и так
[23:56:54] <asprit> висту ненадо
[23:56:58] <ygrek> или же мапка строк
[23:58:41] <ermine> фи, мапка
[23:58:53] <ermine> в опенбсде пусто и унылыее чем в висте
[23:59:50] <ermine> а к тому же видно, что он в опенбсде не овнер
[23:59:56] <asprit> а почему в привате не отвечаете? забанят же, зато там по делу говорят
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!