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

GMT+4
[00:00:54] Typhon вошёл(а) в комнату
[00:18:41] ermine вышел(а) из комнаты
[00:52:17] shaggie вышел(а) из комнаты
[01:27:27] shaggie вошёл(а) в комнату
[02:23:25] <Typhon> ygrek, не осознал, зачем млдонкей при старте пытается куда-то запросы слать (два адреса, 1 tcp, 1 udp). я же ещё никаких торрентов не добавлял.
[02:28:41] ygrek вышел(а) из комнаты
[03:16:36] Typhon вышел(а) из комнаты
[03:54:22] zinid вошёл(а) в комнату
[04:54:09] shaggie вышел(а) из комнаты
[09:19:35] Kakadu вошёл(а) в комнату
[09:53:15] ermine вошёл(а) в комнату
[09:55:06] digimmortal вошёл(а) в комнату
[10:08:12] <gds> Warning 4: this pattern-matching is fragile.
It will remain exhaustive when characters are added to type string.
[11:00:00] <gds> а чего оно не догадывается, что аргументы закончились?  --  http://paste.in.ua/2898/
[11:10:37] ermine вышел(а) из комнаты
[11:15:29] digimmortal вышел(а) из комнаты
[11:18:14] digimmortal вошёл(а) в комнату
[11:36:09] <bobry> module LE : (module type of BE)
[11:36:18] <bobry> приятные штуки все таки в 3.12 добавили :)
[11:39:33] <gds> я такие вещи делал по-другому: module type CommonType = sig .. end; module LE : CommonType; module BE : CommonType.  Чотче, сигнатура в одном месте и ограничивает оба модуля, а не "сигнатура одного ограничивает другой".
[11:40:36] <bobry> да я название не придумал для CommonType
[11:40:43] <bobry> а в питере уже почти сутки льет <_<
[11:42:50] <bobry> блин. так хочется аналог питоновского struct'a -- чтобы сишные структуры объявлять в камле и читать / писать
[11:44:30] <gds> смотря каким протоколом читать/писать.
[11:45:09] <gds> то есть, Marshal есть.
[11:45:30] <bobry> ну мне надо бы ip пакеты распаковывать
[11:45:34] <gds> bitstring
[11:46:08] <bobry> ого какая штука. спасибо :0
[11:47:06] <bobry> я правильно понимаю что оно в обе стороны может?
[11:47:19] <gds> кстати, в камловики надо, наверное, сгруппировать средства "по задачам".  То есть: "Если надо:
[...]
Разобрать сишную структуру:
  - bitstring
"
[11:47:22] <gds> по идее -- да.
[11:48:28] <bobry> ну. в идеале это должен делать forge :)
[11:48:34] <bobry> у него вроде есть теги
[12:05:47] <gds> теги те, которые там, не очень общи.  ну хз.
[12:06:40] <bobry> кстати gds, может таки перейдем на какой нить генератор статики? а то не очень удобно пользовать gh интерфейс
[12:07:29] <gds> я использую гитхаб только пипизодически, поэтому лично я не вижу особой нужды.  А так -- может и надо.
[12:08:10] <gds> вот можно было бы всё гитхабное генерить и класть на camlunity.ru/readonlywiki/ , да и то, гемор.
[12:16:20] <gds> а вот что-то типа implicit values или тайпклассов мне бы помогло в текущей работе: сейчас у меня "сервисы" выдавали ответ в json -- ну, Json_type.t.  А для некоторых случаев изредка надо не только клиенту Json_type.t отдавать, но и в базу кое-какие коды возвратов / тексты ошибок писать (часто -- генерируемых автоматически на основании структуры json'а).  Я-то сделал абстрактный тип "ответ", который в том числе из json создаю (а иногда не только из json, но и из нужных кодов / текстов), поменял его в структурах данных где надо, но пришлось везде, где его выдаю или обрабатываю, менять.  Дифф на пиццот строчек вышел, работы на часа полтора (учитывая, что не везде сразу очевидно, откуда старый Json_type.t тянется).
[12:16:44] <gds> спасло бы, если бы сразу сделал абстрактный тип для ответа.  Но везде такое не предусмотришь.
[12:48:46] komar вышел(а) из комнаты: Replaced by new connection
[12:48:47] komar вошёл(а) в комнату
[12:55:20] digimmortal вышел(а) из комнаты
[13:48:33] ermine вошёл(а) в комнату
[13:51:13] ygrek вошёл(а) в комнату
[13:55:03] <ygrek> > кстати, в камловики надо, наверное, сгруппировать средства "по задачам"
отличная идея
[13:57:05] <gds> уточню, что имею ввиду.  "Если Вам нужно сделать xxx, то берите yyy.  Если Вы работаете с данными, то: если Вы работаете с qqq, то берите eee, если же rrr, то ttt".  Какая-то иерархия нужна таки.  Ведь типичные задачи, решаемые программированием, вполне группируются.  Ну, 50 категорий максимум.
[13:58:59] <gds> и с комментариями типа:
если работаете с json, можно взять:
- json-wheel (Json_type.t, разбор-генерация в рантайме)
- json-static (camlp4-генерация преобразований между Json_type.t и окамловскими типами)
- atdgen (обновил собой json-static)
[14:00:07] <ygrek> угу
[14:00:35] <ygrek> и давать не просто то что слышлаи - а то что пробовали и оно работает
[14:03:12] <zinid> atdgen рулит
[14:03:24] <zinid> почти как asn1 :)
[14:03:40] <zinid> такой asn1 лайт я бы сказал ;)
[14:05:42] <gds> то, что слышали краем уха, давать можно, но строго отдельно (как-то выделить, хоть и шрифтом).
[14:28:30] <gds> правильно ли я понимаю, что по возможности подтипизации входного аргумента сейчас, со введением первоклассных модулей, сравняли модули-аргументы и объекты-аргументы?
[14:30:34] <gds> следующий вопрос: How_to_make_it_with_OCaml -- длинновато для названия статьи.  Давайте идеи, только не "howto".
[14:31:38] <ygrek> gds: ToolForTheJob?
[14:31:49] <ygrek> LibraryReference
[14:31:59] <gds> первое -- по нраву.  второе -- не только библиотеки же.
[14:36:42] shaggie вошёл(а) в комнату
[14:37:20] ygrek вышел(а) из комнаты
[14:50:34] ygrek вошёл(а) в комнату
[15:01:33] digimmortal вошёл(а) в комнату
[15:05:18] digimmortal вышел(а) из комнаты
[15:08:43] digimmortal вошёл(а) в комнату
[17:39:16] <gds> заметил, что в последнее время часто пишу "module QWE = (НужныйМодуль : sig type qweqwe; end);" для того, чтобы узнать, к чему сейчас прибинден модуль "НужныйМодуль".  Это следствие того, что я делаю что-то не так.  Есть идейки?
[17:43:57] <gds> а, и это только в компилируемом.  В топлевеле вообще, при работе с модулем каждая 5ая команда это "module Q = НужныйМодуль;", чтобы сигнатурку вывело, ну и "Q.somefunc;" для вывода типа нужной функции.
[17:45:57] <bobry> камлу бы не помешал hugs-like топлевел кстати
[17:46:00] <bobry> :t <expr> например
[17:46:07] <bobry> и :l вместо #load
[17:46:12] <bobry> из того что наболело :)
[17:48:08] <gds> :t expr сокращено до expr
[17:48:51] <gds> про #load -- разное там, #use vs #load vs #require.  сходу не знаю, как правильно.
с другой стороны, есть и емакс, и разные прикольные, по описаниям, топлевелы.
[17:50:05] zinid вышел(а) из комнаты
[18:39:00] <bobry> товарищи, вопрос такой -- могу я сделать *временный* module type
[18:39:12] <bobry> возвращаясь к module LE : (module type of BE)
[18:39:39] <bobry> допустим я объявлю в .mli CommonType, как и посоветовал gds, но я бы не хоетл чтобы он был доступен в пространстве имен модуля
[18:39:43] <bobry> можно как нить его скрыть?
[19:12:17] <gds> bobry: 1. зачем скрывать?  Если кто-то будет делать функтор, этот тип будет полезен.  2. если сделать module type CommonType = ... ; module BE = ... ; module LE = ... внутри module Temp, то можно будет потом сделать module LE = Temp.LE; module BE = Temp.BE
[19:12:51] <bobry> но тогда module Temp будет доступен :)
[19:13:08] <bobry> вообще, я решил оставить CommonType, так что вопрос уже чисто теоретический
[19:16:33] <gds> а тебя сильно волнует, будет ли оно доступно?  Я забыл, когда в последний раз .mli писал.  Вот такое вот шоке.
[19:17:26] <gds> и круто, что оставил CommonType, только лучше его поименовать по-нормальному, у меня было образное, тупое имя.
[19:18:18] <bobry> ну я обозвал BINARY :0
[19:18:23] <bobry> шобы в тему
[19:18:38] <bobry> gds: а почему mli не пишешь?
[19:18:47] <gds> а вообще хз.  Если делать доступным оба модуля, то либо должен быть какой-то module type, либо явно выписывать сигнатуры.  Может, если не нравится, что "одно яичко ниже другого висит", то может и module type of покатит.
BINARY -- одобряю.
[19:19:55] <bobry> я вот думаю, может bitstring с поддержкой oasis'a перетащить в camlunity?
[19:20:18] <gds> mli -- гемор потому, что в последнее время было очень мало ошибок, связанных с выдачей лишнего, относительно количества гемора, требуемого на поддержание mli.  Пишу не слишком модульно вот, а то, что модульно, очень часто меняется.  Адские условия, как сказали бы труЪ функциональщики.  И никаких статических гарантий.
[19:26:38] ermine заценила стиль кодинга module M : sig ..... end = struct .... end
[19:26:54] <bobry> ermine: также размашисто как gds?
[19:26:57] <ermine> вроде даже понравилось
[19:28:01] <ermine> а mli юзаю когда хочу сокрыть часть функций
[19:28:25] <ermine> а вообще mli ускоряет компиляж
[19:29:37] <gds> ermine: смотри:
module F
  (
    A1
     :
       sig
          type q
          ;
       end
  )
=
  struct
    value f
     :
      A1.q -> A1.q
     =
      fun q ->
        q
    ;
  end
;
[19:30:09] <ermine> жуть
[19:30:47] <gds> удобно редактировать.
[19:31:06] <bobry> в чем gds прав так это в том что это хорошо читается -- все видно :)
[19:31:48] <ermine> плохо читается
[19:32:24] <ermine> слишком много внимания отвлекается на пунктуацию
[19:32:30] <bobry> ну требует привыкания конечно, но в целом not bad
[19:33:02] <gds> ошибиться можно, только если дурной совсем или точно-точно пора спать.  А если так, грамм 500 водочного эквивалента выдул, так и кодить вполне таки можно, чо.  Если поставить вопрос по-другому, то "если и через год встретил код, то исправить можно без включения мозга", что то же самое.
[19:35:41] <ermine> код, который правится раз в 12 месяцев, вообще-то не очень-то нужный кодэ
[19:36:11] <ermine> он что-то типа let _ = print_endline "Hello, bye!"
[19:36:26] <ermine> поправить через год только содержимое строчки
[19:38:26] <ermine> вот посмотрим на sqlgg, когда там последний раз был коммит?
[19:39:17] <ermine> ой, даже недавно, значит таки нужный код
[19:40:43] <gds> нет связи между "нужен" и "как часто правится".  Если кто найдёт связь -- покажу строки ocamlc, специально выберу.
[19:51:43] <ermine> gds: жизнь в репке должна кипеть, а не покрываться музейной пылью
[19:51:56] ermine грустно подумала про свои музейные проекты
[19:52:16] <gds> мне жизнь в репке ничего не должна, мне код должен работать.
[20:14:40] <bobry> товарищи, а почему это если я в .mli пишу вот такое http://paste.in.ua/2900/ <http://paste.in.ua/2900/> то модули BE и LE остаются пустыми,  хотя в .ml у меня есть определение для BINARY
[20:20:10] <gds> потому что, если есть .mli, он кагбэ является сигнатурой для .ml.  Точные правила есть, но пока не нужны.  Пока ясно, что "чото абстрактное, хз что".
[20:20:51] <bobry> но я же в .ml пишу что такое BINARY
[20:20:57] <bobry> и оно после компиляции не видно
[20:20:58] <bobry> странно прямо
[20:21:36] <gds> патамушта .mli ограничивает .ml так же, как sig .. end ограничивает соответствующий struct .. end.
[20:22:17] <bobry> ауч
[20:23:07] <gds> ну а какие варианты были?  Допустим, если мы исключим из рассмотрения магею.
[20:23:52] <bobry> компилятор парсит .mli -- видит что для BINARY нет реализации, идет в .ml -- берет определение сигнатуры и накаладывает его на BE и LE
[20:24:13] <gds> а как абстрактные модули / типы / значения тогда делать?
[20:24:34] <gds> (это не вопрос, а, скорее, мысленный эксперимент.  понятно, магею найти можно.)
[20:25:11] <bobry> да, я понял что зашел в тупик :)
[21:11:55] Typhon вошёл(а) в комнату
[21:13:47] <bobry> блин, что то не могу сообразить что нужно в _tags написать чтобы заюзать bitstring?
[21:14:29] digimmortal вышел(а) из комнаты
[21:39:16] <ermine> а полиморфные варианты - типы можно юзать без private?
[21:40:14] <ermine> type a = [`A|`B]
type b = (private) [<a>|`B]
[21:44:24] <ermine> видимо нельзя без привата, компилятор ругается, что тип остался небиндиченным
[21:50:18] <bobry> ermine: а зачем тебе явно говорить private/
[21:50:22] <bobry> чтобы его совсем не было видно?
[21:51:28] <ermine> а оно у тебя разве компилится без привата?
[21:53:49] <bobry> оно у меня и с приватом чета не компилится
[21:54:08] <bobry> <a> это специальный синтаксис?
[21:55:05] <ermine> [< a > `B ]
[21:55:31] <bobry> так, похоже пайап лишний
[21:55:50] <bobry> без привата и правда не компилится
[21:56:44] ermine гордо смотрит на bobry
[21:56:55] <bobry> :)
[23:35:07] Kakadu вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!