[00:15:28] <vlad2> Не факт, конечно, что оно сразу упадет при этом... Даже если и есть бага в GC.
[00:17:11] <valexey> угу
[00:17:14] <valexey> но тем не менее
[00:17:18] <valexey> модуль даффай!
[00:22:09] <valexey> гм. я посмотрел что делает Oberon.Collect процедура - нифига она не делает. то есть оно лишь выставляет флаг
[00:22:16] <valexey>  PROCEDURE Collect* (count: INTEGER);
 BEGIN ActCnt := count
 END Collect;
[00:23:26] <vlad2> MODULE test;
TYPE
   InnerRecord = RECORD int: INTEGER END;
   R = RECORD pointer: POINTER TO InnerRecord END;
VAR
   r: R;

PROCEDURE init();
BEGIN
   NEW(r.pointer);
END init;

PROCEDURE runGC(VAR local: R; VAR int: INTEGER);
BEGIN
   local.pointer := NIL; (*unroot InnerRecord*)
   (* run actual GC here *)
   int := 123; (* crash? *)
END runGC;

BEGIN
   init();
   runGC(r, r.pointer.int);
END test.
[00:23:50] <valexey> то есть GC таки на вершине стека
[00:24:18] <vlad2> А что делать, если надо помусорить в цикле?
[00:24:41] <valexey> сделать вместо цикла таску?
[00:25:28] <vlad2> Т.е. достаточно длинный цикл с NEW дает гарантированный out of memory?
[00:25:39] <valexey> ща попробую, чо :-)
[00:25:49] <valexey> уж нагадить то в память я могу!
[00:26:31] <vlad2> Интересно, что в случае JS видно как компилятор генерит этот самый GC root для int :)
[00:26:38] <vlad2> runGC(r, RTL$.makeRef(r.pointer, "int"));
[00:29:32] <vlad2> В BB такая бага была для массивов - не знаю фикснули или нет.
[00:30:09] <vlad2> Подозреваю, что нет - это надо ж в страшный компилятор лезть :)
[00:30:29] <valexey> Ж-)
[00:30:39] <valexey> в компилятор не боится лезть только китаец походу :-)
[00:30:46] <vlad2> :)
[00:31:01] <valexey> и ваще, нормальные люди такой код не пишут, чтобы ББшный компилер падал!
[00:32:48] <valexey> ну, я запустил. Посмотрим сколько оно проживет.
[00:33:08] <valexey> правда я очень халявно это сделал
[00:33:15] <valexey> надо было таки в рекорд массив упихать :-)
[00:36:58] <valexey> зато вот нарыл, что у Вирта в случае NEW гарантированно память нулями забивается
[00:42:06] <vlad2> Ну да - нулями проще всего.
[00:43:49] <valexey> выделяю мегабайтные структуры в цикле - не падает. и вроде как и память не жрет
[00:43:53] <valexey> надо разбирваться :-)
[00:46:06] <valexey> так. я вообще не уверен что там трап будет
[00:50:27] <valexey> а, да, там не трап
[00:50:32] <valexey> там будет не трап
[00:50:37] <valexey> там будет нулевой указатель :-D
[01:07:23] <valexey> vlad2: а знаешь что смешное? то, что время компиляции модуля зависит от размера типа RECORD'а описанного в нем :-)
[01:07:28] <valexey> зависит прямо пропорционально
[01:08:07] <vlad2> В смысле размера в байтах?
[01:08:20] <valexey> да!
[01:08:50] <valexey> если объявлено что-то типа TYPE R = RECORD i : ARRAY 1024*1024 OF INTEGER; то компилится оно ДОЛГО
[01:08:50] <vlad2> Хе-хе.
[01:09:13] <valexey> А если R = RECORD i : ARRAY 1024*1024*1024 OF INTEGER END то дождаться мне не удалось
[01:10:22] <vlad2> Он там по линейному списку идет, наверное :)
[01:10:39] <valexey> эмм.. а откуда там списки такие?
[01:10:44] <valexey> это ж КОМПИЛЯЦИЯ
[01:12:23] <vlad2> Дык, генерит список какой-нибудь.
[01:13:47] <vlad2> Это надо все ранить параллельно с каким-нибудь чеком валидности структур, создаваемых параллеоно.
[01:13:55] <vlad2> Т.е.:
[01:14:55] <vlad2> testGCBug();
addNewStructoreToList();
checkListOfStructures();
[01:15:03] <vlad2> И все это в цикле.
[01:15:25] <vlad2> Чтоб этот int в итоге попал в живой объект, который можно проверить
[01:16:04] <vlad2> Точнее так:
[01:16:39] <valexey> ну, я сейчас проверяю запускается GC вообще вне вершины стека
[01:16:46] <vlad2> addNewStructoreToList(); надо делать сразу после обнуления указателя и запуска GC, но до записи в int.
[01:17:38] <vlad2> r.pointer := NIL;
runGC();
addNewStructoreToList();
int := 123;
checkListOfStructures();
[01:18:02] <vlad2> Ну и надо убедится, что GC умеет запускать не только в топе.
[01:19:21] <valexey> да, GC не вызывается. по крайней мере автоматом
[01:19:49] <valexey> получается выделить порядка 76 структур размеров в 4 килобайта каждая.
[01:23:33] <valexey> да, не вызывается
[01:23:49] <valexey> то есть вызвать GC без хака системы нельзя вне главного цикла
[01:24:00] <valexey> а в главном цикле оно вызывается по таймеру :-)
[01:24:51] <valexey> То есть если у тебя только что завершилась процедура которая отожрала всю память, а затем пользователь СРАЗУ кликнул мышкой и запустил следующую, то есть большой шанс, что этой второй процедуре памяти уже не хватит :-)
[01:25:07] <valexey> ибо между вызовами просто не успел запуститься GC
[01:25:15] <valexey> я такое только что проделал :-D
[01:26:10] <valexey> vlad2: видишь, у Вирта как обычно радикальное решение проблем которые твой изощренный ум там пытается обнаружить! :-)
[01:26:39] <valexey> А вот фиг! Фиг подловишь!
[01:51:23] <valexey> "В Тольятти началось и очень быстро заглохло восстание машин."
[01:51:41] <valexey> кстати, да. С Оберон-технологиями можно восстания машин не опасаться :-)
[08:44:32] <valexey> .
[09:05:03] <Kemet> клеветы на Оберон! клеветы на Вирта!!
[09:32:36] <geniepro> valexey: ку! тебе же жиды нравятся? послушай тогда группу "Orphaned Land" -- ваще зачёт! я щас тащусь от их альбома "The Simple Man" (2013)
[09:57:12] <geniepro> http://habrahabr.ru/company/kolibrios/blog/256799/
[10:26:59] <valexey> geniepro: не, мне таки евреи нравятся и их забавная культура мышления
[10:27:01] <valexey> :-)
[10:27:17] <geniepro> ну я про это и говорю))
[10:28:03] <valexey> есть чему поучиться таки ;-)
[10:52:16] <sda> Москва. 20 мая. INTERFAX.RU - Секретарь Совета безопасности и обороны Украины Александр Турчинов не исключает, что Киев начнет консультации относительно размещения компонентов системы ПРО на своей территории.              "Не исключаю, что для защиты от ядерной опасности (со стороны РФ - ИФ) мы вынуждены будем проводить консультации относительно размещения компонентов системы ПРО на территории Украины. Не допустить войны с использованием ядерного оружия - это совместная ответственность всех людей доброй воли перед планетой", - сказал он в интервью агентству "Украинформ".
[11:07:20] <Kemet> расстрелять
[14:56:17] <geniepro> http://rustbyexample.com/hello/print.html
<std macros>:3:11: 3:36 error: invalid reference to argument `1` (there is 1 argument)

в этом расте даже примеры не компилируются ))
[14:57:01] <geniepro> хотя там походу как раз пример ошибочного кода )))
[16:58:50] <valexey> О! Кошер! http://lenta.ru/news/2015/05/20/kolbaski/
[17:11:04] <Kemet> хехе
[17:38:12] <valexey> http://www.opennet.ru/opennews/art.shtml?num=42267
[17:38:20] <valexey> "Интересно, что несмотря на то, что код написан на ассемблере, проведённые пользователями тесты производительности показывают существенное отставание по скорости обработки запросов от современных http-серверов, написанных на языке Си. "
[17:49:10] <vlad2> Дык, трудно на асме сортировать не пузырьком.
[17:51:02] <vlad2> Как тут не припомнить оберон с его односвязными списками на каждый чих ;)
[17:51:52] <valexey> ага :-) и бесконечное время компиляции если описать тип в модуле R = RECORD i : ARRAY 1024*1024*1024 OF INTEGER END;
[17:53:16] <valexey> идеалогия уровня "640 Кб хватит всем!"
[18:00:06] <vlad2> Не выяснил что ж он там делает?
[18:00:45] <valexey> не, в компилятор я не лез
[18:00:59] <valexey> надо будет глянуть конечно
[18:01:32] <vlad2> А можно его попробовать запусить будучи скомпиленныи в js и брякнуть в дебагере?
[18:02:00] <valexey> ну, можно попробовать, да.
[18:09:25] <valexey> vlad2: нашел
[18:09:42] <vlad2> И что там:
[18:09:44] <vlad2> ?
[18:10:44] <valexey> крутится тут: https://github.com/ilovb/ProjectOberon2013/blob/50134e61f8e2530dc626ddcd0715ae692c156956/Sources/ORG.Mod#L328
[18:10:58] <valexey> еще точнее, вот тут: https://github.com/ilovb/ProjectOberon2013/blob/50134e61f8e2530dc626ddcd0715ae692c156956/Sources/ORG.Mod#L337
[18:12:31] <vlad2> Обожаю 3-х буквенные индентификаторы.
[18:12:55] <valexey> ога :-)
[18:12:59] <valexey> все сразу ясно и понятно же!
[18:13:26] <vlad2> А как вычислил?
[18:13:29] <valexey> впрочем, в Оберон-ОС такой редактор, что понятно почему Вирт пишет именно так :-)
[18:13:54] <valexey> Вычислил ровно так как ты и сказал - запустил в версии компилятора который был скомпилен твоим компилятором :-)
[18:14:00] <valexey> http://oberspace.dyndns.org/PO_2013_compiler.html
[18:14:17] <vlad2> PROFIT!!!
[18:14:40] <valexey> насколько я понимаю, тут происходит следующее - виртов компилятор тупо проверяет КАЖДЫЙ ЭЛЕМЕНТ МАССИВА на то, а нет ли там ВДРУГ указателей?
[18:14:56] <valexey> ну, подумаешь в массиве все типы одинаковые, но ВДРУГ? :-D
[18:15:02] <vlad2> Э... Зачем?
[18:16:14] <valexey> Небось какую-то метаинфу для мусорщика пытается сгенерить..
[18:16:18] <vlad2> Ага, тоже брякнул и посмотрел.
[18:16:57] <valexey> причем если глянуть на стек, то это 3 функция такая на стеке
[18:17:13] <valexey> что похоже на правду, ибо Record->array->element массива
[18:17:57] <valexey> ну, как бы тоесть выходит, что скоростью компиляци Виртов компилер тоже не отличается :-)
[18:18:10] <valexey> не state-of-art даже тут :-P
[18:18:23] <vlad2> Плюсовым темплейтам позавидовал :)
[18:18:55] <valexey> ага, темплейтные списки типов :-)
[18:21:45] <vlad2> Может это проблема сродно ББ-ной - там тоже с большими массивами какая-то фигня при герерировании мета информации.
[18:22:06] <valexey> ну, это можно проверить
[18:22:32] <valexey> о! виндовозная защита отговаривает меня запускать BB :-)
[18:22:38] <valexey> говорит что это скорее всего вирус и не безопасно
[18:24:39] <valexey> не, ББ компилит быстро
[18:24:48] <valexey> впрочем, у него вроде бы сборщик мусора существенно другой
[18:25:00] <valexey> у него оно консервативное в отличие от Обероновского.
[18:34:19] <valexey> а ББ мне удалось нафиг зациклить (во время запуска тестовой программы). На Ctrl+Break не реагирует.
[18:34:39] <valexey> Но вот у ББ таки мусорщик походу таки запускается вне главного цикла.
[18:34:49] <valexey> возможно на NEW
[18:43:53] <vlad2> Да, мне тоже казалось, что на NEW.
[18:48:24] <valexey> но да, там тоже NEW может вернуть в указатель NIL если памяти нема
[18:48:33] <valexey> недокументированная возможность языковая ;-)
[19:22:45] <vlad2> !@#$
[19:22:53] <vlad2> кто это пишет???
[19:23:14] <vlad2>    for ( var i = 1; i < 100; ++i )
       {
       var source = arguments[i];
       if ( !source ) continue;
[19:23:35] <vlad2> js
[19:25:16] <vlad2> Сабмитнул взрослый программер. Но есть подозрения, что копипаста из какого-то джаваскриптоговнохранилища.
[19:52:33] <valexey> vlad2: а что тут такого? ;-)
[19:52:58] <valexey> не форыч же использовать!
[19:53:02] <vlad2> У arguments есть length
[19:53:18] <vlad2> Но нет, 100 должно хватить всем!
[19:53:24] <valexey> да!
[19:53:53] <valexey> а если там всегда поряда 3 элементов, то машина же железная, пусть 100 перебирает!
[19:53:55] <valexey> :-D
[19:54:12] <vlad2> И даже если тебе нужке всего 1 аргумент - будешь итерироваться 100 раз. Иначе слишком быстро будет. Ну smooth.
[19:54:37] <valexey> это даже чем-то напоминает Виртовский код :-)
[19:55:08] <vlad2> Какая жирная клевета :)
[19:55:58] <valexey> ну а чо? тот же подход - пусть лучше машина перебирает комбинации, чем мы напишем лишнюю строчку кода!
[19:56:55] <valexey> миллиард итераций вместо 4? фигня!
[19:57:02] <valexey> машина железная, а пользователь терпеливый :-)
[20:26:03] <vlad2> Причем конкретно вот тот код в базовой компоненте, которая вызывается постоянно.
[20:27:07] <valexey> нормуль, чо.
[20:27:11] <valexey> нефиг преждевременно оптимизировать!
[20:27:18] <valexey> хуяк-хуяк и в продакшн!
[20:27:22] <valexey> оппа, говносайт!
[22:10:18] <geniepro> http://ofigenno.cc/burger-iz-mcdonalds-ostalsya-svezhim-20-let-spustya
[22:11:26] <geniepro> http://ofigenno.cc/anatomicheskie-fotografii
[22:21:04] <geniepro> http://www.computerra.ru/lenta/?id=123533
"6-летний ребенок из Великобритании успешно сдал экзамен Microsoft Office Specialist. Хумза Шахзад скоро должен получить сертификат с голографической эмблемой «Microsoft Certification Excellence». Его успех связывают с родителями, которые с раннего возраста приучали ребенка к технологиям. В два года они купили ему смартфон, а с 3 лет он играл на собственном ноутбуке. Его отец работает ИТ-консультантом, мать – преподаватель."
[22:21:56] <valexey> MS головного мозга!
[22:27:27] <geniepro> - Усаги-тян, нам надо найти обходной путь?
- А зачем? Входим через главную дверь и начинаем драку - зачем тратить лишние силы. Там же всё равно западня.
- Откуда ты знаешь?
- В логове врага всегда западня.
[22:32:53] <valexey> http://siliconrus.com/2015/05/italian-food-ads/
[22:40:06] <valexey> вот как так? почему каждый раз когда начинаешь что-то делать в Обероне, то всегда, даже если этого и не хотелось изначально, автоматом генерятся новые жырные клеветы?
[22:40:16] <valexey> Каждый раз какой-то очередной косяк обнаруживается!
[23:28:28] <vlad2> Гы! Этот код оказался еще и в двух местах!!!
[23:31:52] <valexey> vlad2: копипаста!
[23:33:48] <akastargazer> Казалось бы, причём тут Оберон.
[23:34:27] <valexey> :-D
[23:36:50] <valexey> языки меняются, а ошибки остаются