Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 7 июня 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+4
[00:05:17] gds вышел(а) из комнаты
[00:10:31] Kakadu вошёл(а) в комнату
[00:48:42] Kakadu вышел(а) из комнаты
[01:03:56] ygrek вышел(а) из комнаты
[01:17:27] <komar> Написать схему на окамле за 3 дня и 50 баксов: http://www.rentacoder.com/RentACoder/misc/BidRequests/ShowBidRequest.asp?lngBidRequestId=1391472
[01:22:05] ermine вышел(а) из комнаты
[06:19:25] Typhon вышел(а) из комнаты
[06:30:52] iNode вышел(а) из комнаты
[06:55:38] Typhon вошёл(а) в комнату
[07:52:19] iNode вошёл(а) в комнату
[08:53:41] Typhon вышел(а) из комнаты
[09:02:53] gds вошёл(а) в комнату
[09:08:16] iNode вышел(а) из комнаты
[09:10:23] iNode вошёл(а) в комнату
[09:56:33] serp256 вошёл(а) в комнату
[10:03:50] Typhon вошёл(а) в комнату
[10:04:51] Kakadu вошёл(а) в комнату
[10:16:36] ygrek вошёл(а) в комнату
[10:18:39] serp256 вышел(а) из комнаты
[10:21:43] serp256 вошёл(а) в комнату
[10:22:59] ʇsʎɯ вошёл(а) в комнату
[10:25:00] <ʇsʎɯ> komar: а что, Схема парсится в AST?
[10:25:14] <ʇsʎɯ> я думал, что её вообще парсить не нужно, стек завёл и погнали
[10:33:26] serp256 вышел(а) из комнаты
[10:37:13] serp256 вошёл(а) в комнату
[10:42:27] <gds> ну это смотря что делать с ней надо.  Для сколько-нибудь нетривиальных использований (в том числе для интерпретации) всё-таки неудобно раскладывать AST из данных в стек.
[10:46:42] serp256 вышел(а) из комнаты
[10:47:18] <ʇsʎɯ> так в том и дело, что AST там не надо
[10:47:24] <ʇsʎɯ> читаешь и кладёшь в стек
[10:47:45] <ʇsʎɯ> на ")" возвращаешься до "(" и выполняешь
[10:47:57] <gds> вот так императивщики уже третью неделю обманывали гестапо.
[10:48:05] ermine вошёл(а) в комнату
[10:48:10] <gds> раскладывая AST в стек.
[10:48:42] <ʇsʎɯ> а зачем городить огород там, где он не нужен?
[10:49:18] <ʇsʎɯ> и не прикидывайся тут пуристом, был бы таковым - сидел бы в соседней конфе
[10:54:54] <gds> когда я свою говноразметку парсил (s-выражения типо), раскладывал в тупое AST всё-таки.  Удобнее работать.  По нужде и выполнить можно, тупо пройдясь по дереву.  Если раскладывать в стек (т.е. отображать структуру данных на вызовы функций), получается не гибко нифига.  Этим императивщина и онально-ориентированное программирование страдают.  Да вон тот же пример, который я мучил в пятницу тутачьке -- там тоже ональные злоключения из-за того, что данные мешают с кодом.
[11:01:54] <ʇsʎɯ> вопрос в том, нужна ли гибкость. второго релиза может и не быть
[11:02:00] <ʇsʎɯ> и чаще всего не бывает
[11:02:33] <ʇsʎɯ> и если надо просто выполнить, то я тупо пройдусь стек-машиной и выполню
[11:02:54] <gds> гибкость нужна в том числе чтобы отладить первый релиз.
[11:03:07] <ʇsʎɯ> make it work, make it work right, make it {fast,abstract,etc}
[11:03:21] <gds> у нас же императивный язык, нам надо отлаживаться.  мы же не в coq пишем.
[11:03:30] <ʇsʎɯ> чтобы отладить перый релиз нужен максимально компактный и простой код
[11:04:17] <ʇsʎɯ> чем меньше всяких (отвелкающих) оборочек и бантиков, тем проще понять, где ошибка
[11:04:35] <gds> эдак можно и осемблир назвать простым кодом -- а чо там, регистры туда-сюда, все дела.
[11:04:52] <ʇsʎɯ> апеллирую ко второму закону далектики
[11:04:56] <ʇsʎɯ> диалектики*
[11:05:24] <ʇsʎɯ> ассемблер, кстати и правда относительно просто, но (собака) многословен
[11:10:20] serp256 вошёл(а) в комнату
[11:12:34] f[x] вошёл(а) в комнату
[11:13:27] <gds> вот тут у нас понятия простоты кода и отличаются.  например, я уважаю ещё простоту 1. чтения, 2. модификации кода.  осемблир не даёт ни того, ни другого.
[11:14:00] <gds> раскладка данных в стек может и читаема, но с модифицируемостью засада.
[11:15:23] <ʇsʎɯ> а зачем гибкий прототип?
[11:15:35] <gds> штобэ гнулся!111
[11:15:45] <ʇsʎɯ> ты когда-нибудь видел, чтобы дома делали из пластилина?
[11:15:56] <ʇsʎɯ> ну, чтобы прямо на лету, доделывать есичо
[11:17:01] <gds> раньше -- делали из гибких штук.  шалаши всякие, навесы.  потом-то поняли, что камень нужен.  а потом и госты/санпины налепили.
[11:17:20] <f[x]> прототипы домов вообще делают из пикселей на экране - специально чтобы можно было быстро менять и смотреть :)
[11:18:42] <gds> даже, скажем, из абстрактных векторов.  чтобы там матрицы и всё такое.
[11:18:56] <gds> потому что это круто и легкомодифицируемо.
[11:46:32] <ʇsʎɯ> я склонен считать, что код из 10 строчек модифицировать проще, чем "гибкий" модуль с API из 10 функций
[11:52:28] <gds> смотря какие строчки.  Но в целом да.  С другой стороны, построение s-выражения в памяти перед выполнением не сравнить с развесистым апи, а профит от этого есть, и неиллюзорный.
[11:54:53] ygrek вышел(а) из комнаты
[11:58:56] <ʇsʎɯ> разным людям удобны разные вещи
[12:18:45] f[x] вышел(а) из комнаты
[12:19:56] <gds> кстати, зачотно ломает моск coq, где утверждение эквивалентно возможности построить значение определённого типа.  Например, даже равенство определяют как возможность построить значение индуктивного типа, напоминающего
Inductive eq (P:Type)  : P -> P -> Prop :=
  refl_equal  : forall x, eq P  x x.
А ещё, в применении к окамлу, есть реализация GADT, использующая подобную штуку.  Как обычно, от олега.  http://caml.inria.fr/pub/ml-archives/caml-list/2009/07/2984f23799f442d0579faacbf4e6e904.en.html
[12:24:23] <Typhon> наверное, олег -- это что-то типа бурбаки :) иначе как он все это успевает?
[12:26:27] <ʇsʎɯ> может он типа Донцовой?
[12:28:49] <gds> а что там с бурбакой?
но да, производительность порожает.
[12:40:13] <Typhon> ну под именем бурбаки толпа народу ж писала, вот может и олег тоже виртуальный, а на том видео, где он с бумажек показывает код, его на самом деле отрисовали на компьютере
[12:44:01] <gds> ага, бобок, полубобок.  понял.
[12:45:13] <Typhon> :)
[12:45:19] <Typhon> пелевин?
[12:45:30] <ʇsʎɯ> ага
[12:45:39] <gds> ага, судя по гуглу, никто такие термины не использовал больше.
[12:46:02] ʇsʎɯ осилил прочитать лекцию Че про рекламу только накурившись
[13:59:31] <komar> Ну кто журналы в ru_caml поудалял?
[13:59:48] <komar> Я скачать не успел.
[14:00:53] <komar> m, схему на окамле уже написали, нагугли.
[14:02:13] <gds> я удолил.
[14:16:36] <serp256> ocs
[14:17:00] <serp256> http://will.iki.fi/software/ocs/
[14:17:07] <serp256> схема на камле
[14:17:54] <komar> О, ещё одна.
[14:18:28] <komar> Я http://cristal.inria.fr/~ddr/camlp5/doc/htmlc/scheme.html имел в виду.
[14:45:42] <serp256> komar:  
[14:45:57] <serp256> komar: это не схема на камле, это просто синтаксис для камла
[14:46:12] <komar> Сойдёт.
[15:05:23] <ʇsʎɯ> komar: а зачем гуглить?
[15:25:07] iNode вышел(а) из комнаты
[15:25:19] <ʇsʎɯ> более того, я не не понял вообще зачем схема на камле
[15:25:24] <ʇsʎɯ> запутали вы меня
[15:27:50] iNode вошёл(а) в комнату
[15:28:23] <gds> схема на окамле -- это ещё нормально, а вот перл6 на х-е -- это уже извращение, и автор извращенец (или извращенка, хрен их разберёшь, этих ахтунгов).
[15:28:52] <serp256> перл6 на х-е ?
[15:29:07] <serp256> x-e - это ?
[15:29:12] <serp256> на хуйне?
[15:29:17] <gds> это сокращение :)
[15:29:42] serp256 вышел(а) из комнаты
[15:30:06] <gds> http://en.wikipedia.org/wiki/Pugs
[15:36:03] <ʇsʎɯ> gds: ну хуле, вон, Darcs тот же
[15:36:15] <ʇsʎɯ> правда, никак не могут сделать, чтобы он не тормозил
[15:37:50] <gds> главное, что darcs основан на Теории Патчей.  Это очень важно.
[15:41:40] <gds> кстати, господа, каждый раз, когда вы выражаетесь матом, ygrek икает, а наша леди морщит носик.  Не доводите их, а то они разозлится на вас.  Да и неприлично это.  Как дети малые, прямо.
[15:42:24] <ʇsʎɯ> а я не ругался
[15:42:57] <gds> а как же упоминание darcs'а?!
[15:43:06] <ʇsʎɯ> ты первый начал
[15:43:12] <gds> ок, извени :[
[15:43:55] <ʇsʎɯ> по сравнению с твоим трёхэтажным (пусть и завуалированным) я просто "блин" сказал ))
[15:44:53] <ʇsʎɯ> возвращаясь к нашим лягушкам, float'ы boxed?
[15:45:48] <gds> да, кроме массивов и чисто-float-записей, и кроме некоторых штук, где компилятор достаточно умён, чтобы соптимизировать.
[15:46:25] <ʇsʎɯ> что означает "чисто-float-записей"?
[15:46:43] <gds> записи, все поля которых имеют тип float.
[15:49:51] <ʇsʎɯ> т.е. "let a = 0.5 in" boxed, а "let a = {num=0.5} in" - нет?
[15:51:05] <gds> сам num -- unboxed, но a будет содержать указатель на запись, что приведёт к такому же эффекту, как боксинг.
[15:52:15] <ʇsʎɯ> эх...
[15:52:57] <ʇsʎɯ> теперь я понимаю, почему на int'ах сразу в 3-4 раза быстрее стало
[15:53:17] <ʇsʎɯ> хотя вроде на Pentium-M разницы быть не должно
[15:53:26] <ʇsʎɯ> ядро одно, конвеер один
[15:54:30] <gds> а это смотря что делал.  Но если был код, в котором каждый элемент передаётся в функцию, понятное дело, боксинг аццкий, потому и советовал явный цикл for сделать.  Хотя, если на интах тоже канает, бери инты.
Но про цикл тоже не забывай -- вызов функции всё-таки дороже for'а.
[15:55:26] <ʇsʎɯ> ну да
[15:55:31] <ʇsʎɯ> + всякие кэши
[15:55:48] <ʇsʎɯ> меня инты более чем устраивают
[15:55:54] <ʇsʎɯ> там распознавание картинок
[15:56:01] <ʇsʎɯ> ч/б 256 градаций
[15:58:34] <gds> char бери :)
[15:59:37] <ʇsʎɯ> шутить изволите?
[15:59:48] <ʇsʎɯ> а +\- я чем делать буду?
[16:00:29] <gds> 256 -- char.  а чо бы нет.  Char.chr + Char.code есть.  В строки запаковать (построчно -- вполне нормально, ну или целиком, если в 16Мб влезет).
[16:00:47] <ʇsʎɯ> зачэм это всё?
[16:01:02] <ʇsʎɯ> медленнее будет кстати
[16:01:06] <gds> сокращение использования памяти в 4 раза например.
[16:01:10] <ʇsʎɯ> выборка из некратного 4 адреса
[16:01:24] <ʇsʎɯ> мне скорость нужна, а память там константная
[16:01:26] <ʇsʎɯ> не растёт
[16:04:59] <gds> блин, на цэ написал бы проще :)  выбирать машинное слово, а дальше битики туда-сюда гонять.
#define D(x, y) (abs(x-y) & 0xFF)
unsigned long x = xarr[i/4], y = yarr[i/4]
diff += D(x, y) + D(x>>8, y>>8) + D(x>>16, y>>16) + D(x>>24, y>>24)
[16:05:39] <ʇsʎɯ> снова материшься?
[16:06:01] <gds> ну а что ж ещё делать...
[16:06:31] <ʇsʎɯ> хотел бы писать на другом языке - писал бы на другом, но когда я на *++ промучался полчаса с new/delete/*/&/etc, то грязно выругался и за 20 минут настрочил на ocaml уже рабочий вариант
[16:07:39] <gds> дык основной код на окамле, а подсчёт разницы на цэ, как внешняя функция.  Но это если нужна скорость.
[16:08:25] <gds> заодно потрахался бы с сочленением окамла и цэ, в качестве зарядки для рук :)
[16:09:52] <ʇsʎɯ> то, что я показывал, - прототип. окончательная архитектура будет гораздо проще
[16:10:05] <ʇsʎɯ> там может и всё на * напишу...
[16:10:09] <ʇsʎɯ> а может и нет
[16:10:25] <ʇsʎɯ> хм
[16:10:34] <ʇsʎɯ> а с асмом окамл сочленяли?
[16:10:42] <ʇsʎɯ> я бы на SSE2 намутил
[16:11:00] <ʇsʎɯ> там же 128-битные регистры, т.е. 16 байт за такт
[16:11:12] <gds> через цэ -- сочленяется нормально, но смотри, нужно ли тебе это, так как непортабельно.
[16:12:37] <ʇsʎɯ> а я не собираюсь lvq считать на тостере вообще-то
[16:15:53] <gds> смотри сам.  но я бы так не делал без суровой необходимости.  а в сишную часть вынести алгоритм-другой -- вероятно, вынес бы (опять же, по результатам профилирования).
то есть, имеем плюсы окамла и плюсы си вместе.
[16:16:43] <ʇsʎɯ> оптимизировать - так нормально
[16:16:56] <ʇsʎɯ> а нет - так нехер за ocaml вообще вылазить
[16:17:11] <ʇsʎɯ> у меня весь исходник ноды на окамле в 20 строк (опять же) влезеть
[16:17:28] <ʇsʎɯ> влазить в ц - гимор строк на 150
[16:17:46] <ʇsʎɯ> так я уж на асме бы тогда иннер луп зарулил с ссе2
[16:17:53] <ʇsʎɯ> тогда оно хотя бы было бы оправданно
[16:18:03] <ʇsʎɯ> в 16+ раз быстрее, как минимум
[16:54:20] serp256 вошёл(а) в комнату
[17:10:57] Kakadu вышел(а) из комнаты
[17:12:38] iNode вышел(а) из комнаты
[17:31:21] gds вышел(а) из комнаты
[18:33:46] gds вошёл(а) в комнату
[19:30:12] ʇsʎɯ вышел(а) из комнаты
[19:59:51] serp256 вышел(а) из комнаты
[20:21:50] Kakadu вошёл(а) в комнату
[21:02:12] Typhon вышел(а) из комнаты
[22:29:57] <ermine> на цэ можно писать все в одну строчку, длинную-длинную
[23:50:27] digital_curse вышел(а) из комнаты: Replaced by new connection
[23:50:31] digital_curse вошёл(а) в комнату