<div dir="ltr">Well, I mean, it&#39;s not as though you invented them just for Swift. It&#39;s possible to evaluate sizeof an instance in C, C++, C#, D, Python, Rust... Removing this facility from Swift is a whole nother discussion from renaming.<div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 2, 2016 at 3:11 PM, Dave Abrahams via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
on Mon May 02 2016, Xiaodi Wu &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
<br>
&gt; I like it, but how do you accommodate sizeofValue, etc?<br>
<br>
</span>IMO you don&#39;t.  I added those years ago on a whim, when whims were what<br>
we had to guide development.  I&#39;m unconvinced they add value to Swift.<br>
<div class="HOEnZb"><div class="h5"><br>
&gt;<br>
&gt;<br>
&gt; On Mon, May 2, 2016 at 11:46 Dave Abrahams<br>
&gt; &lt;<a href="mailto:dabrahams@apple.com">dabrahams@apple.com</a>&gt; wrote:<br>
&gt;<br>
&gt;     on Sun May 01 2016, Xiaodi Wu &lt;<a href="http://xiaodi.wu-AT-gmail.com" rel="noreferrer" target="_blank">xiaodi.wu-AT-gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;     &gt; It&#39;s a bad habit of mine, I guess, to err on the side of suggesting<br>
&gt;     conservative<br>
&gt;     &gt; changes on the assumption that it&#39;ll be maximally acceptable. If there&#39;s<br>
&gt;     &gt; appetite for a more serious renaming, and as you say these are considered<br>
&gt;     &gt; relatively rarely used, then it&#39;s a world of possibility!<br>
&gt;     &gt;<br>
&gt;     &gt; We could do as Shawn suggested and follow precedent in some other<br>
&gt;     languages by<br>
&gt;     &gt; moving these functions out of the global scope. Perhaps these will meet<br>
&gt;     with<br>
&gt;     &gt; some satisfaction:<br>
&gt;     &gt;<br>
&gt;     &gt; ```<br>
&gt;     &gt; Memory.footprint(of:)<br>
&gt;     &gt; Memory.alignment(of:)<br>
&gt;     &gt; Memory.spacing(of:)<br>
&gt;     &gt; ```<br>
&gt;<br>
&gt;     I&#39;d rather have<br>
&gt;<br>
&gt;     MemoryLayout&lt;T&gt;.size<br>
&gt;     MemoryLayout&lt;T&gt;.alignment<br>
&gt;     MemoryLayout&lt;T&gt;.spacing<br>
&gt;<br>
&gt;     -Dave<br>
&gt;<br>
&gt;     &gt; On Sun, May 1, 2016 at 21:41 Dave Abrahams via swift-evolution<br>
&gt;     &gt; &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;     &gt;<br>
&gt;     &gt; on Sun May 01 2016, Xiaodi Wu<br>
&gt;     &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;     &gt;<br>
&gt;     &gt; &gt; On Sun, May 1, 2016 at 7:00 PM, Dave Abrahams via swift-evolution<br>
&gt;     &gt; &gt; &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; on Thu Apr 28 2016, Xiaodi Wu<br>
&gt;     &gt; &gt; &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; &gt; We all know and love sizeof(), but given that it&#39;s different from its<br>
&gt;     C<br>
&gt;     &gt; &gt; &gt; counterpart anyway, shouldn&#39;t these conform to Swift naming<br>
&gt;     guidelines?<br>
&gt;     &gt; In<br>
&gt;     &gt; &gt; other<br>
&gt;     &gt; &gt; &gt; words, after SE-0006, shouldn&#39;t these names be as follows?<br>
&gt;     &gt; &gt; &gt;<br>
&gt;     &gt; &gt; &gt; ```<br>
&gt;     &gt; &gt; &gt; size&lt;T&gt;(of: T.Type)<br>
&gt;     &gt; &gt; &gt; size&lt;T&gt;(ofValue: T)<br>
&gt;     &gt; &gt; &gt; stride&lt;T&gt;(of: T.Type)<br>
&gt;     &gt; &gt; &gt; stride&lt;T&gt;(ofValue: T)<br>
&gt;     &gt; &gt; &gt; align&lt;T&gt;(of: T.Type)<br>
&gt;     &gt; &gt; &gt; align&lt;T&gt;(ofValue: T)<br>
&gt;     &gt; &gt; &gt; ```<br>
&gt;     &gt; &gt; &gt;<br>
&gt;     &gt; &gt; &gt; There are obvious issues with two different things named `stride`, but<br>
&gt;     &gt; IMO<br>
&gt;     &gt; &gt; &gt; that&#39;s best addressed by renaming one of them; the real problem is<br>
&gt;     that<br>
&gt;     &gt; &gt; the word<br>
&gt;     &gt; &gt; &gt; stride is used in two different ways already. Thoughts?<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; These functions correspond to C and LLVM primitives and we consciously<br>
&gt;     &gt; &gt; kept those names because they are terms of art.<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; I recognize that this was the intention behind preserving the names<br>
&gt;     as-is.<br>
&gt;     &gt; The<br>
&gt;     &gt; &gt; thought process behind proposing a renaming was as follows:<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; * The Swift counterpart to C `sizeof()` is `strideof(_:)`. Thus,<br>
&gt;     although<br>
&gt;     &gt; the<br>
&gt;     &gt; &gt; *names* are treated as terms of art, not all of them are used to mean<br>
&gt;     the<br>
&gt;     &gt; art<br>
&gt;     &gt; &gt; for which they are terms (if you will).<br>
&gt;     &gt;<br>
&gt;     &gt; The specific meaning of sizeof in Swift comes from either LLVM or from<br>
&gt;     &gt; SIL, IIRC. It predates me, but it&#39;s supposed to correspond to what the<br>
&gt;     &gt; IRGen level of the compiler calls “sizeof.”<br>
&gt;     &gt;<br>
&gt;     &gt; &gt; To reinforce the separation between C primitives and these Swift<br>
&gt;     &gt; &gt; functions, C `offsetof()` has no Swift counterpart.<br>
&gt;     &gt;<br>
&gt;     &gt; Yes, that&#39;s part of the reason I&#39;d very much like to choose more<br>
&gt;     &gt; descriptive names if we are going to move away from the current<br>
&gt;     &gt; spellings. moving the parenthesis is a pretty weak cue that this thing<br>
&gt;     &gt; might be slightly different.<br>
&gt;     &gt;<br>
&gt;     &gt; &gt; * A survey of other languages suggests that, as terms of art, these<br>
&gt;     names<br>
&gt;     &gt; are<br>
&gt;     &gt; &gt; not always treated as a single word but as a phrase, by which I mean<br>
&gt;     that<br>
&gt;     &gt; the<br>
&gt;     &gt; &gt; preposition &quot;of&quot; can be subject to language-specific naming conventions.<br>
&gt;     &gt; For<br>
&gt;     &gt; &gt; example, in Rust you have `size_of()`, `size_of_val()`, etc.; in the .<br>
&gt;     NET<br>
&gt;     &gt; &gt; Framework, you have the `Marshal.SizeOf()` method; and even in LLVM you<br>
&gt;     &gt; &gt; apparently have (and this is based just on googling--my level of<br>
&gt;     &gt; familiarity<br>
&gt;     &gt; &gt; with LLVM is low to nonexistent) struct `AlignOf&lt;T&gt;`.<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; I don&#39;t know that<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; size(of: T.self)<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; is particularly descriptive usage, and if we were going to change them<br>
&gt;     &gt; &gt; so they didn&#39;t look like sizeof, strideof, alignof I&#39;d want to make them<br>
&gt;     &gt; &gt; far more descriptive. E.g.<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; memoryFootprint(Int.self)<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; or<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; bytesRequiredForStorage(Int.self)<br>
&gt;     &gt; &gt; standardByteAlignment(Int.self)<br>
&gt;     &gt; &gt; bytesBetweenArrayElements(Int.self)<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; etc.<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; To my mind, `size(of:)` is not moving away from using a term of art but<br>
&gt;     &gt; rather<br>
&gt;     &gt; &gt; following existing precedent in conforming use of the preposition to<br>
&gt;     &gt; &gt; language-specific conventions.<br>
&gt;     &gt;<br>
&gt;     &gt; The same argument could be made for “mapped” and “reduced.”<br>
&gt;     &gt;<br>
&gt;     &gt; &gt; Like you, I would be hesitant to suggest moving away from these terms<br>
&gt;     &gt; &gt; of art altogether.<br>
&gt;     &gt;<br>
&gt;     &gt; You misunderstand me. I&#39;m not hesitant about that at all. What I<br>
&gt;     &gt; dislike is the idea of being close-to-but-not-quite-the-same as the<br>
&gt;     &gt; source terms to which they correspond. The original terms are not<br>
&gt;     &gt; great, and these facilities are seldom used. They can afford to be<br>
&gt;     &gt; longer and more descriptive.<br>
&gt;     &gt;<br>
&gt;     &gt; &gt; I do think, though, that moving the preposition has the bonus of<br>
&gt;     &gt; &gt; visually suggesting however subtly that `size(of:) ` might have a<br>
&gt;     &gt; &gt; Swift-specific twist that makes it not a drop-in equivalent for C<br>
&gt;     &gt; &gt; `sizeof()`.<br>
&gt;     &gt;<br>
&gt;     &gt; I don&#39;t think subtlety is a virtue in this case.<br>
&gt;     &gt;<br>
&gt;     &gt; --<br>
&gt;     &gt; Dave<br>
&gt;     &gt;<br>
&gt;     &gt; _______________________________________________<br>
&gt;     &gt; swift-evolution mailing list<br>
&gt;     &gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt;     &gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;     &gt;<br>
&gt;<br>
&gt;     --<br>
&gt;     Dave<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br>
--<br>
Dave<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</div></div></blockquote></div><br></div></div>