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

GMT+3
[00:56:08] ermine вышел(а) из комнаты
[01:23:27] sceptic вышел(а) из комнаты
[01:26:24] sceptic вошёл(а) в комнату
[01:26:59] sceptic вышел(а) из комнаты
[01:27:19] sceptic вошёл(а) в комнату
[02:09:03] Typhon вышел(а) из комнаты
[02:15:19] ygrek вышел(а) из комнаты
[03:02:53] daapp вошёл(а) в комнату
[07:28:21] daapp вышел(а) из комнаты
[07:31:58] iNode вышел(а) из комнаты
[07:39:40] ermine вошёл(а) в комнату
[08:01:03] iNode вошёл(а) в комнату
[08:41:22] Sergey Plaksin вошёл(а) в комнату
[08:57:20] Sergey Plaksin вышел(а) из комнаты
[08:58:56] gds вошёл(а) в комнату
[09:18:36] <gds> ygrek: а как это так у тебя получилось, что в пределах class logger методы имеют типы с 'a?  или это ненастоящее определение?
type q = < debug : 'a pr >;;
Error: Unbound type parameter 'a
[09:34:05] Typhon вошёл(а) в комнату
[09:42:21] <gds> Typhon: http://gdsfh.dyndns.org/kamlo/Typing , но кривовато описал (с точки зрения русского языка).
[09:55:38] <Typhon> gds: главное, что понятно :)
[10:05:10] ygrek вошёл(а) в комнату
[10:13:36] <Typhon> а вот непонятно другое (http://paste.in.ua/346/) -- почему в первом варианте тип не может быть обобщен, а в остальных может
[10:30:46] gds вышел(а) из комнаты
[10:36:15] Sergey Plaksin вошёл(а) в комнату
[10:43:34] <Sergey Plaksin> мета есть
[10:43:39] <Sergey Plaksin> для deriving
[10:43:48] <Sergey Plaksin> вроде у меня пашет
[10:45:48] <Sergey Plaksin> http://pastebin.com/m285a8c17 - насчет версии правда не знаю :-)
[11:03:32] f[x] вошёл(а) в комнату
[11:04:35] <f[x]> ёлки, psi жжёт, я уже двое суток сижу думаю чего в конфе так тихо - а мне просто сообщения не доставлялись.
[11:06:04] <f[x]> gds: это toplevel так тип выводит - а по коду -
type 'a pr = ?exn:exn -> ('a, unit, string, unit) format4 -> 'a
class logger facil =
let perform f =
  fun ?exn fmt -> match exn with
    | Some exn -> ksprintf (fun s -> f facil (s ^ " : exn " ^ Exn.str exn)) fmt
    | None -> ksprintf (f facil) fmt
in
object
method debug : 'a. 'a pr = perform debug_s
method warn : 'a. 'a pr = perform warn_s
method info : 'a. 'a pr = perform info_s
method error : 'a. 'a pr = perform error_s
end
[11:08:46] gds вошёл(а) в комнату
[11:09:25] <f[x]> Sergey Plaksin: угу, спасибо, я добавил в репо
[11:11:44] <f[x]> кстати у меня получилось что cma зависит от num, раньше этого не было видно т.к. num.cma просто вкомпиливалась в deriving.cma, но в нативе такой фокус всё равно не пройдёт
[11:18:07] <f[x]> Typhon: value restriction, imho
[11:18:29] <f[x]> впрочему на '_a всегда можно говорить value restriction - не прогадаешь :)
[11:19:09] <gds> ну да, значение ведь restricted :)
[11:22:03] <f[x]> gds: правильно я понимаю что в 3.12 можно будет этот пример из ЖЖ писать без промежуточного рекорда - просто аннотировав полиморфную функцию?
[11:22:57] <Typhon> я скорее не понимаю, почему в одном случае функция restricted и "ждет" первого применения, чтобы мономорфной (так?)  сделаться, а в других полиморфной остается.
[11:23:46] <Typhon> (что-то я про value restriction читал, но то ли не понял, то ли забыл :( )
[11:26:26] <gds> f[x]: как я понял, из того, что будет точно, будет полиморфная рекурсия (то есть, вызов себя с другим типом).  Точно не знаю, но, надеюсь, будет возможность указать не только полиморфный тип для функции-себя (что принципиально для полиморфной рекурсии), но и полиморфный тип аргумента.  (если делать всё прямо, то разумно сделать именно так)
[11:29:40] <gds> Typhon: дописал в статью ссылку на книгу и главу, где объясняется value restriction.  Почему разница -- потому что в случае List.length >> is_zero выражением является применение аргумента к функции, тогда как в let ( >> ) f g x = .. результатом является лямбда-абстракция: let ( >> ) = fun f -> ...
[11:32:30] <Typhon> о, я на книга параллельно наткнулся и главу открыл :)
[11:33:31] <Typhon> *книгу
[11:52:29] daapp вошёл(а) в комнату
[12:02:19] <f[x]> камловский mantis нужно читать для поднятия настроения, например 4979, как оно с такими багами вообще работает - непонятно
[12:07:22] <gds> ага, мило :)
[12:48:18] <gds> "Майкрофт (Mycroft 1984) и Мейртенс (Meertens 1983) предложили полиморфное правило типизации, позволяющее рекурсивным вызовам рекурсивной функции изнутри ее собственного тела конкретизироваться различными типами. Было показано, что в этом расширении, известном как Исчисление Милнера-Майкрофта, задача реконструкции типов неразрешима (Hengelin 1993, и, независимо от него, Kfoury, Tiuryn and Urzyczyn 1993a)" [tapl]
так и знал, что дело в какой-то подобной причине.
[13:05:39] <f[x]> в "реконструкции типов"?
[13:05:42] <f[x]> а что это такое?
[13:08:28] <gds> согласно терминологии tapl, это процесс определения типа нетипизированного выражения.
[13:12:13] <gds> изначально в окамле хотели сделать так, как в классических ML: чтобы валидная программа компилировалась даже в случае, когда из неё уберут все аннотации типов (вида "(значение : тип)").   Потом появились объекты и полиморфные вариантные типы, и пришлось забить на этот принцип (то есть, теперь аннотации типов важны для типизации).
[13:16:57] <gds> то есть, к чему я это: в окамле уже нет нужды в том, чтобы реконструкция была разрешима, так как есть аннотации типов, и можно уже смело добавлять разные гламурные фишечки вроде полиморфной рекурсии, не боясь порушить разрешимость реконструкции.
[13:17:46] <f[x]> понятно
[13:18:30] <f[x]> без объектов и полиморфных вариантов было бы грустно, за выразительность надо платить
[13:20:19] <gds> ага.  редкие аннотации типов для компилируемости и более частые аннотации для локализации ошибок типизации -- вполне приемлемая плата, я считаю.
[13:39:55] f[x] вышел(а) из комнаты
[14:57:04] sceptic вышел(а) из комнаты
[15:00:37] daapp вышел(а) из комнаты
[15:00:46] sceptic вошёл(а) в комнату
[15:04:21] f[x] вошёл(а) в комнату
[16:18:54] Typhon вышел(а) из комнаты
[16:24:26] Typhon вошёл(а) в комнату
[17:16:02] iNode вышел(а) из комнаты
[17:29:47] gds вышел(а) из комнаты
[17:56:34] shoroh-net вошёл(а) в комнату
[18:04:48] shoroh-net вышел(а) из комнаты
[18:06:24] shoroh-net вошёл(а) в комнату
[18:22:49] shoroh-net вышел(а) из комнаты
[19:31:10] Typhon вышел(а) из комнаты
[19:43:37] gds вошёл(а) в комнату
[19:46:54] zert вошёл(а) в комнату
[19:49:54] gds вышел(а) из комнаты: Replaced by new connection
[19:49:56] gds вошёл(а) в комнату
[19:55:17] Sergey Plaksin вышел(а) из комнаты
[20:41:52] Typhon вошёл(а) в комнату
[20:48:24] Typhon вышел(а) из комнаты: Replaced by new connection
[20:48:27] Typhon вошёл(а) в комнату
[21:08:18] sceptic вышел(а) из комнаты
[21:11:07] sceptic вошёл(а) в комнату
[21:16:25] gds вышел(а) из комнаты: Replaced by new connection
[21:16:27] gds вошёл(а) в комнату
[21:23:16] digital_curse вошёл(а) в комнату
[21:52:56] iNode вошёл(а) в комнату
[22:17:59] zert вышел(а) из комнаты
[23:05:27] ygrek вышел(а) из комнаты
[23:05:35] ygrek вошёл(а) в комнату
[23:54:14] ermine вышел(а) из комнаты
[23:55:11] ermine вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!