3 ms·
I can’t read all of this now, mainly because I’m on mobile with limited time and it’s hard to squint at. But I was surprised that what I did read and search thr
by eyelidlessness 4y ago
I can’t read all of this now, mainly because I’m on mobile with limited time and it’s hard to squint at. But I was surprised that what I did read and search through the document makes only one mention of polymorphism (rank 2 polymorphism, which was a new term to me; a quick search seems to suggest this is the type system equivalent of closing over a type parameter, eg to create local generic function whose generic constraints are first constrained by their outer scope). And makes no direct mention of monomorphization in the code specialization section, but it does seem to hint in that direction. I’m probably looking for terminology but would be satisfied with the prose when I read through more.
What surprised me most so far, again having only read a portion so far, is the caveats around crossing module boundaries for analysis. I’ve been, frankly, surprised at how much this is expressed as a difficulty in far more dynamic environments like JS ESM, but where the module boundaries not always totally static but in practice almost always are. I’d expect that a much more static and controlled environment like Swift would not have so many challenges in that area. But maybe this is a misconception of how static Swift actually is? Probably so!
Adding this comment with more ignorance than insight mostly in hopes I come back to see more knowledgeable discussion when I return.
- kibwen 4y agoHaven't read the PDF but apparently it's only part one of three, so that may be covered by future installments.
- favorited 4y agoSwift's generics have some unique properties at module boundaries to allow for a stable ABI while enabling library evolution. To get additional background, you might be interested in this[0] conference talk (the paper's author is one of the co-presenters). Also, this post[1] by a Rust and Swift compiler engineer talks about what Swift does differently than other languages, and the tradeoffs that are involved. [0]https://www.youtube.com/watch?v=ctS8FzqcRug https://www.youtube.com/watch?v=ctS8FzqcRug [1]https://faultlore.com/blah/swift-abi/ https://faultlore.com/blah/swift-abi/
- slavapestov 4y agoThe whole thing is about polymorphism, but Swift calls that generics. Similarly “function specialization” is Swift lingo for monomorphization. The part about module boundaries is what allows separately-compiled and updated shared libraries to work (like the frameworks in the OS). There’s an @inlinable attribute to publish a function’s body to clients, but then if you update the library it won’t be picked up until clients are recompiled (which might be fine, for example a lot of standard library collection algorithms and so on are inlinable).