On Wed, 25 Nov 2020 19:05:19 GMT, Stuart Marks <sma...@openjdk.org> wrote:

>> @johnlinp In any case, you'd also need to update the surrounding prose; we 
>> need to remove this:
>>  returning the current value or {@code null} if absent:```
>
> @pavelrappo 
> 
>> What is the required level of fidelity particular (pseudo-) code has to have?
> 
> It's potentially a large discussion, one that could be had in the context of 
> my JEP draft http://openjdk.java.net/jeps/8068562 . However, speaking 
> practically, it's possible to focus the discussion fairly concisely: the main 
> responsibility of the `@implSpec` ("Implementation Requirements") section is 
> to give implementors of subclasses enough information to decide whether to 
> inherit the implementation or to override it, and if they override it, what 
> behavior they can expect if they were to call `super.compute`.
> 
> In this case, a null-value-tolerating Map implementation needs to know that 
> the default implementation calls `remove` in the particular case that you 
> mentioned. A concurrent Map implementation will also need to know that the 
> default implementation calls `get(key)` and `containsKey(key)` at different 
> times, potentially leading to a race condition. Both of these inform the 
> override vs. inherit decision.

@stuart-marks 

> Both of these inform the override vs. inherit decision.

So in this case - fixing the specification to match the default implementation 
seems to be the right call - as existing implementations that do not override 
are more probably depending on the current default behavior.

-------------

PR: https://git.openjdk.java.net/jdk/pull/714

Reply via email to