The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Дэниэл Бернштейн выступил с инициативой создания Си-компилят..., opennews (??), 22-Дек-15, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


13. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +1 +/
Сообщение от Crazy Alex (ok), 22-Дек-15, 14:46 
Что за бред, простите. Оптимизатор - это одно. UB - совсем другое. Я, в общем-то, не совсем понимаю, как разумный человек может предлагать специфицировать UB, когда его ловить в статике надо и давать по рукам допустившим.

Ну ладно, определили всё, что он захотел. И смысл в этом? Софт прибить к этой штуке гвоздями?

Ответить | Правка | Наверх | Cообщить модератору

31. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от ram_scan (?), 22-Дек-15, 15:23 
Смысл в том, чтобы ввести предсказуемое поведение в компилятор, для того чтобы не выгребать граблей и не изобретать потом костыли навроде SecureZeroMemory() потому-что компилятор щщетает что "memset() тут has no effect". A то что оно косвенный эффект имеет ему поуху.
Ответить | Правка | Наверх | Cообщить модератору

45. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Crazy Alex (ok), 22-Дек-15, 15:59 
Ну, то есть соответствующий софт ничем больше будет не собрать.
Ответить | Правка | Наверх | Cообщить модератору

78. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  –1 +/
Сообщение от Аноним (-), 22-Дек-15, 18:18 
Пример такого компилятора в студию.

Я вот тоже считаю, определить UB - это бред, да к тому же еще и слабо соотносящийся с реальностью. Как, например, определить поведением в случае ошибок в арифметике указателей? В случае разыменовывания NULL? В случае использования освобожденной/неаллоцированной памяти? В случае переполнения знаковых целых? И так далее. Чтобы для всех таких моментов определить поведение, нужно создать новый язык, с C имеющий очень мало общего. И результат, наверняка, будет прибит гвоздями либо к конкретному железу, либо к VM.

Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

83. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 22-Дек-15, 18:34 
> Пример такого компилятора в студию.

Любой современный. Dead store elimination считается безопасной оптимизацией и применяется всеми распространёнными компиляторами C даже на нижнем уровне оптимизации.

Ответить | Правка | Наверх | Cообщить модератору

86. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 22-Дек-15, 18:47 
>> Пример такого компилятора в студию.
> Любой современный. Dead store elimination считается безопасной оптимизацией и применяется
> всеми распространёнными компиляторами C даже на нижнем уровне оптимизации.

Удаление присваивания возможно _только_ в случае, если компилятор может _доказать_, что оно ни на что не влияло. Например, присваивание локальной переменной в функции, после которого присвоенное значение никуда более не попадало. Включая указатели на эту переменную.

Практически ни один компилятор не удалит memset во внешнем или глобальном буфере, например, потому что результат этой операции может быть виден в другой части программы. Чтобы доказать обратное, всю программу надо собирать с LTO и знать, что используется стандартный memset, а не переопределенная реализация.

Ответить | Правка | Наверх | Cообщить модератору

92. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 22-Дек-15, 19:09 
>[оверквотинг удален]
>> Любой современный. Dead store elimination считается безопасной оптимизацией и применяется
>> всеми распространёнными компиляторами C даже на нижнем уровне оптимизации.
> Удаление присваивания возможно _только_ в случае, если компилятор может _доказать_, что
> оно ни на что не влияло. Например, присваивание локальной переменной в
> функции, после которого присвоенное значение никуда более не попадало. Включая указатели
> на эту переменную.
> Практически ни один компилятор не удалит memset во внешнем или глобальном буфере,
> например, потому что результат этой операции может быть виден в другой
> части программы. Чтобы доказать обратное, всю программу надо собирать с LTO
> и знать, что используется стандартный memset, а не переопределенная реализация.

Чтобы доказать прямое, программу тоже надо собирать с LTO. Но, как её не собирай, компилятор не занимается доказательствами.

Типичный шаблон работы с буфером, предназначенным для ценных данных:

(1) Выделение страницы памяти в локальном контексте. mlock(), mprotect().
(2) Получение ценных данных, их запись в буфер, выделенный в (1).
(3) Обработка ценных данных.
(4) memset(). goto (2)

И в этом цикле memset() с точки зрения компилятора — dead store.

Ответить | Правка | Наверх | Cообщить модератору

96. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 22-Дек-15, 19:22 
>> Удаление присваивания возможно _только_ в случае, если компилятор может _доказать_, что
>> оно ни на что не влияло. Например, присваивание локальной переменной в
>> функции, после которого присвоенное значение никуда более не попадало. Включая указатели
>> на эту переменную.
>> Практически ни один компилятор не удалит memset во внешнем или глобальном буфере,
>> например, потому что результат этой операции может быть виден в другой
>> части программы. Чтобы доказать обратное, всю программу надо собирать с LTO
>> и знать, что используется стандартный memset, а не переопределенная реализация.
> Чтобы доказать прямое, программу тоже надо собирать с LTO.

Не всегда. Я привел пример, когда это не требуется, и компиляторы так работают именно когда это допустимо.

> Но, как её
> не собирай, компилятор не занимается доказательствами.

Ошибаетесь.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру