Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 29 сентября 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:00:04] <zert> ща
[00:00:30] <olegfink> если интерпретируемая строка начинается с ы), или если у файла, который дали в командной строке, расширение .ы, ищем в $QHOME файл ы.k, и скармливаем строчку функции .ы.e из него
[00:01:33] <Typhon> весело
[00:02:17] <arhibot> zert: ну частичное применение же
[00:02:57] <zert> хм..
[00:03:00] <olegfink> бывает полезно для реализации всяких утилит
[00:05:06] <Kakadu> zert: int foo() {
static int x;
return x++
}
vs.
let create_foo () = let count = ref 0 and foo = .... in foo;;
[00:05:17] <Kakadu> хотя тут ничего красивого нет, конечно
[00:05:19] <zert> :))))
[00:05:36] <Kakadu> это  я про замыкания.
[00:06:00] Kakadu просит его тормозить, когда он начинеат нести полную чушь
[00:06:09] <zert> та ща ерланговский код напишу небольшой
[00:06:25] <olegfink> у меня что-то воображение разыгралось, и такие примеры юзания замыканий лезут, что их точно показывать публике не стоит. :-(
[00:06:42] <arhibot> zert: да, передавать лямбды на другую ноду да еще и выпонлять их
[00:06:57] <arhibot> что может быть круче
[00:07:14] <zert> ага
[00:07:23] <Kakadu> zert: А про тайпклассы хаскелля упоминается? Это реально круто имхо
[00:07:28] <zert> ненене
[00:08:08] <Typhon> olegfink: покажи здесь, здесь публика к извращения привычная вроде
[00:09:14] <olegfink> ненене! я лучше пойду дальше в elf копаться
[00:10:27] vshender вышел(а) из комнаты
[00:12:01] <gds> чорт, имея опыт с фп, как-то все применения замыканий кажутся очевидными и естественными.  Надо было раньше писать "guide to fp".
В отличие от замыканий в js, где проблемы со scope (closure создаётся только при вызове функции) + с this (функции/объекты, всё такое).
[00:13:35] <Kakadu> давайте подумаем, в чем разница между замыканием и локальными переменными в С++ с их областями видимости.
[00:13:43] Kakadu тоормозит
[00:14:15] <ygrek> в том что они локальные? ;)
[00:14:19] Kakadu сегодня прочитал как объявить функцию в теле другой функции без лямбд и С++0х
[00:14:36] <Kakadu> так в переменные тоже локальные
[00:14:56] <Kakadu> в С++
[00:15:02] <ygrek> вот вот
[00:15:14] <arhibot> дык как раз в С++0x и не все весело с лямбдами
[00:15:28] <olegfink> Kakadu: ну, как раз замыкания область видимости нарушают
[00:15:29] <arhibot> как они мусор собирают там?
[00:16:02] <Kakadu> arhibot: я не знаю как в С++0х, но можн и в старом стандарте вроде
[00:16:19] <arhibot> лямбды в новом появились
[00:16:33] <olegfink> let add x = fun y -> x + y in -- x была локальной переменной, а в возвращенном замыкании осталась жить
[00:16:42] <olegfink> in нафиг
[00:18:22] <olegfink> gds, а еще, я тут выяснил, у js безобразная стдлиба (которая DOM)
[00:18:25] <Kakadu> так а в .NET не так?
[00:18:50] <olegfink> ну в .net вроде нормальные замыкания, да
[00:19:06] <Kakadu> я не понял про замыкания
[00:19:31] <Kakadu> в чем прелесть непонятно
[00:20:27] <olegfink> в том, что вместе с функцией ты получаешь весь ее контекст
[00:22:07] <Kakadu> но это нужно лишь если мы умеем в языке конструировать функции с помощью лямбд. Иначе замыкания не нужны. следовательно, замыкания стоят не отдельно, и даже не первыми в паре (лямбды, замыкания)
[00:26:00] <gds> olegfink: у js стдлиба -- это не dom, это скорее jquery + underscore.  И это печально.
[00:26:15] <gds> хоть и сильно веселее, чем dom.
[00:31:46] <olegfink> http://codepad.org/FVo7dWze -- что-то я не понял, gcc настолько интеллектуальный, что не развернул стек дальше x, или просто коду сильно повезло и он посмотрел туда, куда надо?
[00:34:36] arhibot вышел(а) из комнаты
[00:35:03] gds вышел(а) из комнаты
[00:35:04] Kakadu вышел(а) из комнаты
[00:35:14] <ygrek> а ты указатель сохрани куда-нибудь
[00:36:07] ygrek вышел(а) из комнаты
[00:36:34] <olegfink> http://codepad.org/9ZKpffne -- не помогло
[00:39:44] <olegfink> > If you try to call the nested function through its address after the containing function has exited, all hell will break loose.
[00:39:47] <olegfink> из доков gcc
[00:39:52] <olegfink> значит, да, коду просто везет
[00:40:08] <olegfink> в общем, разница в том, что с настоящими замыканиями это всегда работает :-)
[00:59:55] ygrek вошёл(а) в комнату
[01:01:05] <ygrek> -O2 и посомтри асм, там вообще возвращается наугад адрес стека
[01:02:07] <ygrek> угу
[01:02:28] <olegfink> хаха
[01:02:33] <olegfink> с -O2 и не работает
[01:02:39] <olegfink> а с -O3 работает
[01:02:43] <olegfink> но -O3 я так и не понял
[01:03:00] <ygrek> хм?
[01:05:34] <olegfink> lea         edx, [esp+14h]
[01:05:40] <olegfink> call        edx
[01:05:44] <olegfink> что это?
[01:05:49] <olegfink> в main
[01:06:05] <ygrek> бугага, оно инлайнит add, а адрес helper'а заранее откладывает
[01:07:08] <olegfink> так кому оно все-таки звонит в edx?
[01:07:10] <ygrek> а в -O2 честно использует результат add, который вообще неинициализирован
add:
   pushl %ebp
   movl  %esp, %ebp
   subl  $16, %esp
   leal  -12(%ebp), %eax
   leave
   ret
[01:07:49] <ygrek> у меня в -O3 add синлайнен, а вызов helper'а это
    call    *%ecx
[01:08:10] <ygrek> который заранее (до add) проиницализирован
[01:08:56] <olegfink> ну у меня тоже заинлайнен, но инициализации edx (который у тебя ecx) не вижу
[01:08:59] <ygrek> olegfink: ээ, а откуда intel'овский асм вообще?
[01:09:42] <olegfink> ну я извращенец
[01:09:46] <olegfink> binutils нынче умеют
[01:10:11] <ygrek> ты бинарь смотришь? gcc -s не?
[01:10:52] <olegfink> ну, привычнее gcc ...; objdump -d
[01:11:14] <ygrek> ясно
[01:12:14] <olegfink> ик
[01:12:24] <olegfink> а у меня, ежели gcc -S, то вообще eax :-)
[01:12:42] <olegfink> у него что, регистеризатор работает на rand()?
[01:14:53] zert накидал работающий пример замыканий, пересылаемых на другую ноду, и выполняемых там. причём код умещается на одну страницу презентации — 12 строк
[01:16:08] <olegfink> ygrek: в общем, я правильно понял, что оно работает именно потому, что он выкидывает add и у helper получается один стекфрейм?
[01:21:41] <olegfink> (в сторону) пересылаемые на другую ноду замыкания? 2 строки на k: одна строка для сервера и одна для клиента
[01:24:01] <ygrek> видимо да, для чистоты эксперимента надо грохнуть -O3 вариант
[01:25:01] <olegfink> хм, -O0 у меня тоже работает
[01:25:15] <olegfink> с чего это он
[01:25:54] <ygrek> O0 работал всегда
[01:28:01] <ygrek> -fno-inline ftw
[01:31:08] komar вышел(а) из комнаты
[01:31:34] ygrek вышел(а) из комнаты
[02:31:46] zert вышел(а) из комнаты
[04:27:25] <Typhon> "The ICFP Contest winners announced! Team "Pure Pure Code ++" using C++, Haskell and Python"
[05:51:15] Typhon вышел(а) из комнаты
[08:19:02] iNode вошёл(а) в комнату
[09:03:51] gds вошёл(а) в комнату
[09:45:28] zert вошёл(а) в комнату
[10:27:40] serp256 вошёл(а) в комнату
[10:43:15] arhibot вошёл(а) в комнату
[11:25:59] Kakadu вошёл(а) в комнату
[11:26:49] Kakadu вышел(а) из комнаты
[11:26:52] Kakadu вошёл(а) в комнату
[11:31:25] Kakadu вышел(а) из комнаты
[11:31:31] Kakadu вошёл(а) в комнату
[11:35:21] <gds> а в наши дни я говнокодю такое: http://pastebin.com/TT0L2L7x , и хочу домой, к верблюдам.
[11:36:05] <olegfink> вот со строки 14 мне код нравится
[11:36:27] <gds> только ради этого и писал!11
[11:37:33] <gds> ну а как иначе, если хочется и предсказуемые правила оформления списков (аргументов функций, например), и инденты, и лёгкость для копипасты.  Кстати, и на окамле у меня похожее, для записей/туплов/списков.
[11:38:14] <f[x]> ага, ты на любом языке в revised синтаксисе пишешь оказывается :)
[11:39:35] <gds> Так!  С другой стороны, там, где запятая/точкасзапятой не разделитель (сишечька например), а завершающий символ, приходится его в конце строки писать, если оператор занимает всю строку.
[11:53:06] ermine вошёл(а) в комнату
[11:59:14] arhibot вышел(а) из комнаты: Replaced by new connection
[11:59:15] arhibot вошёл(а) в комнату
[12:18:28] gds вышел(а) из комнаты: Replaced by new connection
[12:18:29] gds вошёл(а) в комнату
[12:22:45] gds вышел(а) из комнаты
[12:23:15] gds вошёл(а) в комнату
[12:24:03] arhibot вышел(а) из комнаты
[12:43:14] komar вошёл(а) в комнату
[13:27:03] komar вышел(а) из комнаты: Replaced by new connection
[13:27:04] komar вошёл(а) в комнату
[14:22:54] ʇsʎɯ вошёл(а) в комнату
[15:13:46] Kakadu вышел(а) из комнаты
[17:30:13] gds вышел(а) из комнаты
[17:47:22] iNode вышел(а) из комнаты
[18:05:02] iNode вошёл(а) в комнату
[18:20:19] <ʇsʎɯ> le Gall на reddit запостил, что через пару часов будет 32-bit 3.12 windows installer
[18:20:31] <ʇsʎɯ> если, вдруг, кому-то интересно
[18:36:05] gds вошёл(а) в комнату
[19:21:57] <ʇsʎɯ> http://vimeo.com/15391093
[19:43:23] Kakadu вошёл(а) в комнату
[19:45:16] ʇsʎɯ вышел(а) из комнаты
[19:45:18] serp256 вышел(а) из комнаты
[19:45:39] Typhon вошёл(а) в комнату
[19:54:30] Kakadu вышел(а) из комнаты: Replaced by new connection
[19:54:32] Kakadu вошёл(а) в комнату
[19:59:15] Kakadu вышел(а) из комнаты
[20:16:02] Kakadu вошёл(а) в комнату
[21:02:54] serp256 вошёл(а) в комнату
[21:10:07] arhibot вошёл(а) в комнату
[21:13:30] serp256 вышел(а) из комнаты
[21:24:56] <gds> http://metaclass.livejournal.com/547653.html -- может я где-то прогнал или что-то упустил; поправьте и дополните, если чо.
[21:45:16] komar вышел(а) из комнаты
[21:54:06] vshender вошёл(а) в комнату
[21:54:22] arhibot вышел(а) из комнаты
[22:20:52] gds вышел(а) из комнаты
[22:21:31] arhibot вошёл(а) в комнату
[22:39:59] zert вышел(а) из комнаты
[23:00:26] komar вошёл(а) в комнату
[23:48:14] komar вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!