This is an excellent explanation!  I think I (mostly) understand.

Thanks,
Jon

 
> On Aug 11, 2016, at 9:16 AM, John McCall <rjmcc...@apple.com> wrote:
> 
>> On Aug 11, 2016, at 1:52 AM, Jonathan Hull via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> Could someone explain in simple terms what the ABI is and what sorts of 
>> things might affect it?
> 
> The ABI for a compiled programming language is the set of rules for how all 
> of its interoperating features are implemented in the compiled result.
> 
> For example, in Java the primary ABI is the JVM specification plus some 
> common-sense rules about how language features are mapped to JVM features.  
> JVMs do not typically interoperate with other code at a direct binary level, 
> and so the details of actual memory layout are not ABI.
> 
> Not all language features require interoperation, or only require it a 
> certain kind of opaque interoperation.  For example:
> 
>  - Type aliases do not currently have any ABI impact because by design they 
> are erased at compile time.  However, a complete reflection design might 
> provide some mechanism for introspecting type-aliases at runtime, which would 
> require information about type aliases to be present in the compiled output; 
> the representation of that information would be ABI.
> 
>  - Closures in most programming languages do not allow external code to 
> modify their captured values; only the closure's invocation function can 
> access them, and that is generated together with the capturing code, so the 
> exact methodology of performing a capture is not ABI.  However, arbitrary 
> code can invoke the closure, and so the opaque representation of a closure 
> value and the process for invoking it are ABI.
> 
> And so on.
> 
> John.
> 
>> I had thought it was the layout in memory of structs/classes/etc… and how 
>> the program knows where to go to find a particular field.  This seems to be 
>> incorrect though, as I have seen many features that I would assume have some 
>> affect on this layout ruled “out of scope for phase 1”.  For example, I 
>> would think that many generics features would have an impact on the ABI, or 
>> the idea of COW (via secret boxing) for structs, or even union types.
>> 
>> At the very least, I would think that mix-ins would have a fairly 
>> significant effect.
>> 
>> I am obviously missing something here, and I want to provide constructive 
>> effort to the community (as opposed to distracting from the task at hand), 
>> so I would appreciate some clarification/guidance...
>> 
>> Thanks,
>> Jon
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> 

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

Reply via email to