Pull to refresh
0
0
Send message
If E1 has a signed type and a negative value, the resulting value is implementation-defined.

implementation-defined это не совсем то же самое, что и undefined. В данном случае «все понимают» (серьезно) что на 2's complement machine будет «правильная» реализация, и это так во всех разумных компиляторах.

Еще есть такой момент, что glibc — это стандартная библиотека языка C, ее интерфейсы описаны в стандарте C. По сути, она частично реализует язык C. Соответственно, она написана не на C, а на чем-то слегка его напоминающем, с кучей нестандартных расширений, платформо-зависимой магии и т.д.
А нельзя было просто restrict ко всем указателям дописать?
> я хочу делать вещи для реальных людей
> Это огромное количество работы, особенно когда на другом конце — человек, не очень хорошо объясняющий баги; а надо сказать, что, в общем, никто не объясняет баги хорошо.

Ну так если делать язык программирования не для программистов, а для «обычных людей»… вполне ожидаемый эффект.
Это примерно так же, как, увидев рукописную ассемблерую вставку, заявить что «С++ — говно, смотрите во что он транслируется! Как вы будете это поддерживать?!!!111».
Автор элементарно не понял к чему там это.
Это те самые товарищи которым local root — не уязвимость.
bugs.launchpad.net/calibre/+bug/885027
Турки наверное и прочие мигранты.
Обратите внимание, что пункт 1 ссылается на пункт 2 и сужает его

Ну наоборот же.
Попробуйте что ли перечитывать перевод перед тем как его выкладывать, некоторые фразы в тексте совершенно бессмысленны, некоторые — фактически неверны.
Нет. Все просто переписывают одно и то же по второму разу, потому что кое-кто смешивает политику и технологию.
Об этом тоже можно написать статью на Хабре :)
Очевидно, эти ценные ресурсы бросила на порт компания ARM. Догадайтесь с трех раз, зачем.

И конечно же у них есть возможность нормально протестировать.
Там JS используется фактически в качестве ассемблера, от исходной программы в нем остается не больше чем в x86 коде.
Так чем, в итоге, это объясняется? Что мешает процессору оставить кэшлайн в L1/L2?
Это из-за индивидуального управления каждым пикселем? Вроде обычные ленты стоят в несколько раз дешевле.
Вы забыли лицензию указать в исходниках.
Это почти так же круто, как ReactOS ;)
… а также досконально знаешь свой компилятор, или просто веришь что он простит тебе undefined behavior. Аккуратно анализируешь возможные переупорядочения инструкций вокруг каждого такого volatile (как компилятором так и процессором), и можешь обосновать что все они тебе подходят.

А на практике, наверное, просто показываешь пальцем в экран и говоришь — «ну ведь работает же!» :)
Может и в этом случае не выпилить, если в f() этот массив нетрививальным образом используется, например — убегает куда-нибудь в системную библиотеку. Я показывал именно ассемблерный листинг одного объектного файла — там без вариантов должна быть инициализация.

А вообще автор статьи прав, Gunnar какую-то ересь понес к делу не относящуюся и увел тему в сторону :)
И в этом примере массив тоже не используется. Компилятор, естественно, не заполняет массив нулями, если может доказать что никто никогда их не прочитает.

А вот пример когда массив используется. Показать memset?

void f(void*);

void g() {
int buffer[100] = {0};
f(buffer);
}

void g() {
0: sub $0x198,%rsp
int buffer[100] = {0};
7: xor %eax,%eax
9: mov $0x32,%ecx
e: mov %rsp,%rdi
11: rep stos %rax,%es:(%rdi)
f(buffer);
14: mov %rsp,%rdi
17: callq 1c <_Z1gv+0x1c>
18: R_X86_64_PC32 _Z1fPv-0x4
}
1c: add $0x198,%rsp
23: retq
Вы, конечно, шутите (или тролль). Со сравнимой вероятностью можно списать любое преступление на прилет злобного НЛО.

Information

Rating
Does not participate
Registered
Activity