> On Nov 11, 2017, at 1:57 PM, Chris Lattner <clatt...@nondot.org> wrote:
> 
> 
> 
>>> On Nov 11, 2017, at 10:17 AM, Chris Lattner via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> so I don't think there's a time constraint forcing us to consider the 
>>> "narrow" vs "huge" dimension. What's the best thing for the language and 
>>> tools in the long term? This is a feature that influences the semantics of 
>>> potentially any call site in all Swift code, which we'd have to live with 
>>> forever if we accepted it now. Opening up the compiler architecture to make 
>>> custom importers easier to write is a great solution to a ton of problems, 
>>> including yours I think, without adding complexity to the core language. 
>>> Experience in .NET land seems to show it's a great technique for 
>>> integrating dynamic systems with static type systems, without poking 
>>> unnecessary holes in the static language's type system
>> 
>> As I mentioned, I’m not familiar with F# type providers.  As I told you 
>> upthread, I will read about them and respond with an informed opinion when I 
>> have time.
> 
> I have done some quick reading about type providers, but I am certainly not 
> an expert.  I have a couple of questions that I’d appreciate your insight on:
> 
> Type providers seem like a (complicated!) compile-time form of meta 
> programming or compiler plugin.  How does this help interoperability with 
> dynamic languages, where the preponderance of values have types that are not 
> knowable at compile time?
> 
> To pick a specific example you are familiar with, this seems like it could 
> help in theory (though I suspect it would be be entirely impractical in 
> practice) to provide types for Objective-C methods that are coming from an 
> SDK where you have declarations.  
> 
> In contrast, it does *not* seem like it would help with the problem of 
> resolving members of “id” typed values in Objective-C, which is the crux of 
> the dynamic language problem.  If my understanding is correct, type providers 
> seem completely unhelpful for python interoperability, because you don’t know 
> the types of python values: anything loaded from a Python property or 
> returned by a Python function is the equivalent of “id”.
> 
> It’s entirely possible I’m missing something big.  If so, I’d appreciate a 
> pointer to something to read that explains how this works.  Thanks!

A type provider should let you provide custom logic for something the compiler 
sees as a module, which can answer name lookup queries by producing decls based 
on externally-available information. While Python is dynamic, Python culture 
doesn't go as wild with dynamic shenanigans as other languages do; there are 
established idioms for communicating some level of type information in doc 
comments (or more recently with first class syntax in Python 3), and people 
like code completion to work with their Python text editors, so there's 
incentive to use them. A type provider in Swift could address not only the 
syntax gap but the tooling gap from directly writing Python, since it could 
answer name lookup requests into an imported Python type by static analysis, 
and it could bring that declaration into Swift with doc comments and other 
metadata intact. This would let Python decls get wired up to Swift's code 
completion, quick help, and other IDE tooling.

Since statically-available type info still isn't going to be perfect in Python, 
and we don't want to be boxed in to type-annotated APIs, a type provider could 
be lax with its name lookup behavior and allow any known Python method to be 
found on any Python type, much like AnyObject's behavior for ObjC methods (and, 
like AnyObject, maybe tag them with IUO types so that type safety aficionados 
can test for their presence, and prioritizing the "good" type-matching methods 
in code completion results). I don't think that's a totally silly idea; much 
like AnyObject lookup is strictly an ObjC interop feature, I think there'd be 
benefit to keeping lax name lookup behavior a Python interop facilitator rather 
than a general language feature.

-Joe
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to