Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 3 ноября 2010< ^ >
ygrek установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | judge by commits, not comments | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+3
[00:00:50] serp256 вошёл(а) в комнату
[00:06:38] komar вышел(а) из комнаты
[00:23:05] arhibot вышел(а) из комнаты
[00:30:22] Kakadu вышел(а) из комнаты
[01:01:16] serp256 вышел(а) из комнаты
[01:20:06] ermine вышел(а) из комнаты
[01:46:51] myxomop87 вышел(а) из комнаты
[03:20:08] Typhon вышел(а) из комнаты
[04:51:58] zert вышел(а) из комнаты
[08:26:34] gds вошёл(а) в комнату
[08:33:05] iNode вошёл(а) в комнату
[08:39:02] f[x] вышел(а) из комнаты
[08:43:57] f[x] вошёл(а) в комнату
[09:52:50] ygrek вошёл(а) в комнату
[09:53:04] ygrek вышел(а) из комнаты
[10:10:38] SerP вошёл(а) в комнату
[10:22:43] ermine вошёл(а) в комнату
[10:25:17] Kakadu вошёл(а) в комнату
[10:41:20] myxomop87 вошёл(а) в комнату
[10:42:28] arhibot вошёл(а) в комнату
[10:55:32] Typhon вошёл(а) в комнату
[12:03:14] komar вошёл(а) в комнату
[12:16:14] zert вошёл(а) в комнату
[12:36:30] <Kakadu> gds: Вы ьуже раздумывали как будете хранить деревья разбора для своего языка? А именно типы выражений?
[12:37:01] <Kakadu> Я тут в хаксе хотел его аккуратно напечатать
[12:37:15] <Kakadu> а дерево оказалось не деревом, а графом
[12:38:07] <Kakadu> всё потому-что к выражениям припсывался тип. А выражениями были методв того-же класса и получалось зацикливание
[12:38:43] <Kakadu> такое ощущение что В.Сафонов был кое в чем прав когда говорил, что типы надо хранить в виду хэштаблицы
[12:39:00] <Kakadu> и  в AST должны быть просто ссылки а не сами типы
[12:39:31] <Kakadu> И тогда вы не будете иметь проблем с тем что-бы напечатать AST
[12:39:55] <Kakadu> а мне тут приходиться выкидывать deriving в общем случае и писать печаталку руками.
[13:07:04] <gds> Kakadu: как я понимаю, даже индуктивные типы type t1 = A of t2 and t2 = B of t1 тоже попадают под случай зацикливания?
[13:08:58] <Kakadu> падают и в дерайвинге. и даже в х-е
[13:10:18] <gds> то, что это падает, я понимаю.  Интересно про хеш-таблицы -- зачем они нужны?
[13:10:50] <Kakadu> понятно что тогда не будет циклов
[13:16:55] <gds> циклы в значениях, представляющих тип в ast?  По мне так -- пусть будут.  Разве что, самое простое представление, которое можно выдумать, не покатит, надо развязать.  Для индуктивных типов я бы завёл отображение type_identifier => type_body, и в каждом из их type_body был бы type_identifier (да хотя бы "t1" и "t2") (а лучше -- какой-нибудь "искусственный ключ", уникальный int например).
Если брать окамл, то ещё как-то надо представлять объектные и вариантные типы, которые "структурные".  Ну и рекурсию в типах (" as 'a" всякое).  Вот что в своём языке делать со структурной типизацией -- пока не думал, а рекурсивные типы пока не очень нужны.
Кстати, я бы не брал хеш-таблицу, она мутабельная, а с этим ещё проблем добавлять себе не советую.
[13:19:51] <Kakadu> Но если вводить для индуктивных типоы исскуственный ключ, то не логично ли для всех сразу?
[13:19:58] <gds> логично.
[13:20:13] <gds> но для [> `A | `B ] -- неизвестно, как и зачем.
[13:21:30] SerP вышел(а) из комнаты
[13:21:44] <Kakadu> я забыл в чем подвох с полиморфными вариантами?
[13:22:08] <gds> ну там структурная типизация, как и в объектах, а не номинальная (по именам).  Т.е. там может быть так, что тип есть, а имени нет.
[13:23:37] <Kakadu> а в обычных типах по именам разве?
[13:24:05] <Kakadu> как то не верится
[13:24:08] <gds> обычные типы -- базовые, индуктивные, записи -- имеют имена.  Впрочем да, не всегда -- туплы и стрелки выбиваются.  Даже не знаю.
[13:25:18] <gds> а хотя, блин...  про то, что мне не нужны рекурсивные типы...  если реализовывать в языке именно ооп, то любой метод, возвращающий "себя", будет иметь расширяемый тип, т.е. если его изложить в отрыве от объекта, тип будет "forall t:Type, t < Base, [t -> ] args -> t", где первое "t -> " отвечает за наличие this/self как неявного аргумента.  Ну или в окамле это будет записано как-то наподобие "t as 'a -> args -> 'a".
Поэтому -- на суд чятика -- классическое ООП ведь почти не нужно, и почти везде хватает записей, содержащих функции?
[13:26:25] <Typhon> подтипизация для записей тогда нужна.
[13:27:52] <gds> подтипизация записей -- согласен.  Да и сделать не сложно.  Т.е. если сделаю ООП без наследования, но с подтипизацией, по идее его хватит?
[13:29:00] <Kakadu> а не взвоют ли императивные программиты от такого ООП?
[13:29:34] <gds> императивные -- имхо нет, они так и делают уже (например, почти в любой реализации ООП/C).
[13:29:56] <gds> вот потому и спрашиваю :)
[13:29:59] <Typhon> luca cardelli, typeful programming "...although inheritance is more strictly related to behavior than typing). Subtyping over record-like types can emulate many properties of inheritance, but subtyping is a more abstract notion, because it applies to all types, and because it does not involve a built-in notion of methods."
[13:30:01] <gds> , что не знаю.
[13:30:48] <Typhon> типа, яйцеголовые говорят ок, так что делай :D
[13:31:42] <gds> да, для наследования нужна подтипизация, и наследование более строгая штука, тут спорить не буду.
Но имхо говорят другое: сколько бы ни делали подтипизацию, надо ещё отдельно доказывать, что это как бы является наследованием (что данная подтипизация соблюдает LSP).
[14:31:52] <gds> а есть что-нибудь типа Buffer, но полиморфное, а не только для char?  Например, на массивах.
[14:31:55] sdfgh153 вошёл(а) в комнату
[14:56:15] <f[x]> http://hg.ocaml.info/release/res/raw-file/release-3.2.0/README.txt
[15:02:04] <gds> f[x]: благодарю, оно.
[15:50:01] komar вышел(а) из комнаты
[16:05:05] sdfgh153 вышел(а) из комнаты
[16:41:07] ermine вышел(а) из комнаты
[16:49:25] sdfgh153 вошёл(а) в комнату
[16:51:10] <gds> господа, кто utf8 изнутри умеет?  http://pastebin.com/crxFUfnL -- видимо, там какие-то особенности формата utf8, что search_head вызывают для 0x80..0xBF, а сама search_head завершается для байтов не из 0x80..0xC1.
[16:51:11] iNode вышел(а) из комнаты
[17:09:10] komar вошёл(а) в комнату
[17:20:15] iNode вошёл(а) в комнату
[17:25:32] sdfgh153 вышел(а) из комнаты
[18:03:13] arhibot вышел(а) из комнаты
[18:05:40] komar вышел(а) из комнаты
[18:42:47] Kakadu вышел(а) из комнаты
[18:58:52] komar вошёл(а) в комнату
[19:24:38] Typhon вышел(а) из комнаты
[19:30:44] arhibot вошёл(а) в комнату
[19:33:53] Kakadu вошёл(а) в комнату
[20:08:48] arhibot вышел(а) из комнаты
[20:24:48] <gds> код, который я показывал выше, из camomile, относительно свежего.  Удивительно, не ожидал, что в том куске баг.  А именно, rfc3629 говорит, что "The octet values C0, C1, F5 to FF never appear", тогда как тот кусок кода считает, что символ, начинающийся с C0 или C1, является валидным символом и имеет длину 2 байта.
Кроме того, довольно странным решением является пропуск байтов, не являющихся utf8-символами (функция search_head), если ясно, что данная строка не является валидным utf8, но это уже на усмотрение автора.
[21:03:01] arhibot вошёл(а) в комнату
[21:03:10] komar вышел(а) из комнаты
[22:38:03] serp256 вошёл(а) в комнату
[22:50:19] serp256 вышел(а) из комнаты
[22:54:42] gds вышел(а) из комнаты
[23:01:11] serp256 вошёл(а) в комнату
[23:01:28] serp256 вышел(а) из комнаты
[23:12:22] <Kakadu> а с помощью чего можно получить такой вот xml?
      <text><![CDATA[RedHat]]></text>
[23:12:51] <Kakadu> xml-light кажется не вариант
[23:15:17] <ʇsʎɯ> tinyXML
[23:16:56] <Kakadu> это либа дл камла?
[23:17:04] <Kakadu> что-то не назодися
[23:17:10] <ʇsʎɯ> нет
[23:17:12] <Kakadu> или мне байндинги юзать?
[23:17:12] <ʇsʎɯ> не для камла
[23:17:19] <ʇsʎɯ> это я так ляпнул
[23:17:31] <ʇsʎɯ> cduce или чё-то такое есть ишшо
[23:17:38] <ʇsʎɯ> для камла вроде бы
[23:18:28] myxomop87 вышел(а) из комнаты
[23:54:39] Kakadu вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!