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

GMT+3
[00:08:33] <ermine> ygrek: а пчу бы не сделать Sql.select db callback выводящим результат callback? val f : db -> (field1 -> field2 -> 'a) -> 'a
[00:08:45] <ermine> хз правда, работает ли такое
[00:09:25] <ermine> и неудобно, когда хочется прервать цикл
[00:10:40] <ermine> и неудобно если нужен аккумулятор
[00:10:43] <ermine> ладно
[00:11:24] <ygrek> callback то вызовется много раз - какой результат выдавать?
[00:12:08] <ermine> ну я бредила тут слегка
[00:12:40] <ermine> ну мож как fold
[00:12:41] <ygrek> я не хотел перетяжелять. по "функциональному" было бы callback оформить как fold да ещё и с флагом предварительной остановки, на практике это неудобно
[00:13:10] <ermine> (field1 -> field2 -> 'a -> 'a) -> 'a
[00:14:12] <ygrek> вот что на практике надо так это реюз prepared statements и реконнект на обрыв соединения (конфигурируемый).
[00:15:00] <ermine> имхо просто ты предпочитаешь в ref аккумулировать
[00:15:09] <ermine> я вот предпочитаю не предпочитать ref
[00:15:32] <ygrek> просто аккумулировать редко приходится
[00:16:05] <ermine> отличие хаскиля от камля как раз в этом, что в хаскиле неудобно писать императивный код, в отличие от камля, где это удобно
[00:16:22] <ygrek> можно добавить сейчас такой вариант, потестим, будет хорошо - останется (по дефолту или по ключику)
[00:17:00] <ermine> ты можешь добавить специальным параметром какой тип функции генерить
[00:17:15] <ermine> @fname +fold
[00:17:33] <ermine> или без плюса
[00:17:36] <ermine> ну как-то там
[00:17:44] <ygrek> тоже интересный вопрос :)
[00:18:18] <ermine> @fname:fold
[00:18:25] <ygrek> лучше генерить две функции имхо, а потом просто выбираешь какая больше нравится
[00:18:45] <ygrek> а так придётся редактировать sql файл
[00:18:52] <ermine> fname_fold?
[00:18:58] <ermine> fname2?
[00:19:01] <ygrek> или в субмодуле
[00:19:06] <ygrek> Fold.fname
[00:19:57] <ermine> Sql.Fold.fname
[00:20:03] <ermine> ну можно попробовать
[00:20:37] <ermine> еще не забудь не генерить файл, если есть ошибки
[00:20:50] <ermine> а то камлобилд не думает, что была фатальная ошибка
[00:22:08] <ermine> а вот остановки действительно реже нужны
[00:22:20] Typhon вышел(а) из комнаты
[00:22:38] <ygrek> ermine: уже не генерю неделю, обновляйся :)
[00:22:53] <ermine> щас
[00:24:03] <ermine> там по-прежнему build.bat
[00:24:10] <ygrek> но кстати редирект пустого output'а в файл всё равно вызывает апдейт timestamp'а.. хотя главное что код не соберётся и придётсяо братить внимание на проблему
[00:24:39] <ermine> а
[00:24:49] Typhon вошёл(а) в комнату
[00:24:53] Typhon вышел(а) из комнаты
[00:25:19] <ygrek> так это для windows
[00:25:32] Typhon вошёл(а) в комнату
[00:25:46] <ermine> я уже посмотрела в ридми
[00:26:26] <ermine> собралось
[00:27:47] Typhon вышел(а) из комнаты
[00:28:05] Typhon вошёл(а) в комнату
[00:28:28] <ermine> щас внесла ошибку в sql - камлобилд теперь останавливается сразу
[00:28:29] Typhon вышел(а) из комнаты
[00:29:03] Typhon вошёл(а) в комнату
[00:29:27] Typhon вышел(а) из комнаты
[00:29:53] <ygrek> из-за error code наверное
[00:29:57] Typhon вошёл(а) в комнату
[00:30:06] <ygrek> Fold будет завтра т.к. я сплю
[00:30:56] <ermine> пасиб
[00:35:30] <Typhon> а как в камле принято называть композицию функций инфиксно?
[00:36:11] <ermine> посмотри на вики камлюнити
[00:36:22] <ermine> там статья про операторы
[00:36:27] <Typhon> вроде не видел там композиции, но проверю сейчас
[00:37:38] <Typhon> да, нету. ( . ) -- не дают, разумеется, использовать :(
[00:45:44] Typhon вышел(а) из комнаты
[00:45:57] Typhon вошёл(а) в комнату
[00:51:29] ygrek вышел(а) из комнаты
[01:01:11] <Typhon> хотел (<<) -- так это quotation в camlp4, $ -- unqotation :(
[01:16:44] <ermine> antiquotation
[01:17:13] <Typhon> мог соврать, да
[03:10:46] Typhon вышел(а) из комнаты: offline
[06:27:51] iNode вышел(а) из комнаты
[07:24:05] iNode вошёл(а) в комнату
[07:49:57] geovit вошёл(а) в комнату
[08:21:10] gds вышел(а) из комнаты
[08:56:10] <ermine> хм, кажись в sqlgg есть бугага
[08:56:31] <ermine> второй раз не выполняется селект с sum()
[08:56:49] gds вошёл(а) в комнату
[09:04:43] <ermine> ага бага - результат option, но sqlgg не проверяет наличие отсутствия результата
[09:42:26] aloner2k вошёл(а) в комнату
[10:02:03] ygrek вошёл(а) в комнату
[10:30:29] aloner2k вышел(а) из комнаты: I'm happy Miranda IM user. Get it at http://miranda-im.org/.
[10:41:03] aloner2k вошёл(а) в комнату
[10:41:51] ygrek вышел(а) из комнаты
[10:50:43] f[x] вошёл(а) в комнату
[10:54:16] <f[x]> ermine: пример?
[10:55:05] ygrek вошёл(а) в комнату
[11:08:34] <f[x]> Typhon: let ($) f g = fun x -> f (g x)
[12:25:20] ygrek вышел(а) из комнаты
[13:23:51] <ermine> f[x]: select sum(counter) from words where word1=@word1;
[13:24:47] <ermine> Thread 3 killed on uncaught exception Sqlgg_sqlite3.Oops("get_column_Int 0")
Raised at file "sqlgg_sqlite3.ml", line 22, characters 15-57
[13:25:26] <f[x]> хм
[13:25:58] <ermine> там результат действительно пустой
[13:26:12] <ermine> а функция не выдает None
[13:27:31] michael.holub вошёл(а) в комнату
[13:43:04] ygrek вошёл(а) в комнату
[13:44:30] <f[x]> понял, спасибо
[13:44:45] <f[x]> не учёл
[13:44:49] michael.holub вышел(а) из комнаты
[13:44:57] <f[x]> sum возвращает NULL если нет данных
[13:45:15] <f[x]> как временный вариант обхода coalesce(sum(counter),0)
[13:47:35] <f[x]> а втак это фундаментальная трабла, надо трекать NULLи
[13:47:38] <ermine> а что это?
[13:48:26] <f[x]> http://sqlite.org/lang_corefunc.html
[13:48:38] <f[x]> coalesce(X,Y,...) Return a copy of the first non-NULL argument.
[13:49:30] <ermine> интересно
[13:52:28] sceptic вышел(а) из комнаты
[13:53:47] Typhon вошёл(а) в комнату
[13:57:33] <Typhon> f[x]: я определял как f g x = f (g x), но с $ возникли проблемы при использовании camlp4, поэтому пока остановился на <<< :(
[14:00:30] <f[x]> Какие именно проблемы?
[14:00:49] daapp вышел(а) из комнаты
[14:01:46] <gds> Typhon: (по следам вчерашних логов)
а на чём сейчас телекоммуникации нарисованы?
Ещё из достоинств -- простота [не только рантайма, но и] алгоритмов преобразования из исходника в исполняемый код. Скорость достигается не столько непредсказуемыми высокоуровневыми оптимизациями, сколько скоростью примитивных операций. Ещё -- поддержка ооп (полезно как для late binding + overloading, так и для реализации-портирования оопшного кода).
И главное достоинство -- коммунити!!11111 :)
[14:03:24] <Typhon> f[x]: ругается "Error: Antiquotation not terminated", если загружать в топлевел. там же когда пишу let s = f1 $ f2;; оно не выполняется, ждет комманд дальше, видимо как раз закрытия антиквотейшн, я пока на лазил в камлп4 доки, чтобы разобраться, что есть что.
[14:05:39] <Typhon> gds: кстати коммунити без шуток хорошее, в c.j.r я не встречал пока, чтобы исчерпывающие ответы настолько давали :) желекза, у нее драйвера и апи, слой на си к питону и бизнес логика на питоне (+ в БД большая асть в виде хранимок на пгскул, плпи). соот-но с питон проблемы, что юнит-тесты на все не напишешь и возможны дурацкие ошибки, которые сервис роняют, а там толпы абонентов звонят и общаются :(
[14:08:44] sceptic вошёл(а) в комнату
[14:09:35] sceptic вышел(а) из комнаты: Replaced by new connection
[14:09:40] sceptic вошёл(а) в комнату
[14:09:48] sceptic вышел(а) из комнаты
[14:10:12] sceptic вошёл(а) в комнату
[14:17:45] <gds> Typhon: тады да, нужно явно определить api железки в терминах окамловских типов, и тайпчекер дальше сам будет проверять корректность. Конечно, если это возможно. Если же нет, то даже хорошее приближение уже поможет делать меньше ошибок.
[14:26:39] <Typhon> gds: хотелось бы поиметь с переходом еще и ощутимый профит в производительности и в масштабируемости (пользовать ресурсы всех ядер и всех процов). с окамлем обычным, я так понимаю, не особо тут выйдет?
[14:29:41] <gds> зависит от архитектуры. Если раскидывается на процессы, то всё делается. Но вопрос ещё в том, что является затыком в производительности.
[14:59:53] <ermine> f[x]: coalesce(sum(counter),0) будет выдавать не result option, а видимо калбэк вызывать?
[15:00:26] <ermine> да калбек, и надо реф ставить, охщи
[15:01:50] <f[x]> ermine: хак хака - limit 1
[15:02:13] <ermine> ужосъ
[15:02:14] <f[x]> > Error: Antiquotation not terminated
ни разу не встречал
[15:02:43] <f[x]> Typhon: покажи полный пример, интересно
[15:03:20] <ermine> антиквтотинг только внутри квотинга вроде
[15:04:20] <f[x]> вот и я так думаю
[15:04:36] <f[x]> # let ($) f g x = f (g x);;
val ( $ ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun>
# let x = not $ not;;
val x : bool -> bool = <fun>
[15:05:08] Typhon вышел(а) из комнаты
[15:06:07] Typhon вошёл(а) в комнату
[15:06:10] <ermine> возможно у него какое-то syntax extension
[15:06:46] <ermine> f[x]: а ты подключи camlp4of :)
[15:06:54] <ermine> и dynload
[15:07:08] <f[x]> а как его в топлевел подключить?
[15:07:26] <ermine> в вике я писаоа :)
[15:07:30] <f[x]> я регулярно pa_openin и pa_trybind использую
[15:07:35] <ermine> про camlp4
[15:07:43] <f[x]> а, руками
[15:07:58] <ermine> ну да #load
[15:08:11] <ermine> ты небось запускаешь просто ocaml?
[15:08:19] <f[x]> хм, точно
[15:08:30] <f[x]> причём с camlp4o всё ок, а с of - нет
[15:08:35] <ermine> неудобно же без хистори
[15:08:58] <f[x]> $ alias ocaml
alias ocaml='rlwrap ocaml'
[15:09:38] <f[x]> а зачем camlp4of нужен (кроме того что camlp4o делает) - для девелопинга синтаксических расширений?
[15:10:23] <ermine> оно включает в себя все модули
[15:11:34] <f[x]> а зачем нужны "все" модули?
[15:12:16] <ermine> camlp4of -loaded
[15:12:32] <ermine> можно сравнить выдачу
[15:13:33] <ermine> -loaded-modules
[15:14:02] <f[x]> > Camlp4QuotationExpander
[15:14:55] <ermine> ага
[15:15:14] <f[x]> вообщем думается для обычного кодинга camlp4of не нужен
[15:20:03] iNode вышел(а) из комнаты
[15:23:16] iNode вошёл(а) в комнату
[15:23:21] iNode вышел(а) из комнаты
[15:23:48] iNode вошёл(а) в комнату
[15:26:23] ygrek вышел(а) из комнаты
[15:28:55] <Typhon> http://dumpz.org/14380/ -- и на этом ввод кончается :) с "camlp4o.cma" все лучше, но (<<) использовать в качестве оператора не дают с похожей проблемой ( только на не завершенный Quotation ругаются). а (<<) по мне весьма неплох для этой цели :)
[15:31:24] <ermine> юзай голый camlp4
[15:42:05] Typhon вышел(а) из комнаты
[15:50:37] sevenov вышел(а) из комнаты: Replaced by new connection
[15:50:40] sevenov вошёл(а) в комнату
[16:13:51] Typhon вошёл(а) в комнату
[16:16:37] <Typhon> yota -- это плохо
[16:16:47] <Typhon> ermine: "голый" -- это что грузить? camlp4o позволяет использовать $, но валится на (<<). camlp4lib позволяет использовать оба, но не содержит парсеров. Мне от camlp4 нужны потоки и парсеры, и желательно, чтобы можно было использовать (<<) (если это вообще возможно с camlp4) -- что мне загружать?
[16:19:26] <f[x]> << с camlp4 не получится использовать имхо
[16:21:58] <Typhon> жаль, но хоть $ понял как использовать, спасибо за хинт с "camlp4o.cma".
[16:22:35] <ermine> а просто use_camlp4 в _tags тоже не работает?
[16:30:40] <f[x]> для стрим парсеров нужен camlp4o (Camlp4OCamlParserParser наверное)
[16:43:32] iNode вышел(а) из комнаты
[16:49:26] iNode вошёл(а) в комнату
[17:02:36] geovit вышел(а) из комнаты
[17:33:33] gds вышел(а) из комнаты
[17:39:27] iNode вышел(а) из комнаты
[17:46:49] sevenov вышел(а) из комнаты
[17:47:13] sevenov вошёл(а) в комнату
[17:47:42] Kakadu вошёл(а) в комнату
[17:51:22] Typhon вышел(а) из комнаты
[17:52:56] Typhon вошёл(а) в комнату
[18:15:46] gds вошёл(а) в комнату
[20:13:50] ermine плачет над своими хуками
[20:27:50] Typhon вышел(а) из комнаты
[20:36:51] Mon вышел(а) из комнаты
[20:37:04] Mon вошёл(а) в комнату
[20:40:03] Mon вышел(а) из комнаты
[20:40:10] Mon вошёл(а) в комнату
[20:44:07] Mon вышел(а) из комнаты
[20:44:21] Mon вошёл(а) в комнату
[20:44:43] Mon вышел(а) из комнаты
[20:45:01] Mon вошёл(а) в комнату
[20:46:35] Kakadu вышел(а) из комнаты
[20:53:03] Mon вышел(а) из комнаты
[20:53:16] Mon вошёл(а) в комнату
[20:57:56] Mon вышел(а) из комнаты
[20:58:09] Mon вошёл(а) в комнату
[21:01:16] Mon вышел(а) из комнаты
[21:01:33] Mon вошёл(а) в комнату
[21:17:31] Mon вышел(а) из комнаты
[21:17:45] Mon вошёл(а) в комнату
[21:35:46] DimitryKakadu вошёл(а) в комнату
[21:42:21] Typhon вошёл(а) в комнату
[23:02:24] ExplicitCall вышел(а) из комнаты
[23:02:47] ExplicitCall вошёл(а) в комнату
[23:06:59] Typhon вышел(а) из комнаты
[23:16:04] Typhon вошёл(а) в комнату
[23:17:51] abiogenesis вошёл(а) в комнату
[23:18:04] Typhon вышел(а) из комнаты
[23:18:16] Typhon вошёл(а) в комнату
[23:37:23] abiogenesis вышел(а) из комнаты
[23:52:05] DimitryKakadu вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!