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

GMT+4
[00:02:26] <gds> о, дак он же с монстрами (в числе которых lj\nivanych) сейчас делают крутую мощную штуку для распределённых вычислений и хранения данных.
[00:15:27] <gds> чорт, а там классные дискуссии :)
[00:15:40] <gds> хотел поспать, называется. фигушки.
[00:16:55] ygrek в rss +2 и спать
[00:20:18] ygrek вышел(а) из комнаты
[07:53:20] john вошёл(а) в комнату
[08:07:08] gds вышел(а) из комнаты
[08:46:16] daapp вошёл(а) в комнату
[08:58:43] gds вошёл(а) в комнату
[10:05:44] <gds> let ( $ ) f x = f x;; -- это является как бы "каноничным" определением для избавления от скобок в "f (g x)", или всё не так, а модно другое?
[10:17:18] ermine вышел(а) из комнаты
[10:26:28] f[x] вошёл(а) в комнату
[10:27:18] <f[x]> я & использую
[10:27:55] <gds> где-то с приоритетами лучше получается?
[10:28:29] <f[x]> не знаю, насчёт >> против |> - первое лучше именно из-за приоритетов
[10:30:57] <f[x]> вообще-то & у меня не так
[10:31:02] <f[x]> let (&) f g = function x -> f (g x)
[10:31:44] <f[x]> а $ это получается >> в другую сторону
[10:32:26] <f[x]> но приоритет у него явно кривой
[10:32:40] <f[x]> # let ($) f x = f x;;
val ( $ ) : ('a -> 'b) -> 'a -> 'b = <fun>
# print_endline $ string_of_int $ 2;;
Characters 16-29:
print_endline $ string_of_int $ 2;;
^^^^^^^^^^^^^
Error: This expression has type int -> string but is here used with type
string
# let (&) f x = f x;;
val ( & ) : ('a -> 'b) -> 'a -> 'b = <fun>
# print_endline & string_of_int & 2;;
2
- : unit = ()
[10:32:57] <gds> если ">>"-в-другую сторону обозначить "<<", то camlp4-расширения скажут превед, думаю.
[10:33:58] <f[x]> мда, а так удобней
[10:34:02] <gds> ассоциативность у $ левая, должна быть правая, я так понимаю?
[10:34:25] <f[x]> # let (&) f g = function x -> f (g x);;
val ( & ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun>
# (print_endline & string_of_int) 2;;
2
- : unit = ()
[10:34:30] <f[x]> приходится скобки писать
[10:34:54] <f[x]> да, видимо так
[10:34:57] <gds> ну так вот же:
# print_endline & string_of_int & 2;;
2
и без скобок.
[10:35:13] <f[x]> gds: я именно про это, что такое определение удобней
[10:36:17] <f[x]> они разные всё таки
[10:36:33] <f[x]> (print_endline & string_of_int);;
[10:38:29] <f[x]> т.е. одно удобней для применения к аргументу, другое для композиции
[10:39:50] <gds> таки да, разные.
одно -- комбинировать функции, другое -- просто синтаксическая штука.
для применения к аргументу вида f (g (h x))) <=> f & g & h & x есть смысл использовать
let ( & ) f x = f x
, так?
[10:39:58] <f[x]> грепнул исходники -- у меня везде для композиции используется
[10:40:10] <f[x]> угу
[10:40:27] <f[x]> но я в таком случае делаю x >> h >> g >> f :)
[10:49:45] <gds> ага, про такое знаем :)
я же сейчас страдаю оборачиванием некоторых функций ввода-вывода в [= `Ok of 'a | `Error of 'b ], част код вида:
value input ch str ofs len =
try
ret & input ch str ofs len
with
[ e -> err_exn e ]
;
тут имхо
input ch str ofs len >> ret
будет менее эстетично.
[10:59:25] <f[x]> пожалуй тут скобки вполне нормально выглядят
[10:59:42] <f[x]> эстетическое программирование..
[11:15:04] gds вышел(а) из комнаты: Replaced by new connection
[11:15:05] gds вошёл(а) в комнату
[11:25:24] <f[x]> fastcgi -- кроме ocamlnet есть альтернативы?
[11:32:11] <gds> только то, что гуглится: http://cocan.org/comparisons/web_application
когда я думаю про нормальные веб-приложения, обычно прихожу к мысли, что проще веб-сервер на самом окамле нарисовать (threads/lwt, пофиг). Но из-за отсутствия аццкой необходимости обычно руки не доходят.
[11:41:47] gds вышел(а) из комнаты
[11:42:08] gds вошёл(а) в комнату
[11:45:06] <f[x]> там живой только ocamlnet
[11:46:11] <f[x]> ну не знаю, проще ли веб-сервер писать. хотелось fcgi либу с минимум зависимостей, и желательно с поддержкой win
[11:46:56] <gds> fcgi/{unix+win} -- +1. не идеально-красиво, но было бы вполне рабоче.
[11:48:46] <f[x]> есть некий fcgi-ocaml-0.0, но с какими-то сишными биндингами
[11:52:41] <gds> посмотрел на fastcgi spec, вроде всё вполне описывается camlidl'ом без ручных биндингов.
это на случай, если имеющиеся окажутся некошерными.
[11:56:53] <f[x]> не понял, зачем camlidl?
[11:59:18] <gds> на случай, если имеющиеся [сишные биндинги] окажутся некошерными.
[12:00:10] ygrek вошёл(а) в комнату
[12:02:26] <f[x]> а, понял, есть стандартная сишная либа. Я думал про полностью камлевую реализацию.
[12:03:58] <gds> эээ. Спеку нашёл тут: http://fastcgi.com/devkit/doc/fcgi-spec.html . Видимо, я ошибочно нашёл спеку на сишную либу, а не на сам fastcgi api?
[12:04:10] <gds> конечно, чисто камлевая была бы гораздо лучше.
[12:05:11] <f[x]> fastcgi это протокол
[12:05:36] <f[x]> fcgiapp это сишная либа которая его реализует
[12:05:51] <f[x]> fcgi-ocaml это биндинг к этой либе
[12:07:11] <f[x]> ocamlnet реализует протокол чисто на камле
[12:09:37] <f[x]> а по линке спека на сам протокол, да
[12:10:12] <f[x]> но структуры там если присмотреться совсем не сишные, с полями переменной длины :)
[12:11:54] <gds> дада. это такой подарок желающим реализовать протокол.
[12:13:17] <gds> и интересно, как будет работа с FCGI_LISTENSOCK_FILENO выглядеть, учитывая стандартную виндовую реализацию Unix.file_descr.
[12:15:33] <gds> а с другой стороны, из ocamlnet выдрать, штоле.
[12:17:14] <f[x]> ну зачем выдирать, просто использовать
[12:17:39] <f[x]> я не помню, чем там закончилась история с ocamlnet/win - ты его допатчил до рабочего состояния?
[12:18:19] <gds> до компилируемого -- да. Но оно:
C:\ocaml\bin>netplex-admin.exe
Fatal error: exception Unix.Unix_error(_, "socket", "")
дальше руки не дошли.
[12:19:06] <f[x]> ясно..
[12:22:19] <gds> о. OCAMLRUNPARAM=b помог.
ошибка тут: let s = Unix.socket Unix.PF_UNIX stype 0 in
и с чего бы это... :]
[12:23:39] <f[x]> :)
[12:24:26] <f[x]> ну мне netplex не нужон
[12:25:36] <f[x]> правда в netcgi_fcgi есть стрёмный коммент
FIXME: Under M$win, the web server communicates with a FCGI script
that it launches by means of a named pipe [fd] (contrarily to the
spec). The requests are all sent through that pipe.
[12:30:29] ermine вошёл(а) в комнату
[12:33:05] <gds> в таком случае можно попробовать заюзать ocamlnet. с пропатченным компилятором и пропатченным ocamlnet, ха-хаа!
[12:34:30] <f[x]> лол
[12:35:05] <f[x]> я лучше буду тестить сразу на линуксе
[12:43:58] gds вышел(а) из комнаты: Replaced by new connection
[12:43:59] gds вошёл(а) в комнату
[12:49:11] ygrek вышел(а) из комнаты
[12:50:22] <gds> таки да, если уж пилить ocamlnet/win, то без рабочего примера не обойтись.
[13:33:11] sceptic вышел(а) из комнаты: Replaced by new connection
[13:33:15] sceptic вошёл(а) в комнату
[13:33:26] sceptic вышел(а) из комнаты
[13:33:36] sceptic вошёл(а) в комнату
[13:45:40] john вышел(а) из комнаты
[14:03:37] ygrek вошёл(а) в комнату
[14:34:46] daapp вышел(а) из комнаты
[14:46:00] john вошёл(а) в комнату
[15:15:42] john вышел(а) из комнаты
[16:32:01] sceptic вышел(а) из комнаты
[16:36:10] f[x] написал свой первый рабочий stream parser
[17:11:37] john вошёл(а) в комнату
[17:30:52] gds вышел(а) из комнаты
[18:09:43] ermine вышел(а) из комнаты: Replaced by new connection
[18:09:44] ermine вошёл(а) в комнату
[18:31:10] gds вошёл(а) в комнату
[18:52:02] <gds> "и вновь продолжается бой!" http://zabivator.livejournal.com/335255.html или http://community.livejournal.com/ru_caml/7689.html
[18:54:50] ygrek вышел(а) из комнаты
[19:03:26] f[x] вышел(а) из комнаты: Computer went to sleep
[19:03:58] sceptic вошёл(а) в комнату
[19:10:02] ermine вышел(а) из комнаты: Replaced by new connection
[19:10:04] ermine вошёл(а) в комнату
[19:15:15] john вышел(а) из комнаты: Replaced by new connection
[19:15:16] john вошёл(а) в комнату
[19:47:08] ygrek вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!