If we are going to allow variables to be callable, I think it should be independent of and orthogonal to dynamism.
If square-bracket subscript syntax is good enough for native Swift types to imitate being callable, then it is good enough for imported dynamic types as well. And if that syntax is *not* good enough for imported types, then it is not good enough for native types either.
If we ever get throwable properties, can this feature evolve to be implemented in such a way? That would make this feature more readable (try some.dynamic.property.chain vs. some?.dynamic?.property?.chain), far safer, and able to express proper errors. Frankly, I would gladly have traded the cleanness of property access for being able to throw errors now with try some().dynamic().property().chain(), but I guess that ship has sailed.
Also, as an aside, can the proposal be updated to reflect current Swift styling? It may be confusing to some if proposals don't reflect best practices in regards to recommended style (i.e. lower case enum cases).
Yes, this should compose directly and properly with throwing subscripts. I don't anticipate any problem with that, given that (at the end of the day) this is a syntactic sugar for existing underlying mechanics. Those mechanics define the semantics.
I have just installed the swift-DEVELOPMENT-SNAPSHOT-2018-02-17-a, the DynamicMemberLookup works.
Surprisingly, the compiler still produces the error message.
"Unknown attribute dynamicMemberLookup"