Home
Objective Caml
ocaml@conference.jabber.ru
Пятница, 26 августа 2011< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | http://camlunity.ru/ (теперь с git доступом!) | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ
Конфигурация комнаты
Участники комнаты

GMT+4
[00:25:14] ermine вышел(а) из комнаты
[00:27:12] gds вышел(а) из комнаты
[00:53:39] Typhon вошёл(а) в комнату
[01:29:30] Kakadu вышел(а) из комнаты
[02:29:48] Typhon вышел(а) из комнаты
[02:41:05] shaggie вышел(а) из комнаты
[03:38:29] letrec вошёл(а) в комнату
[03:38:37] letrec вышел(а) из комнаты
[03:38:53] letrec вошёл(а) в комнату
[04:49:44] ftrvxmtrx вошёл(а) в комнату
[04:51:13] letrec вышел(а) из комнаты
[06:30:47] delete_ вошёл(а) в комнату
[06:39:30] delete_ вышел(а) из комнаты
[08:32:57] Typhon вошёл(а) в комнату
[08:40:12] gds вошёл(а) в комнату
[08:50:54] iNode вышел(а) из комнаты
[09:00:24] gds вышел(а) из комнаты
[09:02:37] bobry вышел(а) из комнаты
[09:04:24] bobry вошёл(а) в комнату
[09:09:40] iNode вошёл(а) в комнату
[09:35:34] Typhon вышел(а) из комнаты
[09:57:55] Kakadu вошёл(а) в комнату
[10:12:49] bobry- вошёл(а) в комнату
[10:59:08] ermine вошёл(а) в комнату
[12:07:34] Typhon вошёл(а) в комнату
[12:56:31] <Typhon> https://github.com/tomahawkins/improve
[13:18:23] komar вошёл(а) в комнату
[14:07:45] <f[x]> йоу, как в этом шелле вывести нулевой байт?
[14:07:49] <f[x]> $'\x00' не работает
[14:08:09] <f[x]> реквестирую gds
[14:12:29] <Typhon> echo "\x00" вроде то, что нужно
[14:14:20] <Typhon> хм, хотя это я в zsh сделал
[14:15:17] <Typhon> в баше не то :-(
[14:16:56] gds вошёл(а) в комнату
[14:17:12] <gds> f[x]: решил?
[14:18:14] <gds> f[x]: а, я тоже решил, echo -ne '\0'.  ключевой момент -- -e.
[14:19:26] <Typhon> а что за "-e" ? почему я в man echo его не вижу? :-(
[14:19:41] bobry вышел(а) из комнаты
[14:19:41] bobry- вышел(а) из комнаты
[14:20:30] bobry- вошёл(а) в комнату
[14:21:59] <gds> Typhon: за последние два дня -- два человека удивляются башевским builtin'ам.  man bash, /BUILTIN, ...
[14:22:16] <gds> вывод: builtin'ы -- неочевидная штука.
[14:23:56] bobry вошёл(а) в комнату
[14:24:41] <Typhon> хм, да, в man bash у echo есть про -eE , а в man echo — нет
[14:27:48] <gds> гы, а у меня (сирани убунтэ) и в /bin/echo выдаётся, и в man echo есть.
[14:33:33] <gds> а первый случай непоняток -- человек подсовывать опции из man time в башевский time.  Выкрутились через то, что я сейчас практически палочкой-выручалочкой считаю -- /usr/bin/env time ... .  env -- спортсменка, комсомолка, окружение менять даёт, в путях ищет, вообще ня.  Но есть и вариант с $(which time), и с /usr/bin/time.
[15:03:00] <f[x]> gds: thx
[15:25:57] <bobry-> Typhon: -e говорит что в строке есть escape коды
[15:25:59] <bobry->      -e     enable interpretation of backslash escapes
[15:39:19] letrec вошёл(а) в комнату
[15:39:27] letrec вышел(а) из комнаты
[15:39:43] letrec вошёл(а) в комнату
[15:43:34] vshender вошёл(а) в комнату
[15:48:58] shaggie вошёл(а) в комнату
[15:49:05] <Typhon> bobry-: я в man bash прочёл это "в man bash у echo есть про -eE"
[16:09:11] Typhon вышел(а) из комнаты
[16:09:12] Typhon вошёл(а) в комнату
[16:41:17] Kakadu вышел(а) из комнаты
[18:07:11] akov12 вышел(а) из комнаты
[18:08:14] akov12 вошёл(а) в комнату
[18:12:40] akov12 вышел(а) из комнаты
[18:12:50] ƒ(£)=€ вошёл(а) в комнату
[18:14:26] ƒ(£)=€ вышел(а) из комнаты
[18:15:23] АК вошёл(а) в комнату
[18:36:16] shaggie вышел(а) из комнаты
[18:56:08] Typhon вышел(а) из комнаты
[19:12:59] bobry- вышел(а) из комнаты
[19:18:38] <letrec> http://blog.rastageeks.org/ocaml/article/type-fascism
[19:18:55] <letrec> там t используется или нет?
[19:20:06] <gds> статейка в ридоре есть, буду читать.  наверное даже до текущего вечера, и скажу.  однако, может кто уже прочитал или захочет..
[19:21:37] <letrec> применение полиморфных вариантов красивое, но вот с t непонятно как-то
[19:26:44] <gds> t -- тип реального значения.  в начале, может, и изоморфен unit (когда `Invalid).  его параметр -- подвид значения.
[19:27:49] <letrec> он инстанцируется разными типами в разных функциях или один и тот же везде?
[19:29:05] <letrec> вот в val tag_size : [< `Parsed | `Valid] t -> int он мог бы быть, например int?
[19:29:33] <letrec> т.е. я не понимаю в чём его фантомность
[19:35:05] <gds> фантомность в том, что значение приблизительно одно /на самом деле/, а тип (с учётом абстрактных типов) таки разный.
А может быть и так, что значение и тип кое-как зависят друг от друга.
В общем, абстрактные типы с параметрами -- это способ приписать типу какой-либо параметр так, чтобы типовые/модульные алиасы и прочая подтимизация не смогли довести конкретное 'a t до другого 'b t.
[19:35:35] <gds> *подтипизация, тьфут
[19:38:00] vshender вышел(а) из комнаты
[19:38:03] <letrec> в моём понимании фантомный тип это тип значения которого не создаются, а используются исключительно в сигнатурах
[19:38:08] <letrec> так?
[19:38:57] <letrec> для enforcement'а каких-то инвариантов
[19:39:30] vshender вошёл(а) в комнату
[19:39:49] <gds> а не знаю точно.  Для меня "фантомной" кажется вся конструкция.  Если понимать именно так -- то да, в значении с типом [< `Parsed | `Valid ] t таки не создаётся значение с типовым параметром [< `Parsed | `Valid ], в этом смысле фантомно.
[19:40:34] <letrec> а можешь привести пример значения типа [< `Parsed | `Valid ] t?
[19:41:35] <letrec> из такого значения само значение t можно вытащить?
[19:42:19] <letrec> а то я до абстрактных типов в окамле не дошёл ещё пока :)
[19:45:59] <gds> значение -- да хоть любое из значений типа
type 'a t = unit
[19:46:37] <gds> то есть, обвешать значение можно какими угодно параметрами, и за ними будет следить тот, кто следит за сигнатурами и абстрактными типами.
[19:50:09] <gds> или можно представить такую сигнатуру (рисую образно):
type 's t
val of_pos_int : int -> [> `Pos ] t
val of_neg_int : int -> [> `Neg ] t
val add : 'a t -> 'a t -> 'a t
val sub : 'a t -> 'b t -> [> `Pos | `Neg ] t
[19:53:14] <letrec> т.е. мы множество значений t разбиваем на 2 подмножества в первых 2х функциях?
[19:53:31] <letrec> а в 3ей нам знак пофиг
[19:53:58] <letrec> и оно будет работать со значениями из обеих подмножеств?
[19:55:08] <gds> в первых двух -- runtime failure в случае, если целое преобразуют в "не то".
в add -- знак точно сохраняется.
в sub -- знак неизвестен.
[19:55:36] <letrec> а почему рантайм?
[19:55:46] <letrec> статически нельзя проверить?
[19:58:27] <gds> надо как-то присовывать значения с тип 's t.  Как -- если тип абстрактный, то только через функции модуля.  Статически -- можно синтаксическое расширение написать, но оно будет очень специфическое.  Обычно подобный тип мало кому нужен.
А если значение с типом 's t уже есть, то остальные проверки статические.
[20:00:03] <letrec> ну, функция модуля по идее в случае несоблюдения инварианта должна исключения бросать и до применения твоих функций дело уже не дойдёт
[20:00:56] <gds> в случае of_*_int -- да, именно, но исключения -- в рантайме.  А если значение уже есть -- есть статические гарантии его кошерности.
[20:02:24] <letrec> да, я именно это и имел в виду
[20:02:58] <letrec> т.е. это не дело этих функций энфорсить кошерность значений, это дело конструктора значений
[20:04:07] <letrec> т.е. твои функции не partial, это конструкторы partial
[20:13:10] <gds> именно так.  Типизация строга до ональности -- если есть значение с типом, то всё работает/типизируется ровно так, как в имплементации / структуре модуля написано.  То есть, тут "выстраивание границ".  Делаем так, что значения имеют такой тип -- и можем использовать над ними нужные функции.
Однако у этой схемы есть и недостатки.
[20:44:34] Kakadu вошёл(а) в комнату
[21:09:26] letrec вышел(а) из комнаты
[21:27:32] ftrvxmtrx вышел(а) из комнаты
[21:28:09] ftrvxmtrx вошёл(а) в комнату
[22:23:51] vshender вышел(а) из комнаты
[22:56:02] ermine вышел(а) из комнаты
[23:17:08] Typhon вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!