<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">You will also want to have this code in the same module that is using this type.</div><div class=""><br class=""></div><div class="">If you're using these types from another module you're limited to unspecialized generics which are (unsurprisingly) very slow.</div><div class=""><br class=""></div><div class="">I assume these types are intended for your SwiftGL library. If they are only for internal use then these generic types should be fine but if they should ultimately be public I would recommend you use non-generic types for now.</div><div class=""><br class=""></div><div class="">And since you probably need to drop generics anyway it might make sense to simply wrap the respective GLKit types on OS X and iOS for the GLFloat variants as they are already highly optimized. I have some wrappers for the GLKMatrix and GLKVector types lying around in my own OpenGL wrapper (incidentally also named SwiftGL ;-)) which might save you some typing if you're interested...</div><div class=""><br class=""></div><div class="">- Janosch</div><div class=""><br class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">On 18 Dec 2015, at 22:36, Joe Groff via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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="">Do you have the optimizer enabled (using -O)? I see inlining happening as you'd expect. This:</span><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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 class="">let x = Vector2(x: 1, y: 1)</div><div class="">foo(x.x)</div><div class="">foo(x.r)</div><div class=""><br class=""></div><div class="">optimizes down to:</div><div class=""><br class=""></div><div class=""><div class="" style="margin: 0px; font-size: 10px; line-height: normal; font-family: Menlo;">&nbsp;&nbsp;%15 = integer_literal $Builtin.Int64, 1 &nbsp; &nbsp; &nbsp; &nbsp; // user: %16</div><div class="" style="margin: 0px; font-size: 10px; line-height: normal; font-family: Menlo;">&nbsp; %16 = struct $Int (%15 : $Builtin.Int64)&nbsp; &nbsp; &nbsp; &nbsp; // users: %17, %17, %20, %21</div><div class="" style="margin: 0px; font-size: 10px; line-height: normal; font-family: Menlo;">&nbsp; %17 = struct $Vector2&lt;Int&gt; (%16 : $Int, %16 : $Int) // user: %18</div><div class="" style="margin: 0px; font-size: 10px; line-height: normal; font-family: Menlo;">&nbsp; // function_ref foo.foo (Swift.Int) -&gt; ()</div><div class="" style="margin: 0px; font-size: 10px; line-height: normal; font-family: Menlo;">&nbsp; %19 = function_ref @_TF3foo3fooFSiT_ : $@convention(thin) (Int) -&gt; () // users: %20, %21</div><div class="" style="margin: 0px; font-size: 10px; line-height: normal; font-family: Menlo;">&nbsp; %20 = apply %19(%16) : $@convention(thin) (Int) -&gt; ()</div><div class="" style="margin: 0px; font-size: 10px; line-height: normal; font-family: Menlo;">&nbsp; %21 = apply %19(%16) : $@convention(thin) (Int) -&gt; ()</div></div><div class=""><br class=""></div><div class="">forwarding the constant 1 from the Vector2 constructor to foo as one would hope the optimizer would.</div><div class=""><br class=""></div><div class="">-Joe</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><div class="">On Dec 18, 2015, at 12:07 PM, David Turnbull via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I'm working on a math library for OpenGL. At the core of this are, of course, scalar types. The scalars are grouped into vectors of length 2, 3, and 4. The vectors are used to build matrices of all variations from 2x2 to 4x4.<div class=""><br class=""></div><div class="">In order to be performant, scalars, vectors, and matrices must all be values types aka structs. This way, for example, an Array&lt;Vector3&lt;Float&gt;&gt; can be passed directly to OpenGL without any copying. In my testing so far,&nbsp;Swift does this quite well.</div><div class=""><br class=""></div><div class="">Ideally, I'd do something like this:</div><div class=""><br class=""></div><div class=""><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);">public struct</span><span class="Apple-converted-space">&nbsp;</span>Vector2&lt;T:ScalarType&gt; : Array&lt;T,<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">2</span>&gt; {</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">var</span><span class="Apple-converted-space">&nbsp;</span>x:<span class="" style="color: rgb(112, 61, 170);">T</span><span class="Apple-converted-space">&nbsp;</span>{<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">get</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(187, 44, 162);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">self</span>[<span class="" style="color: rgb(39, 42, 216);">0</span>]}<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">set</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(187, 44, 162);">self</span>[<span class="" style="color: rgb(39, 42, 216);">0</span>] = newValue} }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">var</span><span class="Apple-converted-space">&nbsp;</span>y:<span class="" style="color: rgb(112, 61, 170);">T</span><span class="Apple-converted-space">&nbsp;</span>{<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">get</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(187, 44, 162);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">self</span>[<span class="" style="color: rgb(39, 42, 216);">1</span>]}<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">set</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(187, 44, 162);">self</span>[<span class="" style="color: rgb(39, 42, 216);">1</span>] = newValue} }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">}</div></div><div class=""><br class=""></div><div class="">But there's so much wrong with that. You can't use inheritance with structs. Array isn't really a struct; the docs say it is but really it's a reference to a special copy-on-write value type. Array can't be a fixed size. You can't use literals with generic placeholders. Ok, fine, I accept this isn't C++, let's move on to something Swifty.</div><div class=""><br class=""></div><div class=""><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">struct</span><span class="Apple-converted-space">&nbsp;</span>Vector2&lt;T:ScalarType&gt; {<br class=""></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">var</span><span class="Apple-converted-space">&nbsp;</span>x:<span class="" style="color: rgb(112, 61, 170);">T</span>, y:<span class="" style="color: rgb(112, 61, 170);">T</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;"><br class=""></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">var</span><span class="Apple-converted-space">&nbsp;</span>r:<span class="" style="color: rgb(112, 61, 170);">T</span><span class="Apple-converted-space">&nbsp;</span>{<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">get</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(187, 44, 162);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(79, 129, 135);">x</span>}<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">set</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(79, 129, 135);">x</span><span class="Apple-converted-space">&nbsp;</span>= newValue} }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">var</span><span class="Apple-converted-space">&nbsp;</span>g:<span class="" style="color: rgb(112, 61, 170);">T</span><span class="Apple-converted-space">&nbsp;</span>{<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">get</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(187, 44, 162);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(79, 129, 135);">y</span>}<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">set</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(79, 129, 135);">y</span><span class="Apple-converted-space">&nbsp;</span>= newValue} }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;"><br class=""></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">var</span><span class="Apple-converted-space">&nbsp;</span>s:<span class="" style="color: rgb(112, 61, 170);">T</span><span class="Apple-converted-space">&nbsp;</span>{<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">get</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(187, 44, 162);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(79, 129, 135);">x</span>}<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">set</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(79, 129, 135);">x</span><span class="Apple-converted-space">&nbsp;</span>= newValue} }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">var</span><span class="Apple-converted-space">&nbsp;</span>t:<span class="" style="color: rgb(112, 61, 170);">T</span><span class="Apple-converted-space">&nbsp;</span>{<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">get</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(187, 44, 162);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(79, 129, 135);">y</span>}<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">set</span><span class="Apple-converted-space">&nbsp;</span>{<span class="" style="color: rgb(79, 129, 135);">y</span><span class="Apple-converted-space">&nbsp;</span>= newValue} }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;"><br class=""></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">public</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">subscript</span>(i:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(112, 61, 170);">Int</span>) -&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(112, 61, 170);">T</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">get</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">switch</span>(i) {</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">case</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">0</span>:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(79, 129, 135);">x</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">case</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">1</span>:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">return</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(79, 129, 135);">y</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">default</span>:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(61, 29, 129);">fatalError</span>()</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">set</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">switch</span>(i) {</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">case</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">0</span>:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(79, 129, 135);">x</span><span class="Apple-converted-space">&nbsp;</span>= newValue</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">case</span><span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">1</span>:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(79, 129, 135);">y</span><span class="Apple-converted-space">&nbsp;</span>= newValue</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">default</span>:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(61, 29, 129);">fatalError</span>()</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">}</div></div><div class=""><br class=""></div><div class="">Functionally, this works fine. The x and y properties are the struct data. I can access vectors with subscripts, both coordinate properties, and color&nbsp;properties&nbsp; It's exactly what someone using an OpenGL vector type would expect. You can make these into arrays, use them in other structs which are made into arrays, and pass them to OpenGL just fine.</div><div class=""><br class=""></div><div class="">But I hit some performance issues. Let's use myvec.x as a baseline. This is always inlined and as fast as C.</div><div class=""><br class=""></div><div class="">You might expect myvec.r to have the same performance. It does in other languages but not Swift. The performance penalty is 20X. Yes, twenty times slower than myvec.x. The performance hit comes entirely from dynamic dispatch. 10X because it's not inlined, and another 10X because Vector2 is a template.</div><div class=""><br class=""></div><div class="">I can get rid of 10X of that by writing my own preprocessor for the template. There's only four scalar types that are valid for OpenGL so this really isn't that hard. But it's not a complete solution and preprocessing core languages features only to gain performance is an indication the compiler isn't doing optimization as well as it could.</div><div class=""><br class=""></div><div class="">Subscript access is the same 20X slower for the same reasons. The switch disappears into the noise. But I'm still tempted to use a precondition and cast to an UnsafePointer.</div><div class=""><br class=""></div><div class="">I'm aware you can mark a class final and a method private to enable inlining. Except this isn't a class and making the API private, well, it's not an API then. Forcing @inline(__always) doesn't seem to do anything.</div><div class=""><br class=""></div><div class="">Perhaps I could just not make this a module and leave everything internal. Supposedly it'd be inlined when whole module optimization is enabled. Except that doesn't happen.</div><div class=""><br class=""></div><div class="">How can I get these property aliases to be inlined? Is it possible today? Will it be possible in the future? Is there a different pattern for vectors that's better suited to the task?</div><div class=""><br class=""></div><div class="">-david (<a href="https://github.com/AE9RB/SwiftGL" class="">https://github.com/AE9RB/SwiftGL</a>)</div><div class=""><br class=""></div><div class=""><br class=""></div></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=RoDF4MveSEMYBIqIJA6ub1g8cOZ-2BVYvqV-2FqygPhjPn8MpF3Xuds993lZR4HOlyiwZAJysveufABQxFihu2gYKoTziSw4u2T7rBbJJ505MR08C-2BIdXoqvKYv2EFpUm6V244BMNxCNumioPMq-2Fe7m-2Bp3y-2BGEJfYZ5Gl4doRdHEdJJUprzvxWqUo5A-2Bg0PxmZs17ZR-2BBErijj4QwWoQ2x5ATf-2Bo2gb3zi53A2f17DeS38k-3D" alt="" width="1" height="1" border="0" class="" style="height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;"><span class="Apple-converted-space">&nbsp;</span>_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-users" class="">https://lists.swift.org/mailman/listinfo/swift-users</a><br class=""></div></blockquote></div><br class=""></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=TgVqANlJg1jmZHvvWyiennS7-2BVfVoMMKBBaiUKdUvoaju-2B5gXIbivEB-2FdImos-2F7jEZoACM7cSmP6NBtAPF2U1u9QuB8PKS-2BbTY0ZdlwVODhFX9J0H2-2BI1nMgZzStJBG9WC8cYUrXjRMs9k6pGnjgfw-2FB3cSnpAvKZPpoo0uVZiL-2BaQBtgO4F3MWZhzfvJLQ1PcX3v7e8IlVaoQSin8ktABTMox3xfSl4rm0U1F55NXw-3D" alt="" width="1" height="1" border="0" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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; height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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 class="Apple-converted-space">&nbsp;</span>_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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; font-size: 12px; font-style: normal; font-variant: 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-users mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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-users@swift.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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-users@swift.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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-users" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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-users</a></div></blockquote></div><br class=""></body></html>