@Araq, I have went through the new proposal. I have one suggestion to consider. 
In a new proposal sink was replaced with move to make self assignment works. 
Was: 
    
    
    proc =sink(a: var X, b: X)
    
    
    Run

Became: 
    
    
    proc =move(a: var X, b: var X)
    
    
    Run

Move makes self assigment safe, but makes let variables not movable, which is 
noticeable limitation.

Alternative suggestion: 
    
    
    proc =sink(a: var X, b: X): bool
    
    
    Run

It is the same sink as before, but returns a bool that indicates if the move 
has happened or not. If false was return then b should not be destroyed 
afterwards. Benefits: const and let variables can be moved without 
restrictions. Once you read it first it may sound as a fudge, in my opinion the 
fact that =move needs to change the source is even bigger fudge that is C++ big 
disadvantage. Let variables are quite common and useful and with =move their 
use will be discouraged. 

Reply via email to