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

GMT+4
[00:08:13] dzhon вышел(а) из комнаты
[00:20:42] Andrey Popp вошёл(а) в комнату
[00:31:43] Kakadu вышел(а) из комнаты
[01:35:15] bobry вышел(а) из комнаты
[01:38:26] komar вышел(а) из комнаты
[02:40:32] f[x] вышел(а) из комнаты: Computer went to sleep
[04:23:50] letrec вошёл(а) в комнату
[06:24:58] letrec вышел(а) из комнаты
[09:10:11] bobry вошёл(а) в комнату
[09:41:09] dzhon вошёл(а) в комнату
[10:26:34] Kakadu вошёл(а) в комнату
[10:27:33] Kakadu вошёл(а) в комнату
[11:07:14] bobry вошёл(а) в комнату
[11:13:10] ftrvxmtrx вышел(а) из комнаты
[11:25:48] <bobry> камло проектам надо всячески избегать гитхаба
[11:25:57] <bobry> так ведь и популярным можно стать, как х-ль
[11:45:01] <gds> знакомому плюсовику дали тестовое задание, состоящее в том числе из написания велосипедной очереди приоритетов.  спрашивает, что бы я использовал, массив или список для хранения.  отправил в вику на статью про skew heap, обосновал O-характеристики.  чото молчит.
[11:46:07] <bobry> skew heaps клевые, в самом начале окасаки вроде как
[11:46:43] <bobry> на плюсах сдается мне это будет не 20 строчек, как на камле — х-ле
[11:47:02] <gds> ага, и даже для плюсов несложно сделать, но сходу не знаю, как правильно жить с тамошним, как бы сказать, мусорщиком.
[11:47:13] <bobry> которого нет
[11:47:14] <bobry> лол
[11:49:08] <gds> как-то управляют памятью, вот я про это.  Какой-то reference counting хотя бы должен быть.  Впрочем, узнавать про это нет ни малейшего желания.  И так кучу времени причащался функциональщиной, чтобы развидеть то, чем занимался раньше.
[11:49:30] <Kakadu> в кути есть некотороый мусощик
[11:49:30] <bobry> а, в смысле в проекте куда эта очередь понадобилась
[11:49:51] <bobry> gds: ты писал на плюсах? noway ..
[11:50:23] <gds> не, вроде не в проекте, а в самих плюсеках что-то должно быть, какие-то {shared,auto}_ptr, но я совсем забыл, а то и не знал.
[11:51:38] <gds> писал раньше, в 2001г штоле.  точнее, писал плотно на сишечьке, кое-где использовал ооп, кое-где шаблоны, но мне это упорно не нравилось.  и вот, в пидошной эхе, которую я тогда модерил, периодически были срачи.  ну вот, и луговский подсадил меня на камло, сам того не заметив.
[11:55:50] <gds> но в чём я точно не законтачен -- в ооп-паттернах.  теперь хоть от этого не надо мыть моск.
[11:56:15] bobry вышел(а) из комнаты
[11:56:35] bobry вошёл(а) в комнату
[12:00:46] <bobry> gds: а ты для вебов на камле не пишешь?
[12:00:54] <bobry> мне интересно, ocsigen вообще можно пользовать?
[12:01:23] <gds> для вебов пишу, но не настолько, чтобы ocsigen был нужен/приемлем.  Однако, чую, предстоит через полгода, поэтому тоже интересно.
[12:01:43] <bobry> просто ocamlnet пользуешь чтоли?
[12:02:05] <gds> просто свою либу, которая итератами парсит http.
[12:02:15] <bobry> ох, крутой пасан
[12:02:56] <bobry> руки чешутся написать в рассылку что на forge пора уже выпилить хостинг scm
[12:03:04] <gds> там ничего крутого нет.  https://bitbucket.org/gds/amall/src/
[12:03:08] <bobry> а то получается свой маленький гадюшник про который никто не знает
[12:03:15] <bobry> вещь в себе
[12:03:21] <bobry> s/себе/верблюде
[12:04:29] <gds> тогда и битбакет выпиливай, и гиториус.
[12:04:51] <bobry> не, битбакет еще ок
[12:04:56] <bobry> а вот гиториус давно пора
[12:05:12] <bobry> в смысле никто не будет регаться на forge чтобы заслать тебе баг
[12:05:21] <bobry> никто не будет регаться чтобы заслатб тебе патч
[12:05:24] <bobry> enjoy your shit
[12:07:07] <gds> есть контакты авторов, их мыло, этого хватает.
[12:08:03] <bobry> это тоже неудобно
[12:08:13] <bobry> мне таким образом только один раз ответили
[12:08:19] <bobry> и никто не знает что "баг" уже зарепорчен
[12:08:57] <gds> потому что авторы нормальные должны быть.  иначе -- форк на твой любимый хостинг и всё.
[12:10:32] dzhon вышел(а) из комнаты: Replaced by new connection
[12:10:32] dzhon вошёл(а) в комнату
[12:12:41] dzhon вышел(а) из комнаты
[12:21:30] Andrey Popp вышел(а) из комнаты
[12:49:33] dzhon вошёл(а) в комнату
[12:58:54] ftrvxmtrx вошёл(а) в комнату
[13:02:03] ermine вошёл(а) в комнату
[13:03:53] komar вошёл(а) в комнату
[13:44:09] Savik вошёл(а) в комнату
[13:44:50] <Savik> няшки, а что случилось с http://ocaml.spb.ru/ ? :(
[13:44:59] shaggie вошёл(а) в комнату
[13:45:32] dzhon вышел(а) из комнаты: Replaced by new connection
[13:45:32] dzhon вошёл(а) в комнату
[14:08:52] <bobry> Savik: лежит
[14:23:36] <f[x]> няшки переехали в h-l@c.j.r!
[14:38:06] <Kakadu> f[x] опять дело говорит
[14:38:18] <gds> мимими
[14:38:50] <f[x]> уняня!
[14:39:25] <gds> отставить кодить унюню всякую!
[14:40:05] f[x] сейчас вообще не кодит, а админит то что накодил, от чего пребывает в скверном расположении духов
[14:41:00] <bobry> f[x]: покодь барбару?
[14:42:08] <f[x]> не
[14:42:13] <f[x]> не сейчас
[14:53:42] Savik вышел(а) из комнаты: Disconnected: connection closed
[14:56:12] <gds> эх, видели бы вы, в какой код я буду генерить шелл-дсл...  Будет даже позабористее аутоконфа.  И тоже, чтобы не обманывать, нужно будет снимать атрибут readable с этих файлов.
[15:01:00] <f[x]> uu
[15:18:29] dzhon вышел(а) из комнаты
[15:18:50] dzhon вошёл(а) в комнату
[15:23:08] Typhon вошёл(а) в комнату
[15:39:29] <bobry> gds: показывай уже
[15:40:55] <gds> bobry: http://paste.in.ua/3685/raw/
[15:42:46] <Kakadu> https://www.linux.org.ru/wiki/en/Development#a_.D0.A1_.D1.87.D0.B5.D0.B3.D0.BE_.D0.BD.D0.B0.D1.87.D0.B8.D0.BD.D0.B0.D1.82.D1.8C_.D0.B8.D0.B7.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_OCaml.3F
может надо пофиксить содержание как-нибудь
[16:50:16] dzhon вышел(а) из комнаты: Replaced by new connection
[16:50:16] dzhon вошёл(а) в комнату
[16:53:17] letrec вошёл(а) в комнату
[17:16:33] <Kakadu> letrec: Ты представляешь себе fparsec?
[17:19:55] <Kakadu> или кто тут у нас главный фадиезник?
[17:27:45] <gds> интересно вот.  Есть два примера сигнатуры -- http://paste.in.ua/3689/ -- разница в исходнике только в этом.  Тем не менее, без " ! 'a 'b . " выводятся конкретные типы, а с " ! 'a 'b . " -- общие, причём без изменения кода.  Я-то думал, что let-привязки должны генерализировать типы по максимуму, и думал, что " ! 'a 'b . " нужно только для полиморфной рекурсии, которой в примере нет.  Вот те раз.
[18:23:13] dzhon вышел(а) из комнаты: Replaced by new connection
[18:23:14] dzhon вошёл(а) в комнату
[18:30:46] bobry вышел(а) из комнаты
[18:37:58] <letrec> Kakadu: не, у меня по диезу знания чисто теоретические
[18:43:13] <letrec> Kakadu: а что ты на лоровской вике хочешь пофиксить?
[18:44:02] <Kakadu> просто давать устаревшую ссылку на странный мануал, который мало кто читает это нет тру вроде
[18:47:23] <letrec> мне вообще непонятно, что окамл там делает (я не то, чтобы против)
[18:48:56] dzhon вышел(а) из комнаты
[19:11:09] <gds> f[x]: в своё время ты разобрался с weak hashtbl?
[19:11:38] <gds> точнее, вопрос ко всем, но f[x] явно думал об этом.
[19:11:56] <f[x]> не, не разбирался
[19:16:28] <letrec> вот на такое http://ocaml.paste.pro/5140460 компилятор жалуется, я правильно понимаю, что a' t и b' t надо вытаскивать в отдельную сигнатуру, ею параметризовывать модуль и указывать что-то типа sharing constraint, чтобы тайпчекер понял, что t в a' t и b' t это один и тот же тип, просто параметризован разными типами?
[19:21:48] <gds> да что такое с этими тёлками происходит вообще.  то одна, то другая ( http://andrzejn.livejournal.com/1974448.html?thread=12252592#t12252592 ).  у вас такого не наблюдается?
[19:22:45] <gds> letrec: агаа!  функторы захотел!
[19:24:26] <letrec> gds: ага, синтаксис у них малость тяжеловесный
[19:24:28] <gds> если захотел, то хоти правильно.
module type FUNCTOR_1_t = sig type 'a t val map : ('a -> 'b) -> 'a t -> 'b t end
[19:24:47] <Kakadu> gds: всё правильно написал. Блондинки же.
[19:25:09] <gds> letrec: я про теориекатегорные функторы имел ввиду.  Их захотел?
[19:26:26] <gds> Kakadu: это-то да, но почему за пару дней уже вторая, хотя раньше тёлки как-то обходили стороной.  вот и думаю, не глобальное ли это.
[19:26:28] <letrec> нет, просто камловые
[19:26:48] <letrec> куда там КТ
[19:27:44] <Kakadu> gds: если будет третий раз, то я скажу что не нормально
[19:32:01] <gds> letrec: да а чо, map поддерживать и всё, собственно, как описал в сигнатурке выше.  вот тебе и функтор.  только не попадайся на то, что конкретный тип данных обязан являться функтором (>=1), и обязан являться максимум одним функтором (<=1).  В общем случае может быть и не-функториальным по какому-то параметру, кофунктором по какому-то параметру, а в частных случаях (в большинстве) нахрен не нужно будет эту хрень тащить в реальный код.  достаточно просто знать, что оно есть / может быть.
[19:32:22] <letrec> gds: я правильно понимаю, что type 'a t вводит в область видимости параметризованный тип и имя параметра вообще по барабану (только имя t играет роль) и 'a в val map : ('a -> 'b) -> 'a t -> 'b t никак не связано с 'a в type 'a t?
[19:32:43] <gds> letrec: правильно.  и два t не покатят.
[19:33:31] <gds> и вообще, 'a 'b весьма локальны.  даже в пределах одной функции порой бывают недопонимания, когда компилятор не связывает (и, по идее, не должен связывать) разные 'a.
[19:34:42] <letrec> gds: т.е. функторность у нас опять же вытекает из структурной типизированности модулей и ограничивать модуль сигнатурой как имплементить тайпкласс в хаскеле совершенно ни к чему?
[19:38:24] <gds> letrec: ограничивать модуль сигнатурой я бы советовал только тогда, когда эта сигнатура, по условиям задачи, является и должна являться полной, и никаких значений, кроме описанных, не должно просочиться наружу.
а функторность -- в частных случаях вытекает из наличия map.  То есть, если есть модуль с описанной мной выше сигнатурой, то везде, где нужен функтор (в смысле ТК), его можно передать.  Но это частные случаи.  Бывают, например, туплы, которые функторы по каждому их компоненту.  Тогда, если используешь функторы как часть логики, имеет смысл наплодить модулей наподобие Map.Functor_over_{keys,values}.
[19:38:37] <gds> s/функторность/функториальность/
[19:39:39] <gds> ну и пример с туплами не связан с примером с Map.
[19:42:05] <letrec> т.е. в подобной сигнатуре смысл есть, если мы пишем функтор, который предоставляет какую-то функциональность основываясь на том, что ему передадут что-то функториальное?
[19:43:10] <letrec> чтобы выразить факт зависимости от функториальности типов
[19:43:15] <letrec> не нагнал?
[19:47:28] <letrec> и структурность типизации модулей избавляет нас от необходимости вручную прописывать инстансы как в хаскеле в том случае, если модуль уже реализует необходимую сигнатуру
[19:49:47] <gds> если пишем функтор и используем указанную сигнатуру для аргумента -- всё именно так обстоит.
только вот необходимость в функторах (в смысле ТК) как-то не очень велика.  разве что для слишком общих алгоритмов.
[19:51:55] <letrec> я функтор использую как пример самого тощего тайпкласса
[19:52:19] <letrec> пытаюсь транслировать интуицию с тайпклассов на функторы
[19:53:07] ftrvxmtrx вышел(а) из комнаты
[19:59:57] Kakadu вышел(а) из комнаты
[20:02:26] Kakadu вышел(а) из комнаты
[20:18:31] Andrey Popp вошёл(а) в комнату
[20:34:20] <gds> letrec: но и недостатки тоже есть в функторах, а именно, не очень хорошая расширяемость.  поэтому в кадастре у меня будет свой fmap, с этим самим и этими самыми.  типа-динамическая типизация, но безопасно.
[20:39:19] <letrec> gds: а как именно их расширять не получается?
[20:44:13] <gds> да по-разному.  не добавить параметр типу, из t 'a не сделать t 'a 'b.  в случае добавления функции в исходный модуль требуется либо чтобы его не ограничивали нигде, либо иметь исходный модуль для видимости функции.  если добавлять функцию в функтор, то либо делать явно новый функтор с этой функцией (который include Functor(Module), в целом), либо исправлять исходный функтор.  ещё какие-то проблемы были, из-за которых я парвел (свой велосипед про message passing) исправил, убрав всё из-под функтора над типа-IO (но не вспомню конкретно, в чём дело было, хоть и пытался).
[21:04:51] dzhon вошёл(а) в комнату
[21:12:08] f[x] вошёл(а) в комнату
[21:36:43] letrec вышел(а) из комнаты
[22:08:47] shaggie вышел(а) из комнаты
[22:10:21] <gds> мда, какие-то гадты маломощные.  только и позволяют, что провести простые связи между типами конструктора вариантного типа и типом результата, равного этому конструктору.
[22:25:43] ftrvxmtrx вошёл(а) в комнату
[22:39:08] <bobry> gds: ты про камло 3.13?
[22:39:26] <bobry> кстати можно как нить в камло тайп классы эмулировать? object type?
[22:39:29] <gds> я про любые способы закодить gadts.
[22:39:57] <bobry> а что тебе еще от них надо?
[22:40:11] <gds> чтобы хранили кое-какую инфу о типах ещё.
[22:41:38] <bobry> например?
[22:42:48] <gds> какой это тип, вот чо.  А то есть Xxx of 'a, и попробуй угадай.
[22:43:15] <bobry> чтобы конструкторы генерили значения разных типов или шо?
[22:43:22] bobry мало спал, поэтому думает с трудом
[22:45:34] <gds> чтобы в значении было кое-что описано про то, как и откуда его генерили, и был доступ к как бы зависимому типу.  Например, если есть тип type t 'a = [ Val of 'a | List of 'a ], и если этот List 'a имеет тип t (list 'x), то хочется понять это и получить доступ к list 'x.  Но это, видимо, existential types уже получаются.  Вот и не хватает gadt.
[22:46:35] <gds> тайпклассы можно эмулировать.  Об этом говорили выше, там и про функторы было, и про кадастр.  Можно и на объектах, только надо будет их расширять непонятно как.  У меня же "информация о типе" мутабельна, расширяется откуда угодно.
[22:46:53] Kakadu вошёл(а) в комнату
[22:52:02] <bobry> gds: а у нас в вике про это нету?
[22:52:22] <bobry> насчет gadt, а зачем тебе это? в смысле какая изначальная мотивация
[22:52:28] <gds> у нас в вике нет примерно 98% моих знаний.  это плохо?
[22:52:43] Kakadu вышел(а) из комнаты
[22:53:48] <bobry> очень
[22:53:57] <bobry> spread the word :)
[22:54:51] <gds> жаль только, что времени мало.
gadt -- попробовать в деле, конечно же.  Там больше внутренних гарантий, которые можно использовать.  То есть, сигнатуры можно частично не писать даже в пределах модуля, где объявлен конкретный тип.  А вот как это всё использовать более продвинуто -- ой не знаю.  Вот чешу репку.
[22:55:48] Kakadu вошёл(а) в комнату
[22:56:48] Kakadu вышел(а) из комнаты: Logged out
[22:56:50] Kakadu вошёл(а) в комнату
[22:59:11] <gds> а, с другой стороны, попробовал с туториалом по итератам -- так непонятно, нужно ли.  Сколько спланировал -- столько описал.  Фидбека нет, поэтому потом повешу в публичное место (в ещё более публичное, чем репка), и успокоюсь.
Да и вообще, "многия знания -- многия печали".  Как их искать, если они все будут и их будет много?  Тоже непонятно.  Структуризировать -- лень.  Более того, многое будет казаться очевидным для многих, поэтому не будут читать.  Какие-то перлы из глубин выуживать -- не вариант.
[22:59:14] Kakadu вышел(а) из комнаты: Logged out
[22:59:17] Kakadu вошёл(а) в комнату
[22:59:27] Kakadu вышел(а) из комнаты
[22:59:57] <bobry> gds: признаюсь честно -- я пока не добрался до туториала, ибо сессия прижимает :(
[23:00:07] <bobry> но он первый в моем списке на почитать как только это безумие закончится
[23:00:54] <gds> ну, куда слать отзывы -- знаешь, вот и ок.
а вот что делать со сраными типами -- это не знаю и это не ок.
[23:03:17] <gds> вот, разве что, надо бы блоггинг более обширный организовать.  но вот 1. вижу/читаю других людей -- они риальни крутые, а я, так, до песочницы добрался и радуюсь, криво, 2. надо оформлять относительно разумно -- не будешь же дампы сознания скидывать.
[23:04:10] Kakadu вошёл(а) в комнату
[23:38:36] komar вышел(а) из комнаты
[23:40:56] komar вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!