On Thursday, 15 October 2015 at 10:11:06 UTC, Andrei Alexandrescu wrote:
Yes, and I am saying that it doesn't justify presence of `synchronized` keyword in the language at all, being historical legacy misfeature.

For a while we were of the opinion that we should let "synchronized" and "shared" be and move on with alternative features. Now we believe an incomplete language definition is damaging the language as a whole so we better make them fully defined and useful within their charter.

Lock-based synchronization has plenty of good uses and the scope locking defined by "synchronized" covers a large useful subset of it. We need to make it usable safely and without contortions, and this particular PR is a step along that way.

It's not a huge priority but since Andrej has only done the work, the main concern left is breakage of existing code, albeit much of that is incorrect or unnecessarily unsafe.

You are absolutely correct that incomplete definition is damaging. I can also agree with "plenty of uses" but hardly with "plenty of good uses" though. There are many situations of course where efficient concurrency is not critical and one can go away with straightforward mutex approach. But providing such semantics as language builtin implies it is encouraged and "official" approach and that is rather bad :(

To be honest I'd prefer it to go in "not really deprecated but pretend it doesn't exist" trash bin like scope storage class is.

the main concern left is breakage of existing code, albeit much of that is incorrect or unnecessarily unsafe.

This is a bit more delicate issue. This code is only incorrect and/or unsafe if used in multi-threaded environment and those fields are actually accessed. There isn't anything broken with such code per se. I agree it should be fixed (with a proper slow deprecation phase) but I am not happy about it.

Reply via email to