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

GMT+4
[00:00:07] <ygrek> а, ээ.., а у меня есть пример.. для c++... устаревший.
[00:00:32] <ygrek> я потом из вики скопирую в туториал :)
[00:01:45] <gds> c++? копрофагией не балуюсь. только по большой нужде и за деньги.
да, я продажная сволочь!
[00:03:12] <ygrek> я всё собираюсь. просто туториал имеет смысл когда оно хотя бы выйдет из уровня "works for me", а для этого надо ещё код пилить
[00:03:24] <ygrek> хотя release crap ещёне отменяли вроде :)
[00:03:35] <gds> во, я тоже хотел намекнуть :)
[00:04:39] <gds> только тут главное -- изложить цели. помнишь, как я тупил, просмотрев одним глазом по диагонали, что это типа orm? этого надо избежать, думаю. или надейся, что народ будет в целом внимательнее меня.
[00:05:39] <ygrek> да, это важный момент
[00:22:40] <ygrek> btw надо бота который будет в конфу кидать оповещения об edit'ах на вики
[00:23:27] <ygrek> сапожник без сапог
[00:23:47] <ygrek> то бишь ocaml@ без sulci :)
[00:25:42] <gds> да, есть такое :) думал, когда же нужда возникнет. раз уж с одной стороны прибиндили чятик к вики (на глагне), то и в другую сторону неплохо бы.
[01:25:41] ygrek вышел(а) из комнаты
[01:30:29] gds вышел(а) из комнаты
[02:37:28] john вышел(а) из комнаты
[02:38:11] john вошёл(а) в комнату
[06:48:26] john вышел(а) из комнаты
[07:23:27] john вошёл(а) в комнату
[09:44:26] <ermine> с sqlgg не получаются составные запросы типа дополнить по ходу дела AND выражения?
[09:55:08] <ermine> а, в патче для сульци это делается размножением шаблонов запросов для каждого случая
[09:55:14] <ermine> негуманно
[10:34:18] ygrek вошёл(а) в комнату
[10:41:13] <sceptic> Ммм.. А по какой причине extlib не интегрировали в upstream?
[10:56:57] animist вышел(а) из комнаты: Replaced by new connection
[10:57:01] animist вошёл(а) в комнату
[11:05:51] f[x] вошёл(а) в комнату
[11:06:40] <f[x]> ermine: угу, есть такое
[11:31:40] ygrek вышел(а) из комнаты
[11:39:58] <sceptic> # let unpack = List.map (words) $ List.tl $ lines ;;
Error: This expression has type 'a list -> 'a list
but an expression was expected of type string list
Хм.. почему так? unpack дальше примерно так используется unpack text. Ругается на List.tl
[11:48:20] <ermine> а зачем нужен последний доллар?
[11:48:38] <ermine> что за доллар вообще?
[11:48:53] <sceptic> let ($) f g = f g
[11:49:01] <sceptic> аля haskell
[11:49:23] <sceptic> lines тоже функция.
[11:49:34] <ermine> без аргументов чоли?
[11:50:13] <sceptic> я на каррирование расчитываю как бы
[11:50:16] <ermine> в toplevel наверное был выделен кусок выражения, на которое оно ругалось
[11:50:50] <sceptic> На List.tl
[11:51:14] <sceptic> http://dumpz.org/13492/
[11:51:35] <ermine> он хочет, судя по ругани, string list (один список), но получает функцию с одним аргументом
[11:52:36] <ermine> очевидно, получился партиал аппликешн в конце выражения
[11:53:36] <f[x]> let ($) f g = function x -> f (g x)
[11:53:53] <sceptic> это же композиция
[11:54:08] <sceptic> те . а не $
[11:56:58] gds вошёл(а) в комнату
[12:02:11] <ermine> f[x]: а пчу function, а не fun?
[12:02:18] ermine придралась
[12:03:02] <f[x]> ermine: для солидности :)
[12:04:15] <ermine> f[x]: а в ревизеде кого нет - fun или function?
[12:04:30] <gds> function
[12:04:34] <gds> там pure fun.
[12:04:39] <ermine> то-то
[12:05:25] <ermine> f[x]: еще в ревизеде нету bebin .. end, которых ты внёс в вику про sqlgg
[12:06:14] ermine пару лет назад избавилась от всех begin end в своем коде, типа сменила frimware
[12:06:19] <gds> # value () = begin print_int 123; print_string "kva" end;
123kva#
[12:06:44] <gds> revised испохабили, гады, когда camlp4 переколбасили.
[12:07:11] <f[x]> sceptic: у $ не та ассоциативность
[12:07:56] <ermine> gds: а в туториале camlp4 написано что нету
[12:08:29] <gds> в моём -- не написано, хехе
[12:09:27] <gds> я специально вспоминал, что они испохабили, и тестировал это, когда писал. Такие дела.
[12:19:58] <gds> так что про инфиксный "&"? мне он уже нравится, но с jocaml конфликт.
"&|" -- не та ассоциативность, "@&" -- неэстетично, как и "^|".
может родить camlp4-расширение, тупо меняющее ассоциативность "$..."?
ибо надо бы в вику писать про удобные операторы, так как скоро буду начинать нормально кодить проект про разметку, и хочется сразу с операторами.
[12:24:47] <f[x]> let ($) f g = function x -> f (g x)
[12:25:56] <gds> # let ($) f g = function x -> f (g x);;
val ( $ ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun>
# print_string $ string_of_int $ 123;;
Characters 31-34:
print_string $ string_of_int $ 123;;
^^^
Error: This expression has type int but an expression was expected of type
'a -> int
#
[12:26:57] <f[x]> ну аппликация и композиция это разные вещи
[12:27:01] <f[x]> нужно два оператора
[12:28:37] <f[x]> # let (&) f x = f x;;
val ( & ) : ('a -> 'b) -> 'a -> 'b = <fun>
# let x l = List.rev & List.rev & List.rev & l;;
val x : 'a list -> 'a list = <fun>
# let ($) f g = function x -> f (g x);;
val ( $ ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun>
# let x = List.rev $ List.rev $ List.rev;;
val x : '_a list -> '_a list = <fun>
[12:28:40] <gds> вообще, мне кажется противоестественной та композиция, которая "(f $ g) x" = "f (g x)". да и в теории категорий от неё отказываются в сторону обозначения "(f ; g) x = g (f x)" (т.е. аргумент проходит слева направо). но нам-то не взять символ ";" для своих грязных делишек.
[12:28:56] <gds> о, ещё и мономорфизация. фу.
[12:29:04] <gds> "&" подходит идеально, если бы не jocaml.
[12:29:39] <f[x]> значит забей на jocaml, им можно локально пользоваться
[12:30:10] <gds> то есть, в модулях, которые под jocaml, просто не использовать "&"?
[12:30:39] <f[x]> угу, в модулях которые компилируются jocaml'ем
[12:31:13] [A1ex] вошёл(а) в комнату
[12:35:35] <f[x]> хм, camlp4 на jocaml'е тоже ломается имхо :)
[12:36:50] <ermine> а зачем нужен jocaml? кому он понадобился?
[12:37:06] [A1ex] вышел(а) из комнаты: Time Out Expired Error !
[12:37:37] <f[x]> $ cat q.ml
def echo(x) = print_int x ; 0
$ jocamlc -pp camlp4o q.ml
File "q.ml", line 1, characters 0-3:
Error: Unbound value def
$ camlp4o q.ml
((def echo x) = (print_int x); 0)
[12:37:51] <f[x]> это уже неприятно
[12:39:09] <ermine> а попробуй camlp4of?
[12:39:23] <f[x]> идентично
[12:40:09] <ermine> но в случае со второй строко все равно нет преобразования кода
[12:40:44] <ermine> а ты выведи камлевый код
[12:40:57] <ermine> -printer o кажись
[12:45:46] <gds> http://gdsfh.dyndns.org/kamlo/InfixOperators
[12:46:53] <f[x]> ermine: всё равно, очевидно надо camlp4 подсунуть расширение грамматики jocaml'а
[12:48:02] <ermine> f[x]: def из jocaml?
[12:48:07] <f[x]> угу
[12:48:23] <ermine> ну тогда очередность не та
[12:49:24] <ermine> f[x]: а расширение есть pa_jocaml.cma или чонить подобное?
[12:49:31] <ermine> или еще лучше pr_
[12:49:46] <ermine> тогда camlp4o -parser jocaml -print -o
[12:50:21] <f[x]> если бы
[12:50:22] <f[x]> нету
[12:51:09] <ermine> тогда действительно непонятно зачем -pp
[12:51:16] <ermine> и как его юзать
[12:52:02] <ermine> f[x]: а йокамло вообще развивается?
[12:52:20] <ermine> и нафига он нужен, когда есть lwt?
[12:54:50] <f[x]> более-менее
[12:55:06] <f[x]> для разнообразия
[12:57:43] <ermine> до ырланка ему далеко
[12:58:20] <f[x]> не тролль
[12:58:43] <f[x]> тому с камлем вообще никогда не сравниться :)
[12:59:41] <ermine> это не избавляет от необходимости интегрировать камло с ырланком
[13:00:06] <ermine> ырланку далеко до камла как парсер
[13:37:59] <gds> насчёт инфиксных -- кому-нибудь есть что добавить в статью? (вдруг кто-нибудь не увидел)
[13:39:45] <ermine> ым, надо еще помучить камлобилд на предмет компиляции с помощью sqlgg
[13:50:30] <ermine> круто всё
[13:50:39] <ermine> надо будет про это в вику добавить
[13:57:50] <gds> f[x]: насчёт модулей с инфиксными -- хотел схему "Type1_as_type2": "операции с типом type1 делать операторами, работающими обычно с type2". Например, если смешиваются int и int64 в одном коде, чтобы можно было открыть Int64_as_float и 123L +. 234L, например. А потом -- open Float_as_float и иметь 123.45 +. 234.56. Или у тебя есть более кошерная идея про операции, которую я не понимаю?
[13:59:07] <f[x]> а, понял
[13:59:13] <f[x]> но camlp4 это решает гораздо лучше
[13:59:27] <f[x]> open Float in 1. + 2.
[13:59:37] ygrek вошёл(а) в комнату
[13:59:54] <f[x]> а если pa_do то этот вопрос конечно вообще отпадаетэ
[14:00:10] <f[x]> имхо всякие такие расширения надо использовать
[14:00:19] <gds> pa_do это решает вообще отлично и стоит пользовать его. но если лень или неприемлемо (например, omake не заводится, хехе), то pure ocaml модуль поможет.
[14:01:10] <f[x]> угу, напиши тогда про смешивание, но как по мне слишком вычурная техника :)
[14:03:54] <gds> тогда раскрою идею поплотнее, с примером и с рекомендацией смотреть на pa_do.
[14:30:44] <gds> http://gdsfh.dyndns.org/kamlo/InfixOperators
[14:30:53] gds эмулирует бота
[14:45:25] <gds> нужно набрасывать в том числе приёмы программирования, которые мы используем постоянно. т.е. практический опыт.
[15:00:57] <ermine> f[x]: непонятно, что sqlgg генерит для "select 1 from table where a=b"
[15:01:17] <ermine> там вроде получается функция num -> unit, что вызывает сомнение
[15:02:07] <f[x]> ermine: да, а как должно быть?
[15:02:23] <ermine> f[x]: num option
[15:02:39] <ermine> f[x]: а что оно вернет, если не найдет a=b?
[15:02:40] <f[x]> ы? может быть много рядков ведь
[15:03:19] <f[x]> не вызовет callback
[15:03:25] <ermine> да, и много рядков тоже может быть
[15:03:58] <ermine> плохо, если не вызовет
[15:04:01] <ermine> ых
[15:04:09] <f[x]> limit 1 сделай тогда
[15:04:10] ermine пошла ставить count(*)
[15:05:20] <ermine> f[x]: а при каких случаях оно делает результат option?
[15:05:41] <f[x]> когда может статически доказать что результат это один или ноль рядков
[15:05:59] <f[x]> пока что оно может это доказать в случае COUNT(*) без GROUP BY или явного LIMIT 1
[15:06:12] <gds> хе, про доказательство -- круто.
[15:06:42] <f[x]> ну, звучит круто, а в коде один pattern match специализированый :)
[15:09:20] <ermine> а limit 10,1 оно разжует?
[15:09:37] <sceptic> мм.. у меня есть список кортежей по 3 элемента. как наиболее идиоматично их вытащить оттуда? можно ли это pattern matching`ом сделать?
[15:10:06] <ermine> или даже select c as t from ... limit t
[15:10:16] <ermine> хотя хз можно ли такое в sql
[15:11:36] <gds> sceptic: оттуда -- откуда? вытащить -- в смысле?
[15:11:41] <ermine> let (a,b,c) = kortezh in ..
[15:12:28] <sceptic> примерно так: let f (a, b, c) = a + b + c in f [1; 2; 3]
[15:12:29] <f[x]> limit 10,1 разжуёт, второе в sql низя
[15:13:14] <ermine> а где тут кортеж?
[15:13:49] <sceptic> ок, там список списков
[15:14:32] <ermine> я пока вижу один список чисел
[15:14:54] <ermine> а вычислять сумму чисел в списке надо фолдингом налево или направо
[15:15:06] <sceptic> это для просто ты
[15:15:09] <sceptic> простоты
[15:15:50] <ermine> ну все же от задачи зависит
[15:16:04] <sceptic> есть список. [[1; 2; 3]; [4; 5; 6]; [7;8;9]]. я map`ом по нему пробегаюсь, и хочу получить в переменные a, b, c значения
[15:17:00] <gds> если известно, что список из 3 элементов, то как-то так:
match l with a::b::c::[] -> ... | _ -> failwith "обман!"
плюс-минус синтаксис.
[15:17:30] <ermine> match l with x::b::z::[] -> ..
[15:18:50] <ermine> gds: в именах переменных не сошлись ;)
[15:18:56] <f[x]> List.map (fun [a;b;c] -> a+b+c) [[1;2;3]; [4;5;6]]
[15:20:43] <gds> а я вот не люблю match failure. всегда явную ошибку пишу.
[15:22:01] <ermine> у ошибки матчинга есть приятная фича - оно указывает номер строки в коде
[15:36:14] <gds> в данном случае да, можно и ошибку матчинга оставить. а для более развесистых конструкторов и паттернов лучше таки явно: match .. with A -> .. | B -> .. | C | D | E -> failwith "ХБЗ", чтобы добавление-удаление конструкторов не скрывалось постоянным варнингом на этом матче.
[15:41:02] <sceptic> хм..
[15:41:16] <sceptic> c моим $ какие-то вечные проблемы.. я чего-то глобального не понимаю
[15:43:05] <sceptic> http://paste.org.ru/?agshtf ЧЯДНТ?
[15:46:06] <gds> ничо не понимаю в коде.
зато, раньше знал, что "на любом языке можно писать как на фортране", а теперь знаю, что "на любом языке можно писать как на хаскеле".
[15:46:19] <f[x]> левая ассоциативность, а нужна правая
[15:46:32] <sceptic> f[x]: А как добиться?
[15:46:50] <sceptic> gds: просто хочется меньше скобок :)
[15:47:45] <f[x]> sceptic: --> http://gdsfh.dyndns.org/kamlo/InfixOperators
[15:47:49] <ermine> скобки расставь
[15:48:25] <sceptic> ermine: хочетсо скоблессно
[15:48:54] <sceptic> f[x]: и? у меня такой же оператор.
[15:49:00] <gds> у операторов, начинающихся на "$", всегда будет левая ассоциативность, см. вдобавок первую табличку на http://caml.inria.fr/pub/docs/manual-ocaml/expr.html
[15:49:11] <gds> так, допишу статью ща.
[15:49:37] <sceptic> аа.. ясно.
[15:49:42] <ermine> ну тогда камлоп4, там ассоциативности назначить мона как в примере с калькулятором
[15:53:50] <sceptic> спасибо, & то что нужно.
[15:56:33] john вышел(а) из комнаты
[15:59:59] <sceptic> уфф..
[16:00:04] <sceptic> скомпилировалось.
[16:00:50] <ermine> f[x]: а что возвращают функции update/insert?
[16:02:01] <gds> по логике должны возвращать количество затронутых строк. интересно, угадал ли я.
[16:02:43] <ermine> а мускуль возвращает два числа вроде :)
[16:03:21] ermine думает, как надо красиво "глотать" ненужный результат
[16:03:35] <ermine> особенно есл ион из match вылезает
[16:04:17] sceptic думает попробовать себя в CodeJam 2010 на камле
[16:04:43] <gds> это когда будет по дате примерно?
[16:05:14] <sceptic> А фиг знает.. Я в этом году проморгал, оно в сентябре было.
[16:05:43] <gds> это google code jam?
[16:05:55] <sceptic> угу.
[16:06:12] <f[x]> ermine: @return number of affected rows
[16:06:42] <ermine> понятно
[16:07:02] <ermine> а вот как быть с LIMIT n, который я хочу необязательно вставлять в запрос?
[16:07:38] <ermine> имею два необязательных вставок в запрос, получается 5 запросов на все случаи жизни
[16:08:27] <f[x]> ermine: пока никак
[16:08:32] <ermine> в патче этот кусок кода в сульце скромно обойден вниманием f[x]
[16:08:36] <sceptic> http://dumpz.org/13499/ В общем хочется услышать мнение по коду, ну и в целом что можно лучше сделать. (например как от варнингов мэтчинга красиво избавится)
[16:08:40] <f[x]> ну скопипастить запрос несложно
[16:09:43] <gds> про варнинг на pow_int -- я писал вариант.
[16:09:53] <ermine> пока чайник маленький, его нужно давить сразу
[16:10:04] <ermine> а то еще вырастёт в паравоза
[16:10:35] <ermine> надо чонить придумать
[16:11:26] <gds> let rec to_decimal = function
pos when (pos == number_len) -> 0
я бы разложил в честный if.
[16:11:28] <ermine> а limit 0 бывает?
[16:11:30] <f[x]> ermine: patches welcome :) я пока не придумал как это красиво сделать, в камле можно на опциональные аргументы вешать если с параметром
[16:11:33] <ermine> и что будет?
[16:12:04] <f[x]> limit (2^64) думаю сгодится лучше :)
[16:12:27] <ermine> f[x]: я посмотрю в pgocaml, может там такая же беда
[16:13:00] <f[x]> let pack = List.iteri (fun i e -> print_string ("Case $" ^ string_of_int i ^ ": " ^ e ^ "\n")) in
let pack = List.iteri (printf "Case $%i: %s\n") in
[16:17:08] <gds> printf -- хорошо, неявное указание аргументов -- плохо.
[16:18:27] <f[x]> gds злюка
[16:18:44] <gds> я за самодокументирующийся кот.
[16:19:18] <gds> хотя в данном случае это мелочи.
[16:19:23] <f[x]> я за type throwback в реакторе
[16:36:03] animist вышел(а) из комнаты: offline
[16:42:36] Mon вышел(а) из комнаты
[16:43:32] <gds> и при попытке вникнуть, что код делает, загружаешь его в реактор, мучительно становишься на каждое выражение, нажимаешь кнопочку, изучаешь типы, вместо
List.iteri (fun case_number result -> printf "Case $%i: %s\n" case_number result)
в данном случае всё понятно из форматной строки, именно потому не принципиально.
[16:46:41] sevenov вышел(а) из комнаты
[16:48:16] sevenov вошёл(а) в комнату
[17:18:32] sceptic вышел(а) из комнаты
[17:27:17] john вошёл(а) в комнату
[17:31:06] gds вышел(а) из комнаты
[17:45:36] <ermine> f[x]: как собрать результат выборки селекта?
[17:45:52] <ermine> каким-нить фолдингом хотелось бы
[17:47:19] <f[x]> предлагай варианты
[17:47:23] <f[x]> как это будет выглядеть?
[17:48:11] <f[x]> M.select db ~param:n (fun acc row -> ...) acc0 ?
[17:48:29] <ermine> вон в вике в примере - оно вызывает принтф как в List.iter
[17:48:40] <ermine> а у тебя в проектах как?
[17:49:12] <f[x]> либо обрабатывается налету, либо складываю в ref []
[17:49:27] <ermine> по идее фолдинг в sqlite3 несложен, там Rc.DONE указывает на конец результатов, значит надо синтаксис придумать
[17:50:09] <f[x]> ну он в любой дб не сложен так как для фолда важна только операция получения следующей записи
[17:50:36] <f[x]> можно ещё Enum возвращать, но тогда с областью жизни аккуратно надо
[17:51:53] <ermine> в постгресе/мускуле - это тьюпл или array
[17:52:09] <ermine> скорее array каждого ряда
[17:52:24] <f[x]> нет конечно
[17:52:27] <ermine> и функция что-то типа fetch stmt
[17:52:34] <ermine> больше никак
[17:52:38] <f[x]> да ну
[17:52:53] <f[x]> этот fetch добывает по ряду за раз
[17:52:57] <ermine> не люблю я ref []
[17:53:13] <f[x]> если в каких-то биндингах оно всё собирается в большой массив - то это проблемы биндингов
[17:53:59] <f[x]> вообщем с implementation проблем нет, главное чтобы использовать было удобно
[17:54:37] <f[x]> в принципе для c# я генерю IEnumerable<x> из результата
[17:55:06] <ermine> не, я имею в виду что массив - это массив одного ряда
[17:55:16] <ermine> а как ряды вытягиваются - это от либлы зависит
[17:56:40] <f[x]> а, ну это всё равно выдумки биндингов, в сишном api всё гораздо замороченней. и очень хорошо что наверх отдаётся массив
[17:57:50] <f[x]> вообщем я сейчас вижу два варианта - fold классический и extlib'овский Enum
[17:58:22] <ermine> а что там?
[17:58:35] <ermine> тип функции можно указать в -- @чтотам
[17:59:04] <ermine> я видела пока только один пример использования коммента - имя функции
[17:59:13] <ermine> может и другие ключи там могут быть :)
[17:59:35] <ermine> @select_talkers @fold
[17:59:45] <f[x]> ещё есть noparse
[18:00:06] <f[x]> можно сразу все варианты в разных модулях генерить
[18:00:34] <f[x]> а впрочем для prepared statements наверное надо будет переключиться на объекты - тогда просто методы дополнительные будут
[18:01:39] <f[x]> > а что там?
поинтеры на буфер каждого столбца куда дб будет складывать данные, это ж сишка
[18:02:58] <ermine> не понимаю как это сюда подходит
[18:03:43] <ermine> у меня резултат выборки выравнивается по столбцам, прежде чем отправиться в печать
[18:04:20] <ermine> а те пять "одинаковых" запросов я свела к двум
[18:07:03] <ermine> ну значит придется сейчас зажать себе нос и заюзать ref []
[18:10:49] gds вошёл(а) в комнату
[18:15:07] <gds> в последнее время для структур данных предоставляю fold или stream. оба интерфейса хороши. кроме того, поверх stream легко делается fold, но не наоборот.
[18:17:06] <ermine> о, stream тоже рулит
[18:17:45] <gds> stream в плане ресурсобезопасности рулит -- это не ленивый список, в котором можно где-нибудь забыть ссылку на его голову, таким образом собрав его кишки в памяти.
[18:18:12] <ermine> gds: стрим рулит когда не надо срочно из него вылезать без потери итератора
[18:18:26] <ermine> из фолда не вылезешь вообще
[18:18:45] animist вошёл(а) в комнату
[18:19:03] <gds> в схеме (и в окамле с delimited continuations олега киселёва) и из фолда можно легко вылезти, если я правильно помню.
[18:21:06] <f[x]> если бы эти delimcc ещё в нативе работали
[18:21:13] <gds> +100500
[18:21:26] <f[x]> иногда хочется вывернуть поток выполнения наизнанку, а никак.. аж зло берёт
[18:22:35] <f[x]> stream частично рулит в плане безопасности т.к. классический облом let ch = open_in file in let e = Enum.from (input_line ch) in close_in ch; e
[18:22:36] <ermine> а пчу не работает в нативе?
[18:22:38] <gds> может на camlp4 наваять что-нибудь, делающее в нужных местах current continuation? хотя, скорее всего, туплю.
[18:22:44] ermine матчасть не изучала
[18:22:54] <ermine> и почти не знает, о чем речь
[18:23:05] <gds> delimcc копирует кусок стека байткода туда-сюда, афаир
[18:23:13] <f[x]> угу
[18:23:47] <ermine> сишнее чоль?
[18:23:56] <gds> lj\palm_mute недавно (в плане постов) писал про continuations, стоит почитать.
[18:24:40] <ermine> ссылку дашь?
[18:25:08] ermine попользуется тем, что /me - единственная здесь дама...
[18:30:52] <gds> http://palm-mute.livejournal.com/16407.html
хотя у кого-то видел более понятное... а не помню.
но за последний месяц было прочитано десяток документаций на scheme, может где-то там.
[18:32:35] <gds> в принципе, можно реализовать это дело в монадном стиле, и будет работать в нативкоде, но не факт, что вся конструкция будет быстрее байткодных олеговских delimcc. "мы победили, но у победы какой-то странный вкус"
[18:44:03] <ermine> ых, лисп со схемой
[18:44:26] <ermine> надо бы какнить добраться и освоить наконец чонить посложнее чем (+ 1 3)
[18:45:45] diglan вошёл(а) в комнату
[18:51:09] <gds> для call/cc не обязательно учить лисп со схемой.
а для расширения кругозора -- вполне стоит.
но я его изучал весьма извратно: нужно было сообразить разметку, целевые качества которой я уже знал, и читал про лисп/схему с тем, чтобы понять, что у меня неправильно, что можно невозбранно упереть себе, а что ни в коем случае нельзя.
аццкий гибрид родился, сегодня думаю начинать кодить.
[18:51:37] <gds> extlib + инфиксные операторы -- это я буду использовать.
[18:52:37] <ermine> sexp?
[18:54:04] diglan вышел(а) из комнаты
[18:54:51] diglan вошёл(а) в комнату
[18:55:23] diglan вышел(а) из комнаты
[19:01:29] <gds> в целом да, s-expressions. не избыточно, как html/xml, и более обще, чем bbcode и вики-разметки, плюс макросы. (а функции/макросы на xml -- xslt -- знаю, видел арифметику на xslt. людям совершенно не обязательно _так_ извращаться в жизни, я считаю.)
[19:07:44] sceptic вошёл(а) в комнату
[19:23:28] troshenkin вошёл(а) в комнату
[19:26:45] troshenkin вышел(а) из комнаты: QIP Infium: Спокойное общение
[19:35:27] <ermine> скомпилила плагин talkers с sqlgg, осталось понять как активизировать его
[19:43:24] Vladimir Zapolskiy вошёл(а) в комнату
[19:43:45] Vladimir Zapolskiy вышел(а) из комнаты: offline
[19:53:23] <gds> надо бы оформить местечковые "labs" -- то, на что рано давать ссылку в "RelatedSoftware".
Как вариант, страница Labs с общим описанием и с подстраницами конкретных проектов?
[19:53:31] <gds> или не "Labs", а как-то по-другому?
[19:57:46] john вышел(а) из комнаты
[19:59:56] <ermine> у камля было хорошее слово - hump
[20:13:46] <gds> там -- то, на что не рано давать ссылку в RelatedSoftware, и, более того, то, что можно давать белым людям. Не хотелось бы ненамеренного смешения понятий.
[20:14:11] <f[x]> gds: примеры?
[20:15:50] <gds> по поводу labs или по поводу hump? если первое -- всякая хрень, которая только думается. второе -- всякий хоть как-нибудь рабочий софт (зачастую -- весьма прилично работающий). camlimages, sqlgg.
[20:16:34] <ermine> gds: ну тогда craps
[20:17:36] <f[x]> хм, обычно то что думается дальше моего компа не вылазит
[20:18:01] <f[x]> ну попробовать можно, тем более если ут ебя видимо есть конкретный кандидат
[20:18:51] <ermine> f[x]: у меня сульци в гите самый crapный crap
[20:19:04] <ermine> но ссылку давать можно
[20:19:08] <ermine> мне не жалко
[20:20:26] <ermine> хотя я бы стеснялась показывать такой код
[20:22:06] <gds> у меня два кандидата -- ocamllex_utf8_pos и та штука по разметке, спеку на которую (т.е. проект) неплохо бы показать разным людишкам, которые, очевидно, исключительно из-за своей убогости и ментальной ограниченности не читают чятик и не щупают вику.
[20:22:58] <f[x]> тогда наверное лучше как-то указывать "уровень развития" или группировать на RelatedSoftware
[20:23:18] <f[x]> и не создавать лишних страничек
[20:23:41] ermine начала запускать сульцю с тем плагином и смотрит на ошибки
[20:24:17] <ermine> Plugin talkers failed: Sqlite3.Error("Sqlite3.prepare: table talkers already exists")
[20:24:56] <ermine> а да, забыла про if not exists
[20:33:21] <ermine> в общем пашыт
[20:38:43] <ermine> уф, на сегодня всё
[20:38:44] <sceptic> А новую сульку уже можно пытаться собрать из git?
[20:40:05] <ermine> там в коде зашито куда заходить в конфу - в sulci@, больше никуда не зайдет
[20:40:49] <ermine> и для сборки теперь требует sqlgg
[20:46:25] f[x] теперь будет пиарить sulci на каждом углу :)
[20:48:07] <ermine> как неудачный пример использования sqlgg?
[20:49:08] <ermine> мне б еще наладить зависимость плагинов от sql файлов и в то же время не требовать пересоздания кода, если у юзера нету sqlgg
[20:49:38] <ermine> а так там в камлоплагине висит одно rule, которое генерит код
[20:55:18] <f[x]> читай в плагине какой нибудь спец-файл, если он есть - то ничего не генерить, git-describe не вызывать, etc
[20:57:43] <ermine> я подумаю над красивым решением
[20:58:17] <ermine> мне еще не ответили, пчу git describe перестало работать
[21:05:44] f[x] вышел(а) из комнаты
[21:20:10] animist вышел(а) из комнаты: Replaced by new connection
[21:20:14] animist вошёл(а) в комнату
[22:41:33] sevenov вышел(а) из комнаты: Replaced by new connection
[22:41:34] sevenov вошёл(а) в комнату
[23:22:27] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!