[PATCH] D75574: RFC: Implement objc_direct_protocol attribute to remove protocol metadata

David Chisnall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 7 01:52:53 PDT 2020


theraven added a comment.

This feature looks generally useful.  A few small suggestions:

- This is really a way of transforming a formal protocol into an informal protocol.  Objective-C has had a convention of informal protocols since the '80s, but they're implemented as categories on the root class with no `@implementation`.  I'd suggest that `__attribute__((objc_informal_protocol))` or similar might be a better spelling for this, explicitly bringing the informal notion into the language.  A lot of the informal protocols in Cocoa could be better expressed using this and `@optional` methods than as categories on `NSObject`.
- Given that this doesn't depend on any features in the runtime (from the runtime's perspective, the protocol doesn't exist), I don't think it makes sense to have an `ObjCRuntime` method to query whether this is supported by the runtime.  We should enable it everywhere if it's going in anywhere.
- The changes required in CGObjcCGNU.cpp are fairly small and I agree that @rjmccall's proposal  for a callback-driven visitor would simplify the changes in both runtimes.
- The semantics are slightly confusing with the deep approach though.  Normally, if you iterate over the protocols that a class conforms to, you only see the ones that it directly conforms to.  With this model, you'd see indirect ones.  We might want to set some metadata to allow programmers to differentiate the two, or we might want to have a warning (off by default?) if an informal protocol conforms to a formal one, or simply disallow it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75574/new/

https://reviews.llvm.org/D75574



More information about the cfe-commits mailing list