Re: Are there real use cases with the Java access modes?

Alex Otenko via Concurrency-interest <[email protected]> Mon, 19 Jul 2021 00:06:51 +0100
Newsgroups gmane.comp.java.jsr.166-concurrency
Message-ID <CANkgWKgHXMe0DXzo6cjx4y-7YZ_DQw=BhZ3kS5Tk=T4re6=xFA@mail.gmail.com>
I think it is a worthwhile challenge to claim that there is real code that
is free from races, if only all the variables were volatile.

I'd like to see such code.

Somehow I doubt that there is a lot of correct code routinely produced
without consideration of happens-before and the whole memory model shebang.

Alex

On Sun, 18 Jul 2021, 18:54 Gregg Wonderly, <[email protected]> wrote:

> Good software design always includes the notion of least surprise.  In
> which other languages are there examples of Volatile or other optimizations
> that rewrite code to be incorrect based on what the code reads?  There is
> literally no advantage to this rewrite.  Developers can write this code
> exactly if they believe it is beneficial to them.  But having it done by
> default, is a giant surprise and in fact drives people away from Java
> because this looks like a bug, and the compiler still contains zero
> warnings about volatile optimizations that may change logic to not be what
> the code reads.
>
> Literally every single volatile read escape optimization should be issuing
> warnings to the user that their code will not be executed more than once.
> You continue to insist that this is rare code while it is the single most
> common mechanism for controlling UI actions.  Whether it’s a boolean or an
> object reference, this optimization is a huge detriment to new developers
> trying out Java desktop apps.
>
> Gregg Wonderly
>
> Sent from my iPhone
>
> On Jul 18, 2021, at 2:35 AM, Alex Otenko <[email protected]>
> wrote:
>
> 
> The simple truth is that there are more ways to write incorrect code than
> there are ways to write correct code. Complex state changes cannot be
> assumed to work correctly, when done concurrently.
>
> And the things that count for "complex" - anything beyond a single bit
> flip 0->1, and never back 1->0, is complex.
>
> There is no point in forbidding one optimisation for the sake of one type
> of system where that's the only problem.
>
> Alex
>
> On Sun, 18 Jul 2021, 05:13 Gregg Wonderly via Concurrency-interest, <
> [email protected]> wrote:
>
>> Yes this was changed at the sane time the JMM defined  and caused
>> implementation of volatile to happen.
>>
>> While this is legal because of the JMM, it causes broken code to happen
>> without the user really understanding why it could happen and that it will
>> happen.  It’s different in significant ways from cache coherency, and it
>> worked prior to JDK1.5.  I still believe that volatile creates a giant
>> surprise.  This is an optimization behavior that “breaks” code without the
>> user electing to have such an optimization performed!
>>
>> The default variable declaration should be volatile and a different
>> mechanism should be necessary to get non-volatile optimizations to happen.
>> A user should never, ever, be able to write non-working code using default
>> language constructs.
>>
>> Look at the past examples in C-Language and C++ etc.  Things like
>> Register optimizations and many other constructs required the user to break
>> their code, rather than that being the default behavior!
>>
>> Gregg Wonderly
>>
>> Sent from my iPhone
>>
>> On Jul 17, 2021, at 5:05 PM, Shuyang Liu <[email protected]> wrote:
>>
>> Thanks you!
>>
>>  I guess this is before Java 9? So I think “nonVolatileRefExpr” is
>> equivalent to a plain access in this case. The compiler probably identified
>> it as a local access since it is not marked as volatile (then its indeed
>> equivalent to an infinite loop, which makes the transformation valid). Do
>> you know if there’s any applications/bug report with this pattern?
>>
>> Best Regards,
>> Shuyang
>>
>> On Jul 17, 2021, at 1:46 PM, Gregg Wonderly <[email protected]> wrote:
>>
>> One of the standing problems I have is optimizations around non-volatile
>> value references.  Currently, there are visibility optimizations that turn
>>
>> while( nonVolatileRefExpr ) {}
>>
>> Into
>>
>> if( nonVolatileRefExpr ) { while( true ) {} }
>>
>> Which creates infinite loops.  This makes one of the most common types of
>> applications written in Swing to fail to work as the code is written.
>>
>> Gregg Wonderly
>>
>> Sent from my iPhone
>>
>> On Jul 17, 2021, at 4:33 PM, Shuyang Liu via Concurrency-interest <
>> [email protected]> wrote:
>>
>> 
>> Hello,
>>
>> My colleagues and I have been working on a formal model for the Java
>> access modes that is added since Java 9 [1]. Are there any popular use
>> cases of access modes in real world applications/frameworks/libraries? We
>> would like to see how our current formal model works in real examples.
>>
>> Thanks you,
>> Shuyang Liu
>>
>> [1]. Using JDK 9 Memory Order Modes
>> http://gee.cs.oswego.edu/dl/html/j9mm.html
>> _______________________________________________
>> Concurrency-interest mailing list
>> [email protected]
>> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>>
>> _______________________________________________
>> Concurrency-interest mailing list
>> [email protected]
>> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>>
>

_______________________________________________
Concurrency-interest mailing list
[email protected]
http://cs.oswego.edu/mailman/listinfo/concurrency-interest