On 16/02/2013 15:19, Jacob Carlborg wrote:
On 2013-02-16 15:13, Ben Davis wrote:
As for 'volatile', there's some info at
http://dlang.org/deprecate.html#volatile about how it used to be
available for marking statements as 'do not optimise field accesses'.
The corrective action listed there is to use 'synchronized' instead. So
probably your best bet is to use 'synchronized' blocks wherever you
access the variables that you know are meant to be volatile.
Hope that helps :)
If you're interfacing with C you should just remove the volatile
statement/keyword.
"There is no volatile type modifier in D. To declare a C function that
uses volatile, just drop the keyword from the declaration."
http://dlang.org/interfaceToC.html
That's only telling you how to declare a C *function*, not a C struct
(or global). While you'll probably get away with it in practice, I think
dropping it from a struct is technically unsafe (and may break as a
result of future compiler optimisation improvements) unless you back it
up with the 'synchronized' strategy.
I was going to suggest __gshared, but for struct members it implies
static, so it's not what you want. There doesn't seem to be a way to
make a struct member 'volatile' for the purposes of interacting with C
(which seems to be a gap in the C support).