deprecated

http://josephmansfield.uk/articles/marking-deprecated-c++14.html

Abstrakte Programmierung

Witzig finde ich die Idee, dass man einen String übergeben kann, der bei Aufruf der Funktion ausgegeben wird.

Im Prinzip müsste man deprecated nicht als Keyword einführen, sondern als „abstract“.

abstract deprecated( string str = null )
{
  switch this
  code
  {
    interprete:
      str
      then warning( "'foo' is deprecated: %s [-Wdeprecated-declarations]" % str )
      else warning( "'foo' is deprecated [-Wdeprecated-declarations]" )
    
    pre call:
      /* Funktion wird gerufen */
    
    post call:
      /* Funktion endet */

    as code : this; // wird deprecated code an eine Funktion übergeben, die ein code erwartet, so verliert deprecated foo das Attribut deprecated      
  }
  this is int:
  {
    post call:
      this = 0;  // Das ist natürlich Blödsinn, aber so könnte man z.B. die Aufrufe zählen, einen Breakpoint setzen, eine Variable als Property misshandeln...
  }
    
  this as ref:
  
    
  
};

Definition:

foo is deprecated code := return 0;
a is deprecated int;

oder nachträglich:

foo is code := return 0;
a is int;

deprecated foo;
deprecated a;

(foo ändert ab hier seinen Typ von (code) auf (deprecated foo). Vergleiche validate, vergleiche Access-Attribute)