Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 22 марта 2010< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | voice по запросу | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+3
[00:17:24] gds вышел(а) из комнаты
[00:17:27] Kakadu вошёл(а) в комнату
[00:17:53] <Kakadu> я туплю: как запустить camldebug в emacs?
[00:18:12] <Kakadu> он не дает пробел ввести в camldebug murlock
[00:21:25] <Typhon> ну ты M-x camldebug RET FILE :)
[00:21:56] <Kakadu> что такое RET FILE?
[00:22:09] <Kakadu> а всёравно
[00:22:15] <Kakadu> он пробел не дает поставить
[00:22:20] <Kakadu> после g
[00:23:06] <Kakadu> [Sole completion] говорит
[00:23:19] <Typhon> RET -- ентер :) жмешь энтер, он предлагает имя ввести
[00:23:48] <Kakadu> ООО
[00:23:56] <Kakadu> магия! спасибо
[00:26:34] <Typhon> еще если tuareg-mode используешь круто посмотреть в tuareg.el keymap -- я для себя много полезного нашел, а также избавился от велосипеда самописного :)
[00:26:55] <Kakadu> посмтрю
[00:51:05] ermine вышел(а) из комнаты
[00:58:32] Kakadu вышел(а) из комнаты
[01:55:51] <Typhon> gds: не появилось уверенности, что стоит пихать околоинсталляторное файло в репку оверблда, и если пихать то куда. поэтому пока собрал в кучку что есть, с комментами. глянь, и потом дальше можно думать: http://acs.cuprum.ru/upload/make-install.zip
[02:23:02] ygrek вышел(а) из комнаты
[03:52:51] Typhon вышел(а) из комнаты
[09:05:31] gds вошёл(а) в комнату
[09:44:01] serp256 вошёл(а) в комнату
[09:48:56] serp256 вышел(а) из комнаты
[09:49:07] serp256 вошёл(а) в комнату
[09:52:43] sceptic вышел(а) из комнаты
[10:17:25] gds вышел(а) из комнаты
[10:17:36] gds вошёл(а) в комнату
[10:27:38] ygrek вошёл(а) в комнату
[11:20:51] valexey_ вошёл(а) в комнату
[11:27:45] ermine вошёл(а) в комнату
[11:45:51] f[x] вошёл(а) в комнату
[12:09:53] Typhon вошёл(а) в комнату
[12:13:02] Mon вошёл(а) в комнату
[12:45:00] Mon вышел(а) из комнаты
[12:47:24] ygrek вышел(а) из комнаты
[12:48:43] Mon вошёл(а) в комнату
[12:53:02] Mon вышел(а) из комнаты: offline
[12:54:02] Mon вошёл(а) в комнату
[13:22:53] Mon вышел(а) из комнаты
[13:23:02] Mon вошёл(а) в комнату
[13:23:22] Mon вышел(а) из комнаты
[13:23:30] Mon вошёл(а) в комнату
[13:28:26] Mon вышел(а) из комнаты: offline
[13:46:53] Mon вошёл(а) в комнату
[13:55:13] Kakadu вошёл(а) в комнату
[13:56:12] Mon вышел(а) из комнаты
[13:57:54] Mon вошёл(а) в комнату
[14:09:02] ygrek вошёл(а) в комнату
[14:10:49] Mon вышел(а) из комнаты
[14:11:39] Mon вошёл(а) в комнату
[14:28:12] <Typhon> непонятно, почему oasis "uses ... ocamlbuild/OCamlMakefile/OMake for building" вместо чего-то одного
[14:30:57] <gds> лично я не взялся бы переписывать make-образное говно (omake, ocamlmakefile) к одному какому-то стандарту.  Проще запускать omake/make по нужде, если хочется скомпилировать софтину.
(хотя, может быть, я совсем не понял, о чём речь)
[14:32:06] <Typhon> да, я про то, что круто было бы все-таки иметь один стандарт, но переписывать никому не хочется, видимо
[14:34:09] <gds> да, круто было бы.  Если ocamlbuild будут допиливать (или хотя бы сделают централизованное место раздачи МегаПлагина для всех нужд), то он вполне подойдёт как будущий стандарт.
[14:44:18] Typhon вышел(а) из комнаты
[15:01:15] <f[x]> кстати в 3.12 в ocamlbuild будет плагин для ocamlfind'а из коробки
[15:02:02] <gds> круто.
[15:02:33] <f[x]> ага
[15:02:52] <f[x]> надо только его потестить до релиза чтобы не было "как всегда"
[15:04:00] <gds> думаю, может попробовать 3.12 в оверблде?  как его брать -- по умолчанию именно свежак выдастся?
[15:04:35] <gds> потестить, да, из тех же соображений, чтобы не было "как всегда" :)
[15:06:31] <f[x]> в trunk
[15:16:55] <ermine> f[x]: а что делает плагин?
[15:17:42] <ermine> само читает META файлы?
[15:19:09] <f[x]> вызывает ocamlfind
[15:19:27] <f[x]> аналог того что в вики
[15:19:34] <ermine> э
[15:19:51] ermine разочарована
[15:20:02] <ermine> он же заменяет компилятор
[15:20:28] <gds> а нафига читать META-файлы, если есть стандартный апи для работы с ocamlfind (а именно, вызов ocamlfind)?
[15:20:53] f[x] константирует у ermine нездоровую страсть к велосипедам :)
[15:21:07] <f[x]> не заменяет, а оборачивает
[15:21:28] <f[x]> * констатирует
[15:25:26] <ermine> а пчу камлофинд не включат в дистрибутив камла?
[15:26:17] <gds> потому что инриа не хочет за него отвечать, как минимум.
[15:27:14] <ermine> а за плагин хочет отвечать как максимум?
[15:27:23] <f[x]> ermine: ты ещё спроси почему они баги по пять лет фиксят
[15:27:36] <gds> отвечать за плагин проще.
[15:31:12] <gds> кстати, идея потестить 3.12 была чудо как хороша -- оно хочет tcl/tk 8.5 вместо 8.4, да и ещё какая-то гадость всплывёт, видимо.
[15:45:57] valexey_ вышел(а) из комнаты
[15:47:46] gds вышел(а) из комнаты
[15:47:49] gds вошёл(а) в комнату
[16:05:35] cf7olnzecka вошёл(а) в комнату
[16:05:45] cf7olnzecka вышел(а) из комнаты
[16:30:12] j7zza2o вошёл(а) в комнату
[16:30:13] j7zza2o вышел(а) из комнаты
[17:23:45] valexey_ вошёл(а) в комнату
[17:29:55] <gds> и мы побежали: http://caml.inria.fr/mantis/view.php?id=5007
[17:33:18] gds вышел(а) из комнаты
[17:35:39] <f[x]> http://lambda-the-ultimate.org/node/3863
[18:22:01] gdsfh вошёл(а) в комнату
[18:23:28] <gdsfh> плохо, что милнер не дожил до моей реализации алгоритма хиндли-милнера :]
[18:31:06] gdsfh вышел(а) из комнаты
[18:32:02] gds вошёл(а) в комнату
[18:56:31] Kakadu вышел(а) из комнаты
[19:13:26] f[x] только что сообразил что привычный хаселлюгам режим - это let rec ... and ... and ... до конца файла - вида http://paste.org.ru/?w85kew
[19:19:29] <gds> хе, кстати да.  При желании можно сообразить какое-нибудь расширение типа pa_bad_habits, заодно и их аннотации типов для значений верхнего уровня прикрутить, и паттерн-матчинг по аргументам, ну все поняли примерно, о чём я.
[19:20:35] <valexey_> не сообразил, а подсказали :-)
[19:20:58] <valexey_> собственно матчинг по аргументам даже в ерланге есть.
[19:22:52] <gds> я имел ввиду матчинг вида
fac 0 = 1
fac n = ...
А так, если что, есть
let rec fac = function 0 -> 1 | n -> ...
[19:23:53] <valexey_> я именно про это и говорил.
[19:25:32] <gds> ок!11
с другой стороны, такой матчинг, может, и соответствует математическим определениям функции (декларативным), но, с точки зрения ошибкозащищённости и поддерживаемости, имхо, он сливает.
[19:26:17] <valexey_> почему же?
[19:26:43] <valexey_> тебе никто не даст их раскидать в произвольном порядке по исходнику.
[19:26:47] <valexey_> они идут единым блоком.
[19:27:36] <valexey_> и это вам не окамл где невозбранно возможно что-то вроде:
let foo = 12;;
let foo = 42;;
let foo = "hello";;
[19:29:50] <gds> сливает потому, что можно забыть скопировать/переместить нужный кусок паттерн-матчинга и получить, что некоторые случаи не будут матчиться.  Офигенно клёво для языка со статической типизацией.  В противовес этому окамл (в revised syntax, конечно) имеет закрывающуюся конструкцию матчинга, и такого фокуса там не получится.
[19:30:24] <valexey_> если не полностью матчинг покрывает то компилятор как минимум варнинг выдаст.
[19:30:30] <valexey_> собственно в камле тоже.
[19:30:52] <valexey_> а то что я выше изобразил, тоже клево для языка со статической типизацией, правда ведь?
[19:31:02] <valexey_> особенно если эти определения раскиданы по исходнику.
[19:31:16] <valexey_> и исходник достаточно длинный.
[19:32:39] <gds> int vs string будут конфликтовать на проверке типов.  А так -- модули использовать надо, чтобы код, использующий foo, был внутри модуля, и при малом размере модуля вполне реально проследить глазами, что foo повторяется.
[19:33:03] <valexey_> зачем видеть глазами то, что может проверить компилятор?
[19:33:52] <gds> затем, что хоть компилятор может проверить конкретно эту штуку, от неё есть польза.
[19:34:06] <valexey_> например?
[19:36:57] <gds> возможность скопипастить два независимых валидных куска в любом порядке, получив одинаковый результат (плюс-минус порядок сайд-эффектов в этих кусках -- если было a1,a2,..aN,b1,b2,..bN, будет b1,b2,..bN,a1,a2,..aN).
возможность ребиндить идентификатор в коде вида
let x = 123 in
let x = func1 x in
let x = func2 x in
..
возможность переопределить какие-то функции в конкретном месте исходника и ниже, не прибегая к "search and replace".
[19:37:37] <valexey_> эдак и динамическую типизацию можно оправдать :-)
[19:37:49] serp256 вышел(а) из комнаты
[19:37:58] <valexey_> возможность не заводить новую переменную а использовать старую но с типом уже другого значения.
[19:38:05] <valexey_> *со значением другого типа
[19:40:16] <valexey_> let .. in let ... in -- это вложенные блоки, как я понимаю. аналогично {...{...{... }}} в си-подобных языках
[19:40:30] <valexey_> т.е. как бы отношения к означенной проблеме не имеет.
[19:40:58] <gds> остаются пункты первый и последний.
[19:42:24] <valexey_> про первый и последний я уже сказал. это облегчает первичную модификацию программы, но усложняет её последующее понимание. т.е. поощряется неряшливый кодинг.
[19:42:37] <valexey_> это как #define где-нибудь посередине исходника вводить в плюсах.
[19:42:52] <valexey_> а что? тоже позволяет обойтись без "search and replace"
[19:43:25] <gds> ну да, всё правильно.  Будучи применённым с умом, этот приём позволит сэкономить кучу времени.
[19:43:52] <valexey_> а всё из за того, что нет нормальных средств рефакторинга для окамла? :-)
[19:44:31] <gds> конечно.  Да и вообще, окамл мёртв (см. топик конфы).
[19:45:09] <valexey_> ужасы какие. но вообще, я бы предпочел чтобы мне компилятор по голове бил за повторные декларации.
[19:48:03] <gds> а вот в 3.12 (в той, что из trunk) запретили повторяться structure items.  В результате -- omake, в котором посредством "include Модуль; переопределение нужных вещей;" расширили стандартный модуль, отказывается компилироваться.
Если игрушечно, то:
        Objective Caml version 3.12.0+dev17 (2010-01-20)
# module Q = struct type q = unit type q = unit end;;
Characters 32-45:
  module Q = struct type q = unit type q = unit end;;
                                  ^^^^^^^^^^^^^
Error: Multiple definition of the type name q.
       Names must be unique in a given structure or signature.
не айс вообще.
[19:49:30] <valexey_> ой, а в камле и include есть?
[19:49:46] <gds> и define, гагага
[19:50:03] <valexey_> С++ замаскированный под ML
[19:50:22] <gds> C, скорее.  Даже оверлоадинга нету, тьфу.
[19:50:44] <valexey_> отсутствие оверлоадинга вроде как оправдывается строгостью типизации :-)
[19:51:38] kf5pvkilss вошёл(а) в комнату
[19:51:43] kf5pvkilss вышел(а) из комнаты
[20:01:26] Typhon вошёл(а) в комнату
[20:02:02] <gds> > Warning [...]
> Error: Error-enabled warnings (1 occurrences)
и валится.
Правильно, за error-enabled в релизах надо если не убивать, то долго и больно бить по рукам.
[20:02:30] <valexey_> а это что такое? Error-enabled
[20:03:02] <gds> предупреждение вызывает ошибку компиляции.  если правильно помню, в gcc за это отвечает -Werror.
[20:03:54] <valexey_> а, ну правильно. т.е. это хорошо :-) предупреждений в релизе быть не должно!
[20:04:13] <gds> даже когда компилятор меняется, а исходник -- нет?
[20:05:28] <valexey_> в этом случае и ошибки могут вылезти.
[20:05:37] <valexey_> причем не обязательно ошибки компиляции.
[20:05:47] <valexey_> поэтому всё равно проверять нужно заново.
[20:07:28] <gds> так ведь обещают обратную совместимость.  Более того, она даже реально есть.  Только некоторые люди, включающие опцию -warn-error в релизе, эту совместимость ломают: код работал раньше, код работает и сейчас, но раньше он компилировался-билдился, теперь же нет.
[20:10:31] <valexey_> сильно хуже когда это не выставляют вообще и оно обычно собирается с где-то 600-700 варнингами.
[20:10:50] <valexey_> на старой версии компилятора собирается и работает, на новой версии собирается, работает, но глючит :-)
[20:13:32] <gds> если смотреть по конечному результату, лучше, когда мульён предупреждений, но всё работает, нежели когда одно, и ничего не работает (компиляция исходника наламывается, всё наламывается, вот в чём дело).
[20:14:49] <valexey_> когда мульен предупреждений, и в результате оно ИНОГДА падает -- существенно хуже чем когда оно не собирается из за одного варнинга, ибо в последнем случае достаточно отключить всего одну опцию компилятора, а первый случай обещает длительный и изощренный секс.
[20:16:32] <gds> согласен.  Но тут случай такой: код работал давно, уверенно, чотко.  "production" такое называется.  Для разработки (там, где можно/нужно исправлять код) -- опция -warn-error почти обязательна.  Для релизов -- скорее вредна.
[20:17:15] <valexey_> ну, если в релиз выпускается исходник, то возможно что и вредна. но опять же -- довольно просто клиент это может поправить.
[20:24:07] <ermine> -g -O0
[20:32:25] valexey_ вышел(а) из комнаты
[21:06:03] Kakadu вошёл(а) в комнату
[21:06:34] Kakadu вышел(а) из комнаты
[21:23:43] sceptic вошёл(а) в комнату
[21:42:28] valexey вошёл(а) в комнату
[22:13:38] <gds> я вот тут задумался про overbld/msvc и нашёл http://code.google.com/p/wrapmsvc/ -- как раз то, что хотел сделать давно (велосипедам -- бой!).  Это -- врапперы, позволяющие вызывать msvc, передав ему аргументы в формате аргументов gcc.  Практический результат: ставим эту штуку, компилируем оверблд (возможно частично) и имеем msvc'шную штуку с окамлом и библиотеками.  Хотя, чую, допиливать эти врапперы таки придётся..
[22:26:41] <ermine> а кто может рассказать мне сказочку о пользе/вреде передаче апи чужеродной библиотеки камлевых функций malloc/realloc/free?
[22:28:56] <ermine> типа set_malloc(caml_stat_alloc)
[22:29:18] <ygrek> ermine: не стоит - потому что оно может кинуть камловое исключение
[22:29:23] <ygrek> в чём профит?
[22:29:41] <ermine> ну вот я хотела послушать сказочку про это
[22:29:42] <ygrek> gds: насчёт повторяющихся str_item'ов - ощещние двоякое
[22:30:13] <gds> конечно двоякое.
[22:30:16] <valexey> http://habrahabr.ru/blogs/arbeit/88443/
[22:32:14] <ermine> valexey: приятно сидеть и чатиться, а прога при этом сама за тебя пишется
[22:33:05] <ygrek> в этом wrapmsvc намёки в сторону wine - к чему бы это?
[22:33:50] <ermine> может инклюды какие-нить
[23:05:41] <ermine> так, значит. в bdb около 60 сигнатур калбэков
[23:06:24] <ermine> 60 global roots или одна хэштаблица с 60 типами?
[23:07:35] <ygrek> 1 global root на массив с 60 value
[23:08:23] <ermine> а что за value?
[23:09:32] <ermine> это в ocurl удобно, когда одна сигнатура создается один раз за все время жизни
[23:09:45] <ygrek> typedef intnat value;
[23:10:18] <ermine> та я знаю
[23:10:22] <valexey> что-то такое ощущение что на окамле по большей части тут пишут инструментарий для окамла :-)
[23:11:05] <Typhon> а на х-е конфиги для xmonad? ^___^
[23:11:21] <ermine> valexey: ну да, камло очень бедный язык, никаких библиотек и прочих удобств
[23:11:32] <valexey> не, у хмонада отдельный уютный чятик :-)
[23:12:15] <ermine> а на хаскеле пишут примитивные программы
[23:12:21] <valexey> ermine: ну, зато на нем иногда встрачаются решения в реальной жизни :-)
[23:12:30] <valexey> на камле т.е.
[23:12:55] <ermine> ygrek: ты так и не сказал, что м value прятать
[23:13:30] <ygrek> не знаю :) а что ты в руты собиралась прятать?
[23:13:40] <ermine> ygrek: туда прятать один калбек, который вызывает из одной из 60 хэштаблиц соответствующую функцию на стороне камля?
[23:14:27] <ermine> ygrek: да я пытаюсь скрестить подходы в ocaml-event и ocurl
[23:14:31] <ygrek> не знаю, я уже запутался сколько там у тебя callback'ов и таблиц :)
[23:15:11] <ermine> ygrek: можно создать кучу калбэков одной и той же сигнатур, но сигнатур около 60
[23:16:29] <ygrek> значит трясти надо
[23:16:55] <ermine> я пока только сейчас ради интереса посчитала, сколько в публиыном API у bdb функций, которые хотят калбеки
[23:19:32] ermine трясет головой
[23:38:49] Kakadu вошёл(а) в комнату
[23:39:34] <Kakadu> а как в дебагере увидеть значение переменной?
[23:39:46] <Kakadu> а то он мне пишет на print res
[23:39:52] <Kakadu> res: 'a = <poly>
[23:41:10] valexey вышел(а) из комнаты
[23:54:47] <ermine> компилять надо с -g -O0
[23:55:17] ermine подсократила число сигнатур калбэков
[23:59:09] <Kakadu> а ocamlc знает что такое -О0?
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!