<html><head></head><body>There is no data type problem I'm trying to solve, also I could life with anonymous tuples.&nbsp;<div><br></div><div>Remember the old VFL (Visual Format Language) for AutoLayout? Right now I'm building a small library which will do the same thing with some extra options.</div><div><br></div><div>Enforced argument labeling will result in some good syntax sugar for my library.</div><div><br></div><div>For example a VFL string "H:|-10-[view]" might look lile this '|-(margin: 10)-(view)' with some custom operator magic, labeled tuples and actual view instances compared to the old string parsing version.</div><div><br></div><div>Lets say I want to build a more complex VFL layout:</div><div><br></div><div>|-(margin: 10, option: .CenterBoth, priority: 400)-(view)-(otherView)-|</div><div><br></div><div>Developer A might just ignore the labeling and write:&nbsp;<font face="UICTFontTextStyleBody"><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">|-(10, .CenterBoth, 400)-(view)-(otherView)-|</span></font></div><div><font face="UICTFontTextStyleBody"><span style="-webkit-text-size-adjust: auto;"><br></span></font></div><div><font face="UICTFontTextStyleBody"><span style="-webkit-text-size-adjust: auto;">A half year later developer B will read this code and wonder whats the meaning of these values of the tuple.</span></font></div><div><font face="UICTFontTextStyleBody"><span style="-webkit-text-size-adjust: auto;"><br></span></font></div><div><font face="UICTFontTextStyleBody"><span style="-webkit-text-size-adjust: auto;">In your example you're totally right that using internal anonymous tuples might be easier but as you said yourself one could reconstruct the tuple with the corresponding labels.<br></span></font> <br><div class="bloop_sign"><div>--&nbsp;<br>Adrian Zubarev</div></div> <p class="gmail_quote" style="color:#000;">Am 20. April 2016 um 17:40:57, William Dillon (<a href="mailto:william@housedillon.com">william@housedillon.com</a>) schrieb:</p> <blockquote type="cite" class="gmail_quote"><span><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div></div><div>



<title></title>


<div class="">At the moment, I'm against this (though it's possible
to convince me with sufficiently reasoned arguments).</div>
<div class=""><br class=""></div>
<div class="">The reason being is that if I want the protection
from the compiler, I think I would construct a struct for the
purpose. &nbsp;I don't believe that making a struct would create
enough overhead that a tuple would be preferable in this
case.</div>
<div class=""><br class=""></div>
<div class="">An example of a scenario where this change would be
inconvenient would be the case where you're building an application
composed of libraries using different conventions. &nbsp;Consider
that you're doing signals processing with complex numbers:</div>
<div class=""><br class=""></div>
<div class="">The filtering is coming from library A, that uses (r:
Double, i: Double):</div>
<div class="">func firFilter(input: [(r: Double, i: Double)], taps
[(r: Double, i: Double)]) -&gt; [(r: Double, i: Double)] { }</div>
<div class=""><br class=""></div>
<div class="">The source driver uses anonymous tuples (Double,
Double):</div>
<div class="">func getSamples() -&gt; [(Double, Double)] { }</div>
<div class=""><br class=""></div>
<div class="">And the plotting library (B) uses real and imaginary
spelled out (real: Double, imaginary: Double):</div>
<div class="">func plotSamples([real: Double, imaginary: Double)])
{ }</div>
<div class=""><br class=""></div>
<div class="">This is a somewhat contrived example, and I know that
it would be possible to re-construct the tuples so that they match,
but that would be ugly at best and inefficient at worst.
&nbsp;</div>
<div class=""><br class=""></div>
<div class="">What is the problem you're trying to solve that can't
be fixed using policy (thou shalt label tuple arguments) at your
organization, or structs?</div>
<div class=""><br class=""></div>
<div class="">Cheers,</div>
<div class="">- Will</div>
<div class=""><br class=""></div>
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Apr 20, 2016, at 6:23 AM, Adrian Zubarev via
swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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; margin: 0px;" class="">
<div id="bloop_customfont" style="margin: 0px;" class="">I would
like to discuss about the following topic.</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">Wouldn't
it be better to enforce argument labels on tuples types, if the
tuple type defines them?</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">
```swift</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">func
foo(tuple: (a: Int, b: Int)) { /* do something */ }</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">let test1
= (10, 100)</div>
<div id="bloop_customfont" style="margin: 0px;" class="">let test2:
(a: Int, c: Int) = test</div>
<div id="bloop_customfont" style="margin: 0px;" class="">let test3:
(Int, Int) = test2</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">
foo(test1)</div>
<div id="bloop_customfont" style="margin: 0px;" class="">
foo(test3)</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">/*</div>
<div id="bloop_customfont" style="margin: 0px;" class="">cannot
convert value of type '(a: Int, c: Int)'&nbsp;</div>
<div id="bloop_customfont" style="margin: 0px;" class="">to
expected argument type '(a: Int, b: Int)'</div>
<div id="bloop_customfont" style="margin: 0px;" class="">*/</div>
<div id="bloop_customfont" style="margin: 0px;" class="">
foo(test2)&nbsp;</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">```</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">Function
`foo` awaits a tuple of type `(a: Int, b: Int)` but `test1` and
`test3` are both just of type `(Int, Int)`.</div>
<div id="bloop_customfont" style="margin: 0px;" class="">As
expected `test2` will raise an error because it has indeed a wrong
type `(a: Int, c: Int)`.</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">I'd
suggest to enforce argument labeling on tuple types for better
readability, because wasn't it the idea behind labels inside
tuples?</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">
`foo(test1)` should raise an error `cannot convert value of type
'(Int, Int)' to expected argument type '(a: Int, b: Int)'` as long
as `test1` is not written like `let test1 = (a: 10, b: 100)` or
`let test1: (a: Int, b: Int) = (a: 10, b: 100)`</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">This will
impact current codebase if you used labels but provided tuples
without labels like the example above. The migrator could solve
this by providing labels automatically to tuples where this error
occurs.</div>
<div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div>
<div id="bloop_customfont" style="margin: 0px;" class="">I'm not
good at writing proposals for the GitHub repository at all, so if
the community likes this idea, I'd be glad to see some help for
this little proposal.</div>
</div>
<br style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;" class="">
<div id="bloop_sign_1461158299115177984" class="bloop_sign" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;">
<div style="font-family: helvetica, arial; font-size: 13px;" class="">--&nbsp;<br class="">
Adrian Zubarev<br class="">
Sent with Airmail</div>
</div>
<span style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;" class="">
<span style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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; float: none; display: inline !important;" class="">swift-evolution mailing list</span><br style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;" class="">
<a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;" class="">swift-evolution@swift.org</a><br style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;" class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div>
</blockquote>
</div>
<br class="">


</div></div></span></blockquote>
    </div></body></html>