[00:25:27] <valexey> vlad2: у меня предложение по псевдомодулю JS
[00:26:05] <valexey> Я хочу туда функцию eval :-) Чтобы JS.eval("var i=0; console.log(j);"); можно было.
[00:26:17] <valexey> то есть произвольный JS-кот
[00:28:08] <valexey> При этом это дело должно, ясное дело, транслироваться не в жабаскриптовый eval, а во вполне себе var i=0; console.log(i);
[00:38:12] <vlad2> То, что после "JS." - это глобальный жабаскриптовый контекст. Т.е., JS.eval("var i=0; console.log(j);"); уже сейчас работает ;)
[00:38:59] <vlad2> Любой жабаскриптовый код ты можешь оформить в виде функция вызывать через JS.
[00:39:33] <vlad2> Есть только одно но - там сейчас никакого маршаллинга нет.
[00:40:00] <vlad2> На для аргументов ни для результата.
[00:41:12] <vlad2> Т.е. передав в JS.alert() ARRAY OF CHAR - ты получишь херню (массив чисел).
[00:42:31] <valexey> гм-гм. попробуем-с
[00:45:33] <valexey> дас, работает.
[00:45:47] <valexey> я такое воткнул:
[00:45:49] <valexey> JS.eval("var t0 = Date.now();");
 Blur2DArray;
 JS.eval("console.log(Date.now()-t0)");
[00:46:04] <vlad2> Угу. Должно работать.
[00:46:09] <vlad2> Не? :)
[00:46:29] <valexey> так - работает, да.
[00:47:24] <vlad2> По идее так тоже должно работать: JS.run(Blur2DArray);
[00:47:29] <vlad2> function run(){
[00:47:37] <vlad2> function run(f){
[00:47:47] <vlad2> ...
[00:47:48] <vlad2> }
[00:47:58] <valexey> гы. а INTEGER то у тебя там ну ниразу не 32битный!
[00:47:59] <valexey> :-D
[00:48:33] <valexey> ибо в него влазит вот такое число: 1368737265281
[00:49:08] <valexey> VAR t0: INTEGER;
...
 JS.eval("t0 = Date.now();");
 JS.eval("console.log(t0);");
 Blur2DArray;
 JS.eval("console.log(Date.now()-t0)");
[00:49:20] <vlad2> F где сказано, что он должен быть 32-битный? :)
[00:50:27] <valexey> В связи INTEGER'a с SET'ом :-)
[00:50:30] <valexey> Поскольку там не описаны исключительные ситуации, следовательно там должено быть взаимно-однозначное соответствие.
[00:50:54] <valexey> А размер SET'а известен ;-)
[00:51:17] <vlad2> Сабмитни issue ;)
[00:51:46] <vlad2> Оно неэффективно будет сразу. В силу нижележащего жабаскрипта.
[00:52:25] <valexey> не, наоборот будет эффективно. глянь как в этом, как его блин.. Короче, на asm.js глянь, во!
[00:52:38] <valexey> Кстати, последняя новость - asm.js будет поддержан хромом.
[00:52:43] <vlad2> Дык, если транслировать в asm.js - То да.
[00:52:52] <vlad2> Прикольно.
[00:53:09] <valexey> дык, asm.js это нативный js обычный. с некоторыми хинтами
[00:53:16] <valexey> то есть оно работает везде
[00:53:18] <vlad2> ББ тогдабез шансов догнать жабаскрипт :)
[00:53:27] <valexey> ога :-)
[00:53:47] <vlad2> Как ты тогда предлагает транслировать i1 + i2?
[00:54:37] <vlad2> Или ещелучше i1 * i2 :)
[00:55:30] <valexey> щща.
[01:04:59] <valexey> vlad2: (i1*i2)|0
[01:06:20] <valexey> сейчас у тебя целые числа примерно 52битные
[01:07:08] <valexey> вообще, см. как emscripten со всем этим борется :-)
[01:09:30] <valexey> если жабаскриптовое чудовище уверено что числа не вылезают за 32бита, то оно использует 32битные целые числа как внутреннее представление
[01:09:35] <valexey> иначе оно все фигачит в даблы
[01:15:09] <vlad2> А где написано, что |0 редьюсает до 32 битов?
[01:15:22] <vlad2> Да,я понимаю, что оно в даблы все фигачит.
[01:16:37] <valexey> я хз где написано, но везде работает :-)
[01:16:54] <vlad2> Да, я во внутренностях мозиллы ковырюсь, в курсе, что оно пытается оптимизить. Это на самом деле здорово сбивает с толку с точки зрения встраивания их движка. Потому что в АПИ торчат всякие разные типы, а на самом деле там всегда double.
[01:17:20] <valexey> "Побитовые операторы интерпретируют операнды как последовательность из 32 битов (нулей и единиц)."
[01:17:22] <vlad2> (с точки зрения жабаскрипта)
[01:17:52] <vlad2> А. Понтяно. Повезло ;) А вот если бы не было так прописано, то что делать с обероном? ;)
[01:18:10] <vlad2> (в компилтяое фиксну, это не сложно)
[01:18:22] <valexey> извращаццо!
[01:20:04] <vlad2> (глядишь блур еще быстрее заработает)
[01:20:24] <valexey> Ну, то есть явным образом toInt32 звать
[01:20:42] <valexey> http://javascript.ru/ecma/part9#a-9.5
[01:21:42] <jordan36957> Как вам такое?
[01:21:44] <jordan36957> #define IF(x) if (x) {
#define ELSIF(x) } else if (x) {
#define ELSE } else {
#define END }  
[01:21:58] <jordan36957> Нет
[01:21:59] <valexey> где мой осиновый кол?!
[01:22:01] <jordan36957> #define IF(x) if (x) {
#define ELSIF(x) } else if (x) {
#define ELSE } else {
#define END }  
[01:22:14] <jordan36957> А эти смайлики
[01:22:18] <valexey> про это даже Страуструп писал :-)
[01:22:22] <valexey> да пофигу на смайлики, я понял.
[01:22:43] <jordan36957> Что писал?
[01:22:54] <jordan36957> Ересь? :-)
[01:22:58] <valexey> про эти макросы, да.
[01:23:16] <valexey> угу. крестомерзкая ересь!
[01:23:50] <jordan36957> Но работает.
[01:24:16] <jordan36957> А если подключать, локально, а не глобально объявлять для всех файлов.
[01:24:30] <vlad2> don't do it ;)
[01:26:00] <vlad2> Все что тебе нужно - это пережить ломку в пару дней. А не оттягивать конец вот такими извращениями.
[01:26:43] <jordan36957> :-)
[01:29:10] <valexey> угу. это плоха-ая практика
[01:29:23] <jordan36957> Но сам факт, что такое возможно, это гуд.
[01:31:03] <valexey> дык, Си штука более высокоуровневая чем Оберон.
[01:31:14] <valexey> об этом неоднократно говорилось :-)
[01:31:31] <valexey> правда за такие высказывания сразу бан на обронкоре :-)
[01:31:35] <jordan36957> А как же, память как шмат?
[01:32:05] <jordan36957> Прям уж бан.
[01:33:15] <jordan36957> Как статья, пишется?
[01:34:52] <valexey> пишется
[01:35:04] <valexey> память как шмат - это не низкоуровневость. это близость к железу :-)
[01:35:35] <valexey> низкий уровень - это когда тебе затруднительно (или вовсе невозможно) создавать собственные абстракции.
[01:37:43] <valexey> эмм.. точнее даже так - низкий уровень это когда у тебя абстракции далеки от предметной области. а возможность создавать нужные абстракции это, пожалуй, уже универсальность.
[01:38:07] <valexey> поэтому для двух разных задач данный язык может оказаться как высокоуровневым, так и низкоуровневым.
[01:38:37] <valexey> но если он универсальный, то ты всегда сможешь под задачу сделать себе абстракции и получить высокоуровневый язык.
[01:38:50] <valexey> точнее высокоуровневый инструментарий.
[01:41:03] <jordan36957> Как в с++ освобождаются строки? В нём сборщика мусора нет. В паскале строки на уровне компилятора, там понятно.
[01:42:09] <jordan36957> умный указатель?
[01:46:01] <valexey> ну, например да.
[01:46:09] <valexey> хотя... зачем?
[01:46:12] <valexey> они же by value
[01:46:17] <valexey> никаких указателей.
[01:46:43] <valexey> как в c++ овобождаются целые числа? :-)
[01:47:22] <jordan36957> Память под строки, как то же освобождается.
[01:47:47] <valexey> правило простое (точнее упрощенное, но вначале и так сойдет): если ты не делал new,  то и delete не тебе делать
[01:48:05] <jordan36957> Логично :-)
[01:48:08] <valexey> не, надо задать вопрос иначе - как под строки ВЫДЕЛЯЕТСЯ память :-)
[01:48:58] <valexey> кто её выделяет? как? ведь класс (или структура-не важно) имеет всегда фиксированный размер, следовательно в самом объекте класса string храниться строка не может.
[01:49:32] <jordan36957> Хранится ссылка на выделяемую память.
[01:49:39] <valexey> указатель :-)
[01:49:52] <valexey> и эта память освобождается в деструкторе данной структуры.
[01:50:10] <jordan36957> А когда он понимает, что нужно освободить?
[01:50:20] <jordan36957> Только при закрытии программы?
[01:50:24] <valexey> как его вызвали, так и освобождает :-)
[01:50:33] <valexey> а деструктор вызывается как только переменная уходит из области видимости :-)
[01:50:52] <jordan36957> Понял.
[01:51:42] <valexey> void foo() { A a1;  {A a2; // тут еще есть и /*a1 и a2 */} /*а вот тут уже a2 нет, и у него вызвался деструктор */;}
[01:52:20] <valexey> то что в Оберонах и КП нет деструкторов - то большая печаль.
[01:52:27] <valexey> Ибо сборщик мусора их заменить не может.
[01:52:37] <jordan36957> деструкторы есть только в классах?
[01:53:12] <valexey> структура от класса ничем не отличается кроме умолчательных модификаторов доступа к членам и наследованию.
[01:53:27] <valexey> (по умолчанию у структуры все public, у класса все private)
[01:53:32] <valexey> это ж не паскаль
[01:59:10] <valexey> идеалогия С++ такова, что ты можешь сделать тип не отличимый по поведению от встроенного типа.
[01:59:20] <valexey> более того, ты можешь сделать тип круче встроенного :-)
[02:02:32] <valexey> а еще одна идея, лежащая в основе С++ - ты не платишь за то, что не используешь.
[02:05:40] <jordan36957> Недостатки то есть? А то уж всё слишком идеально.
[02:07:50] <jordan36957> Теперь понятно, почему используют stl, там всё автономно. Ненужно заморачиваться с ручным освобождением памяти.
[02:16:37] <jordan36957> В обероне, нет беззнаковых типов. К примеру  если работать с графикой, там все данные начинаются от нуля, нужно взять тип большего размера или прийдётся при каждом обращении приводить тип. Как на форуме я смотрел тему блур на разных языках. Был оптимизированный пример на кп. short(short( что не добавляет читабельности. Получается, в теории это хорошо, но когда начинаешь использовать библиотеки, начинается самое весёлое.
[02:22:29] <valexey> недостатки конечно есть
[02:23:29] <valexey> основной недостаток плюсов - там невозможно выделить изолированные подязыки. не, то есть вот у тебя все с умными указателями, или вообще со соборщиком мусора (там это можно сделать!), но никто не мешает программисту взять и нагадить в память через сырой указатель.
[02:24:01] <valexey> то есть здание прекрасно пока не прилетит дятел (дятел-программист)
[02:24:12] <valexey> защиты от дурака мало, короче
[02:25:10] <jordan36957> -Wall? Много ошибок отбросит? Или много но ни все?
[02:26:58] <valexey> да это даже не ошибки
[02:27:12] <valexey> запись в память по адресу - это не ошибка сама по себе с точки зрения языка.
[02:27:50] <valexey> грубо говоря, нужна какая-то возможность сказать, что вот этим модулям нельзя самим память выделять
[02:28:00] <valexey> а вот этим - нельзя работать с сырыми указателями
[02:28:12] <valexey> а вон тем - нельзя использовать плавающую точку (float/real/double)
[02:28:15] <valexey> и так далее
[02:29:49] <jordan36957> Как задействовать сборщик мусора? Нужно библиотеку подключить?
[02:32:07] <valexey> ну, ты же понимаешь что сборка мусора будет не для всех, а только для тех типов которые специально будут под это заточены :-)
[02:32:57] <valexey> http://www.hpl.hp.com/personal/Hans_Boehm/gc/simple_example.html
[02:32:59] <valexey> вот
[02:33:02] <valexey> например
[02:33:33] <valexey> точнее это будет для тех, кто аллоцировал память через него
[02:34:00] <jordan36957> Да я понял.
[02:35:47] <valexey> так что в общем случае от утечек памяти это не спасет :-)
[02:36:04] <valexey> ибо нельзя запретить всем так выделять память, как им хочется
[02:37:40] <jordan36957> Я хочу использовать некий минимум с++, к примеру с--? Найти общие конструкции.
[02:38:13] <jordan36957> Но это не значит, что нужно везде использовать malloc вместо new
[02:43:31] <valexey> с-- не имеет особого отношения к С++ :-)
[02:43:42] <valexey> Это скорее уровень асма. Это ниже уровень чем просто Си
[02:44:01] <valexey> с-- используется частенько как промежуточный код
[02:44:49] <jordan36957> Нет, не язык с--, выделить из с++ минимальные стандартные конструкции без опп и их использовать.
[02:46:00] <jordan36957> с-- это как пример, просто не использовать все фичи. Правда если не знать все фичи, чужой код, который их использует я не пойму. Как то так.
[02:49:44] <valexey> Угу. Используй то что тебе действительно нужно, и не парься :-)
[03:26:39] <valexey> !@#! Винда!
[03:26:56] <valexey> Зачесалось ей перегрузиться пока я в Portal 2 играю. Ну и перегрузилась. Не спросив.