On Sun, Apr 24, 2016 at 10:24 AM, Fleshgrinder <p...@fleshgrinder.com> wrote:

> The invariant could also be added as an additional branch to the class
> instead of a method, since it would not work like a method.
>
>   class A {} invariant {}
>
>   function f() {} require {} ensure {}
>
> This would also align nicely with closures and anonymous classes, which
> is kind a problematic with annotations.
>

You are way off topic with this imho.

>
>   $A = new class {} invariant {};
>
>   $f = function () {} require {} ensure {};
>
> The only thing that remains that might be of interest to both is
> `@throws` but that was not discussed at all as of yet.
>
>   use Ns\SomeException;
>
>   @throws SomeException
>   function f() {
>
>   }
>
> This is at least how one would expect it to work and it is something
> that should be covered by annotations and not as part of the language.
> The ABNF should account for that:
>
> ANNOTATION    = "@" NAME [ " " VALUE ]
> NAME          = STRING
> VALUE         = QUOTED-STRING / PHP-REFERENCE / EXPRESSION
> QUOTED-STRING = ( "'" / DQUOTE ) STRING ( "'" / DQUOTE )
> EXPRESSION    = PHP-CODE ";"


> Where PHP references are any of the already possible ones:
>
>   use F\Q\C\N;
>
>   @annotation \F\Q\C\N
>   @annotation N
>   @annotation \F\Q\C\N::CONSTANT
>   @annotation N::CONSTANT
>   @annotation \F\Q\C\N::function()
>   @annotation N::function()
>   @annotation \F\Q\C\N::$variable
>   @annotation N::$variable
>
> I also though some more about function support for annotations and this
> would actually be a nice thing for userland.
>
>   annotation deprecated(Reflection $element, string $message = '') {
>     @trigger_error($message, E_USER_DEPRECATED);
>   }
>
>   @deprecated('because')
>   function x() {}
>
>   @deprecated
>   function y() {}
>

Attributes as proposed by Dimitry are not executing functions, they are
only metadata
that can be retrieved through reflection API. I think a python style
decorator approach
that you propose here, executing functions is not what the different
pro-annotations,
pro-attributes or pro-DesignByContract fractions want/need.

You are proposing something along the lines of AOP, which is an entirely
different beast
in my opinion.


> This would allow users to implement simple and easy reactive annotations
> in userland. Even if this could or should be an extension of the feature
> in the future, it should be thought about know. Simply because the
> brackets make sense if such a feature is to be implemented. ;)
>
> --
> Richard "Fleshgrinder" Fussenegger
>
>

Reply via email to