Optional monitors suggestion

David Nadlinger via Digitalmars-d digitalmars-d at puremagic.com
Sun May 18 07:10:56 PDT 2014


On Sunday, 18 May 2014 at 10:33:53 UTC, Andrei Alexandrescu wrote:
> Maybe I misunderstood - I thought the change preserves 
> semantics. -- Andrei

There are two layers to the changes discussed in this thread. The 
first is to remove __monitor from Object. This is something I 
think we all agree on.

Now there are two possibilities for what to do when a user tries 
to synchronize on an instance that does not have a monitor field. 
One option would be to just fall back on a global lock lookup 
table of some sorts. This is what Yuriy's proposal does, and 
indeed preserves language semantics at the expense of a "silent" 
slowdown in these cases. The other is to outright forbid 
synchronizing on such objects. This is a small breaking change, 
but arguably the cleaner solution.

If we didn't have to worry about being backwards compatible, I'd 
definitely argue for the second solution. Java compatibility is 
not a very strong argument in my opinion. First, porting a Java 
application 1:1 is asking for  performance hazards (w.r.t. GC, 
...) anyway. Second, the no-synchronized-by-default design allows 
for clear error messages that immediately suggest the correct fix 
(add an attribute to the class declaration), and for mechanical 
porting, Java classes could just be translated to 
"@synchronizable class" or whatever.

David



More information about the Digitalmars-d mailing list