Информация об изменениях

Сообщение Re: почему волатильность меняет тип? от 02.10.2014 12:07

Изменено 02.10.2014 12:38 watchmaker

Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Почему волатильность это тип ? Я думал это хинт оптимизатору.

Совсем нет. Это не подсказка оптимизатору — это обязательное требование. Причём одно из самых важных с точке зрения реализации.
В стандарте (я приведу С++2003, так как там формулировки короче) в самом начале:

1.9 Program execution
[intro.execution]
1 The semantic descriptions in this International Standard define a parameterized nondeterministic abstract
machine. This International Standard places no requirement on the structure of conforming implementa-
tions. In particular, they need not copy or emulate the structure of the abstract machine. Rather, conform-
ing implementations are required to emulate (only) the observable behavior of the abstract machine as
explained below


6 The observable behavior of the abstract machine is its sequence of reads and writes to volatile data and
calls to library I/O functions.


То есть компилятор обязан соблюдать всего две вещи: сохранять последовательность I/O и работу с volatile. А весь остальной стандарт — это просто уточнение к тому, как сохранять эти две вещи :) Его допустимо даже не реализовывать полностью, если компилятор сумеет добиться такого же поведения с I/O и volatile каким-либо другим магическим способом :)
Re: почему волатильность меняет тип?
Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Почему волатильность это тип ? Я думал это хинт оптимизатору.

Совсем нет. Это не подсказка оптимизатору — это обязательное требование. Причём одно из самых важных с точки зрения реализации.
В стандарте (я приведу С++2003, так как там формулировки короче) в самом начале:

1.9 Program execution
[intro.execution]
1 The semantic descriptions in this International Standard define a parameterized nondeterministic abstract
machine. This International Standard places no requirement on the structure of conforming implementa-
tions. In particular, they need not copy or emulate the structure of the abstract machine. Rather, conform-
ing implementations are required to emulate (only) the observable behavior of the abstract machine as
explained below


6 The observable behavior of the abstract machine is its sequence of reads and writes to volatile data and
calls to library I/O functions.


То есть компилятор обязан соблюдать всего две вещи: сохранять последовательность I/O и работу с volatile. А весь остальной стандарт — это просто уточнение к тому, как сохранять эти две вещи :) Его допустимо даже не реализовывать полностью, если компилятор сумеет добиться такого же поведения с I/O и volatile каким-либо другим магическим способом :)