<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I’m trying to understand two of the ABI documents, &lt;<a href="https://github.com/apple/swift/blob/master/docs/ABI.rst" class="">https://github.com/apple/swift/blob/master/docs/ABI.rst</a>&gt; and &lt;<a href="https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md" class="">https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md</a>&gt;, with respect to a strong type-alias idea I just posted:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Monaco" class="">retype IDENTIFIER: IMPLEMENTATION-TYPE (“,” PROTOCOL)* {</font></div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Monaco" class="">// New methods and computed properties</font></div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Monaco" class="">// Maybe type-level stored properties</font></div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Monaco" class="">// Optionally export symbols from the original type to this one</font></div></blockquote></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Monaco" class="">}</font></div></blockquote><div class=""><br class=""></div><div class="">I think we would need a new ABI entry for re-types. I think the implementation type would have to be a value type (structs, enums, tuples, and possibly someday fixed-sized arrays); I couldn’t get how to make a retype work with a class’s witness information block (which are customized to fit Objective-C compatibility) and what would it mean to shadow something that is a pointer to the real information anyway. This also means that retypes are always value types themselves.</div><div class=""><br class=""></div><div class="">Looking at the ABI Stability Manifesto:</div><div class=""><br class=""></div><div class="">* A retype has the same data layout as its implementation type. It has the same trivial and bitwise-movable status as its implementation type.</div><div class="">* The value metadata for a retype needs a pointer to its implementation type’s value metadata. I don’t know if a retype should share its witness table with the implementation type, or have a separate table that has a pointer to the original’s table.</div><div class=""><br class=""></div><div class="">Looking at the ABI doc:</div><div class=""><br class=""></div><div class="">* A retype has the same layout as its implementation type.</div><div class="">* The common metadata layout of the type metadata has a new kind value for retypes.</div><div class="">* In addition to the common metadata layout, a retype’s metadata has a nominal type descriptor, a reference to the parent metadata record, a reference to the implementation type’s metadata record, then possibly a generic parameter vector.</div><div class="">* The nominal type descriptor needs a new kind for retypes. I’m not sure if it needs any field/case/payload data.</div><div class="">* I don’t know if new mangling operators are needed for retypes, or if they can reuse their implementation type’s codes.</div><div class=""><br class=""></div><div class="">Other:</div><div class=""><br class=""></div><div class="">* I guess methods and computed property getters &amp; setters of a type are listed with the general functions, with some marker of where the “self” pointer is. New methods of a retype would need new function entries, but I don’t know if exported methods would just reuse the implementation type’s method entry, or would new functions be created that just forward to the implementation type’s versions.</div><div class=""><br class=""></div><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">—&nbsp;</div><div class="">Daryle Walker<br class="">Mac, Internet, and Video Game Junkie<br class="">darylew AT mac DOT com&nbsp;</div></div>
</div>
<br class=""></body></html>