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 | judge by commits, not comments | ocaml мёртв, move on | Oh My God! They Killed Kamlp4! Bastards!
Конфигурация комнаты
Участники комнаты

GMT+4
[00:45:02] Kakadu вошёл(а) в комнату
[01:11:55] <Kakadu> здесь ктонить умеет обжимать витуху?
[01:12:08] <Kakadu> а то меня в #linux запустали
[01:12:41] <komar> Умеет.
[01:12:48] <Kakadu> ситуация
[01:13:02] <Kakadu> в универе из стены торчит витуха
[01:13:08] <Kakadu> её надо обжать
[01:13:18] <Kakadu> как обжато на втором конце - неизвестно
[01:13:22] <komar> Обжимной инструмент есть?
[01:13:27] <Kakadu> скорее всего - там втыкается в свитч
[01:13:32] <Kakadu> инструмент есть
[01:13:52] <komar> Современные сетевые карты умеют сами все определять.
[01:14:07] <komar> То есть на кроссовер-прямой можно не заморачиваться.
[01:14:37] <Kakadu> http://www.ekosmoscow.ru/img/vpimage2.jpg тот что слева?
[01:14:44] <komar> Обжимай бз-з-бс-о-бо-с-бк-к
[01:15:01] <komar> Любую из этих.
[01:15:24] <Kakadu> люую из трех?
[01:15:33] <komar> Их тут две.
[01:15:46] <Kakadu> на картинке две и третью ты написал
[01:16:41] <komar> Вообще, нужно просто смысл этого занятя понимать. Раньше на сетевухах было по 4 контакта, по схеме --+..+.. где минусы и плюсы — контакты, а точки — где их нету.
[01:16:56] <komar> И если поставить две сетевые карты друг перед другом, то кажется, что контакты не совпадают.
[01:16:57] <Kakadu> да, у меня инет так идет
[01:17:01] <komar> Поэтому обжимали кросовером.
[01:17:22] <komar> А, черт, синий в середину пихают.
[01:17:34] <komar> Меня не слушай, делай как там.
[01:17:43] <komar> Склероз, да.
[01:17:47] <Kakadu> на картинке слева?
[01:19:43] <Kakadu> вот если я обжал сажень кабеля с обоих концов, как на картинке слева, то нормально что довольно старый кмп и новый комп не пингуются?
[01:19:44] <komar> Хоть слева, хоть справа.
[01:19:54] <komar> Чтобы точно сказать, нужно знать, как на том конце сделано.
[01:20:06] <komar> Но если у тебя не совсем тупые сетевуха со свитчом, то должно заработать.
[01:20:28] <Kakadu> ну я тестить на новом компе буду
[01:20:33] <komar> КМП? WTF is КМП?
[01:20:53] <Kakadu> комп
[01:21:00] <Kakadu> очепятка
[01:21:34] <komar> Да, возможно такое.
[01:21:47] <Kakadu> значит есть шансон что у меня руки норм
[01:21:52] <komar> Если с обоих сторон «как слева», то это «прямой», а не «крос-овер».
[01:21:53] <Kakadu> тьфу, шанс
[01:25:12] <Kakadu> спасибо за разъяснение. я высываться перед завтрашним торжественным событием моего эпик фэйла
[01:25:13] Kakadu вышел(а) из комнаты
[01:38:08] gds вышел(а) из комнаты
[02:28:05] komar вышел(а) из комнаты: Replaced by new connection
[02:28:06] komar вошёл(а) в комнату
[02:54:48] Typhon вышел(а) из комнаты
[03:24:31] komar вышел(а) из комнаты
[07:44:55] iNode вошёл(а) в комнату
[09:06:16] gds вошёл(а) в комнату
[10:07:32] <gds> допёрло про Lwt.catch.  Одна причина, по которой Lwt.catch берёт fun () -> ..., это то, что в некоторых случаях ошибки могут быть реализованы через честные исключения.  Вторая причина -- чтобы сохранить туда-сюда портируемость с обычным кодом, для которого важно, когда выполнять действие, потенциально имеющее сайд-эффекты.
Или не угадал?
[10:12:24] arhibot вошёл(а) в комнату
[10:45:19] <gds> и как, блин, отлаживать код, состоящий из сотен комбинаторов, и фейлящий в глубине?..
[10:50:36] <gds> а хотя, я переволновался.  отладочная печать, како-бычно.
[10:53:28] komar вошёл(а) в комнату
[11:14:20] zert вошёл(а) в комнату
[11:14:42] <gds> ну да, обычная отладочная печать, printf "buf=%i\n%!" (Obj.magic buf).
value (break_chars : (char -> bool) -> iteratee char string) cpred =
  mapI Buffer.contents &
  break_fold
    cpred
    (fun buf c -> (Buffer.add_char buf c; buf))
    (Buffer.create 80)
;
буферочек создаётся один раз, при первом вызове, и всё серется в него.  срадь господдя!
[11:18:57] komar вышел(а) из комнаты
[11:26:04] ermine вошёл(а) в комнату
[11:31:44] Typhon вошёл(а) в комнату
[12:22:21] komar вошёл(а) в комнату
[12:25:04] <komar> > printf "buf=%i\n%!" (Obj.magic buf)
Шо это за особая, окамловая магия?
[12:25:59] <Typhon> Obj.magic это не часть окамла!
[12:26:20] <komar> Не, про Obj.magic я знаю.
[12:26:24] <komar> Я про все выражение в целом.
[12:26:29] <gds> это как бы сишная магия, но без перехода в си.
[12:27:15] <gds> но даже такой трюк иногда может вызвать сегфолт, как я представляю.
[12:28:17] <f[x]> ну каст в инт сегфолт не вызовет, а так это не опасней чем сишные биндинги
[13:17:38] arhibot вышел(а) из комнаты
[13:20:00] arhibot вошёл(а) в комнату
[13:29:59] komar вышел(а) из комнаты
[13:33:07] arhibot вышел(а) из комнаты
[15:05:29] komar вошёл(а) в комнату
[15:10:59] arhibot вошёл(а) в комнату
[15:15:55] Kakadu вошёл(а) в комнату
[15:37:35] <Kakadu> gds: Вы вчера начинали говорить о дикомти писания коллбэков к гую в байндингах и что-то было про правильную аллокацию колбэков. Можно к этомму вернуться?
[15:40:30] <gds> если будет желание, не "Вы", но пофиг.  Дело в том, что колбэки -- это такие же значения, и мусорщик имеет право их перемещать.  Если сохранять адрес, то мусорщик должен знать адрес, по которому сохранён адрес, чтобы поменять его, если значение будет перемещено.  Видимо, через global roots такое делается.
[15:42:19] <Kakadu>   static value * closure_f = NULL;
  if (closure_f == NULL)
          closure_f = caml_named_value("Hello callback");
  caml_callback(*closure_f, Val_unit);
[15:42:36] <Kakadu> чем плох этот код?
[15:43:04] <Kakadu> либо я что-то не понял глобально
[15:43:15] <gds> тем, что нужно будет регистрировать "Hello callback" на стороне окамла.
[15:44:38] <Kakadu> по-моему это не так страшно
[15:45:05] <gds> да, не страшно, но кривовато.
[15:45:34] <Kakadu> мне как-то очень грустно что я не могу разобраться с пасингом С++
[15:45:44] <Kakadu> Я как-то с этим слишком сильно застрял
[15:46:05] <Kakadu> а, что нить придумаю......................
[15:47:07] <gds> а с помощью тех же global roots на плюсах можно вроде оформить нормальный вызов окамловского кода (добавлять значение в конструкторе, удалять в деструкторе).
Впрочем, если ситуация такая, что медленно идёт, то может и вправду, лучше оставить named values.
[15:48:27] <Kakadu> я тут думаю, что может мне с парсингом подойдет хорошо pfff упоминавшийся вчера?
[15:49:34] <f[x]> ну pfff этот вырос из cocinelle (откуда же и yacfe) и автор тот же
[15:50:10] <Kakadu> может с ним проще разобраться, чем с yacfe?
[15:51:36] <f[x]> надо пробовать :)
[15:56:23] <f[x]> site-lib/camlp4/META:
    directory = "C:\\prog\\ocaml-3.11.0-mingw\\lib\\camlp4"
[16:12:01] <gds> штоэто
[16:17:41] <f[x]> это наш любимый ocamlfind + cygwin bash
[16:17:57] <gds> какая прелесть.
[16:18:05] <gds> расскажешь, в чём было дело?
[16:19:27] <f[x]> camlp4 -where возвращает строку с \r\n, а изощрённые баш-скрипты сборки ocamlfind этого не ожидают
[16:19:41] <f[x]> ну а дальше оно где-то по пути коверкается
[16:45:08] myxomop87 вошёл(а) в комнату
[16:45:57] <myxomop87> приветсвую, сейчас пытаюсь писать бота для ai-challenge и затерялся в полиморфных вариантах
[16:46:43] <myxomop87> type player = [`We | `Them]
type planet_owner = [`We | `Them | `Neutral]
вот там есть 2 типа, соотв-но оно не дает сравнить две переменный разных типов, пишет The second variant type does not allow tag(s) `Neutral
[16:47:02] <myxomop87> собственно как это можно разрулить ?
[16:47:32] <myxomop87> вообще жесть конечно, я думал полиморфные типы и нужны как раз для таких случаев, а оказывается что вообще непонятно что
[16:48:01] <Kakadu> а что значит сравнить?
[16:48:42] <Kakadu> паттернматчингом?
[16:48:57] <myxomop87> ну как, там вообще два объекта типа Планета и Корабль, у планеты мы имеем овнера, а у корабля плеера
[16:49:30] <myxomop87> т.е. я пишу if planet#owner = ship#player then ....
[16:51:42] <myxomop87> это в либе такие типы, конечно наверно вернее сделать у планеты тип player option и выкинуть все эти полморфные заморочки, но ведь в текущей ситуации должен быть выход ?
[16:52:47] <Kakadu> # type t1 = [`A | `B];;                    
type t1 = [ `A | `B ]
# type t2 = [ t1 | `C];;                  
type t2 = [ `A | `B | `C ]
# let x = `A and y = `B in match (x,y) with
  | (`A,`A) -> true | _ -> false;;        
- : bool = false
[16:53:45] <Kakadu> наверное объекты как-то мешают...
[16:55:29] <gds> myxomop87: делай "planet#owner = (ship#player :> planet_owner)"
[16:57:33] <gds> и вот по ссылке недавно писал про coercions: http://gds.livejournal.com/54767.html?thread=203247&format=light#t203247 , самый простой пример кода, который придумывается.  Ну, там, где "value () = my_sup_printer (my_sub_val :> my_sup);"
[16:58:48] <myxomop87> о! спасибо, это работает
[17:03:33] arhibot вышел(а) из комнаты
[17:15:14] <f[x]> myxomop87: думай типами:
val (=) : 'a -> 'a -> bool
planet#owner : planet_owner
ship#player : player
planet_owner -> player -> bool не унифицируется с 'a -> 'a -> bool
[17:15:34] <f[x]> но благодаря подтипизации coercion решает
[17:16:40] <gds> f[x]: кстати, напомнишь, где тебе приходилось делать двойной coercion?  (ну, вроде, первым было приведение типа.)
[17:18:20] <myxomop87> угу, хотя конечно необычно, я привык что типы приводить можно только к родителю
[17:21:02] <gds> это и есть приведение к надтипу.
[17:21:21] Typhon вышел(а) из комнаты
[17:22:07] <gds> добавить конструктор к вариантному типу = выбросить метод у объектного типа = создать надтип
[17:22:43] <gds> если чо, папеарю птсо: http://gds.livejournal.com/54767.html , там я про это тоже писал.
[17:28:43] iNode вышел(а) из комнаты
[17:30:42] gds вышел(а) из комнаты
[18:02:39] Kakadu вышел(а) из комнаты
[18:21:38] gds вошёл(а) в комнату
[18:24:17] <f[x]> гугл нашёл -> http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/2009/09/16.html#17:22:41.21101
[18:24:38] <f[x]> не уверен что я вспомню что это за код был..
[18:30:55] Kakadu вошёл(а) в комнату
[18:41:27] <Kakadu> кто-нибудь читал http://newstar.rinet.ru/~goga/tapl/ или англоязычный вариант?
[18:42:58] <gds> я читал некоторые нужные главы на английском (когда перевода ещё не было), и всю (или почти всю) на русском.
[18:43:32] <Kakadu> просто у меня В.Сафонов в универе жаловался что западные ученые не знают что такое типы
[18:43:51] <Kakadu> определить тип или нет могут, а сказать что это такое вообще - нет
[18:44:01] <Kakadu> планирует книгу писать)
[18:44:07] <Kakadu> вот мне интересно стало
[18:46:07] <gds> что-то он не с теми учёными говорил, наверное.  Или хотел что-то другое от них.  Или сам как-то по-особенному понимает типы.  Хотя с уверенностью сказать нельзя.  Будем ждать книгу, следовательно.
[19:11:52] komar вышел(а) из комнаты: Replaced by new connection
[19:11:53] komar вошёл(а) в комнату
[19:18:33] <gds> оффтопик слегка.  Подскажите пожалуйста, подсветка синтаксиса в емаксе -- по каким ключевым словам искать, как её отключить нафиг?  Или может кто-нибудь подскажет?
[19:18:46] zert вышел(а) из комнаты
[19:27:12] zert вошёл(а) в комнату
[19:35:01] ʇsʎɯ вошёл(а) в комнату
[19:36:32] Typhon вошёл(а) в комнату
[19:38:44] <Typhon> gds, faces, емнип
[19:39:38] <Typhon> Kakadu, странный чувак. btw, в ру_лямбда или ру_декларатив, не так давно кто-то спрашивал литературу по типам. кучу всего в комментах накидали. помимо пирса, есть еще лука карделли (как-то так)
[19:41:10] <Typhon> gds, global-font-lock-mode нужно в nil поставить и должно всё ок быть. но мне непонятно зачем, цвета это так няшно! =^.^=
[19:46:59] gds вышел(а) из комнаты: Replaced by new connection
[19:47:00] gds вошёл(а) в комнату
[19:51:50] komar вышел(а) из комнаты
[19:56:18] <gds> няшно -- да, когда работают.  У меня сирани регекспы(?) наломались на конструкции кавычка-палка-кавычка ("|"), и так и поехало остальное в исходнике подсвечиваться неправильно, как строка.  Не настроены они, выходит.  Но лень копать.
Делаю как по манулу, M-x set-variable RET var RET value RET, но даже при закрытии-открытии буфера цвета всё равно есть.  Непонятно.
[20:00:07] komar вошёл(а) в комнату
[20:26:00] gds вышел(а) из комнаты: Replaced by new connection
[20:26:02] gds вошёл(а) в комнату
[20:55:44] <Typhon> (setq x nil) -- в init.el или еще куда
[20:55:59] <Typhon> (setq-default x nil) еще
[21:00:27] <gds> в ~/.emacs вписал
(setq global-font-lock-mode nil)
(setq-default global-font-lock-mode nil)
но всё равно, почему-то при загрузке .ml-файла оно ставит major mode = lisp (на что мне в принципе положить), но таки раскрашивает исподник.
т.е. либо то, либо другое, по идее, надо бы удушить.  Впрочем, некритично оно, если уж такой гемор.
[21:03:49] <Typhon> еще можно (add-to-list 'auto-mode-alist '("\\.ml\\'" . text-mode)) например, но это как-то неправильно :-)
[21:04:23] <Typhon> а lisp-mode ты видимо сам где-то проставляешь ml файлам, выкинуть тоже можно
[21:05:57] <gds> в ~/.emacs никаких упоминаний .ml-файлов, точно.
А вот про text-mode -- хоть и неправильно, но всё работает отлично, благодарю :)
[21:07:49] <Typhon> лучше по lisp-mode погрепать, а то вдруг там "\\*\\" для него стоит :-)
[21:08:47] Typhon сегодня получил третье издание Кормена (introduction to algorithms) и теперь будет совсем умный ^_^
[21:08:58] arhibot вошёл(а) в комнату
[21:08:58] <Typhon> если прочитаю все эти штуки :-)
[21:53:28] Typhon вышел(а) из комнаты
[21:57:39] Kakadu вышел(а) из комнаты
[22:02:43] <ʇsʎɯ> бедный парень, он не знал, что вышел 4-ый том TAOCP...
[22:36:09] ʇsʎɯ вышел(а) из комнаты
[22:37:24] komar вышел(а) из комнаты
[23:24:18] gds вышел(а) из комнаты
[23:25:26] komar вошёл(а) в комнату
[23:44:14] ygrek вошёл(а) в комнату
[23:58:09] arhibot вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!