Puts compiler implementer hat on
One of the reasons I like having an attribute on the type definition itself (and not a member) is that the type checker doesn't having to go digging through all of the members of the type to determine whether it might be something it can call. It can check the attributes and, if not
@callable, quickly conclude that a value of that type is (or is not) callable. It sounds like a small thing, but the type checker makes this "can potentially call this thing?" determination a lot when it's type checking an expression, and particularly in large Swift modules, having to parse the bodies of type definitions in other source files just to establish whether there is a
@callable method there can add up to a compile-time performance problem.