<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="">Beyond whether or not a standard library provides a better simulation of "actual programming" than a standard library, making a Swift compiler in Swift is a <b class="">massive</b>&nbsp;undertaking. The Go maintainers started working on a self-hosting compiler 3 years after the language's initial release and it took them another two years to get it right.<div class=""><br class=""></div><div class="">Félix<br class=""><div class=""><div class="">
<br class=""><div><blockquote type="cite" class=""><div class="">Le 19 déc. 2015 à 20:06:48, Andrew Bennett via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" style="font-family: LucidaGrande; 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="">My code is often abstract and full of generics, but the standard library code does do several things that aren't the swift we all know and love, from my brief tinkering I've seen at least these things:<div class="">&nbsp;* It defines public protocols dependent on private protocols like&nbsp;<span style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;" class="">_MaxBuiltinIntegerType</span><div class="">&nbsp;* It uses special type annotations like&nbsp;<span style="font-family: Menlo; font-size: 11px;" class="">@_transparent</span></div><div class="">&nbsp;* It extensively uses macro-like files (See<span class="Apple-converted-space">&nbsp;</span><font face="monospace, monospace" class="">FixedPoint.swift.gyb</font>)<br class=""></div><div class="">&nbsp;* The&nbsp;<span style="font-family: Menlo; font-size: 11px;" class="">Builtin&nbsp;</span>module, where do I find that?</div><div class=""><br class=""></div><div class="">I think to a certain extent these things are probably necessary to get the work done and make it flexible, and I'm sure the need for them will decrease over time. However it does mean that the dev team doesn't have the same restrictions on design and implementation that we do. This also means that the dev team is essentially using a different version of Swift and that will inform their decisions on what Swift needs and how it should be used.</div><div class=""><br class=""></div><div class="">As for writing the compiler in Swift, I think this would be great, I haven't read Colin's article yet but it sounds like a valid concern.</div><div class=""><br class=""></div><div class="">It's a huge undertaking and perhaps something that can be done incrementally by the community as well. Chris Lattner has mentioned in the past that many of the devs working on Swift would love to do this:</div><div class=""><br class=""></div><div class="">From his twitter (<a href="https://twitter.com/clattner_llvm/status/613906970890801152" class="">https://twitter.com/clattner_llvm/status/613906970890801152</a>):</div></div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><span style="font-size: 13px; color: rgb(89, 132, 179); font-family: 'Helvetica Neue';" class="">@</span><b style="font-size: 13px; color: rgb(89, 132, 179); font-family: 'Helvetica Neue';" class="">siracusa</b>&nbsp;Many of us would love to rewrite the swift compiler in swift - it would crash a lot less, and be a lot more joyful for us.</div></div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: 'Helvetica Neue'; color: rgb(77, 77, 77);" class=""><span style="color: rgb(89, 132, 179);" class="">@<b class="">siracusa</b></span><span class="Apple-converted-space">&nbsp;</span>that said, we have a ton of other higher priorities that affect users of swift.&nbsp; Poor compiler hackers just have to suffer for now</div></div></blockquote><div class=""><div class=""><a href="https://twitter.com/clattner_llvm/status/613906586050826241" target="_blank" class=""></a></div></div><div class=""><br class=""></div></div><div class="gmail_extra" style="font-family: LucidaGrande; 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 class="gmail_quote">On Sun, Dec 20, 2015 at 11:40 AM, Colin Barrett via swift-evolution<span class="Apple-converted-space">&nbsp;</span><span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span><span class="Apple-converted-space">&nbsp;</span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div style="word-wrap: break-word;" class=""><br class=""><div class=""><span class=""><blockquote type="cite" class=""><div class="">On Dec 19, 2015, at 7:39 PM, Amir Michail &lt;<a href="mailto:a.michail@me.com" target="_blank" class="">a.michail@me.com</a>&gt; wrote:</div><br class=""><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class=""><br class="">On Dec 19, 2015, at 7:37 PM, Colin Barrett &lt;<a href="mailto:colin@springsandstruts.com" target="_blank" class="">colin@springsandstruts.com</a>&gt; wrote:<br class=""><br class=""><br class=""><blockquote type="cite" class="">On Dec 19, 2015, at 7:32 PM, Amir Michail &lt;<a href="mailto:a.michail@me.com" target="_blank" class="">a.michail@me.com</a>&gt; wrote:<br class=""><br class=""><br class=""><blockquote type="cite" class="">On Dec 19, 2015, at 7:21 PM, Colin Barrett &lt;<a href="mailto:colin@springsandstruts.com" target="_blank" class="">colin@springsandstruts.com</a>&gt; wrote:<br class=""><br class="">I’d recommend you read<span class="Apple-converted-space">&nbsp;</span><a href="http://tratt.net/laurie/blog/entries/the_bootstrapped_compiler_and_the_damage_done" target="_blank" class="">http://tratt.net/laurie/blog/entries/the_bootstrapped_compiler_and_the_damage_done</a>, which has a number of rebuttals to what you’ve said below.<br class=""><br class=""></blockquote><br class="">That’s an interesting article but it doesn’t address the issue of whether compiler code is more like normal programming than compiler standard library code.<br class=""></blockquote><br class="">Perhaps I don’t understand what you mean, but the article gives two good reasons why compiler code is special.<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; float: none; display: inline !important;" class="">Compiler standard library code tends to be very abstract and full of generics. Normal code isn’t like that.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class=""></div></blockquote><div class=""><br class=""></div></span>Speak for yourself ;-)</div><span class=""><div class=""><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class="">The first reason is that we understand a lot about how to design a compiler, much more than we understand about how to design other types of programs. The second follows:<br class=""><br class=""><blockquote type="cite" class="">[C]ompilers are an atypical class of program. In essence, a compiler is a simple batch pipeline process. A program is read in and translated to a tree; a series of tree transformations are applied; and eventually one of those trees is saved out as some sort of binary data (e.g. machine code or bytecode). Most of the intermediate tree transformations calculate a relatively simple bit of information about the program and create a slightly modified tree based on it. A few calculations crop up time and time again, such as: maps from variables to scopes or types; and stacks to determine closures. Significantly, and unlike most programs in the real world, there is no interaction with users: the compiler knows all it needs about the outside world from the moment it is called.<br class=""></blockquote><br class="">Personally, I think the main reason not to rewrite the Swift compiler is that it would be a distraction from improving the Swift language and other associated tools.<br class=""><br class="">-Colin<br class=""><br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">On Dec 19, 2015, at 4:41 PM, Amir Michail via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class=""><br class="">Compiler code is probably more typical of what most programmers write than library code and so would be ideal for suggesting further language evolution ideas.<br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></blockquote></blockquote></blockquote></blockquote></div></blockquote></div><br class=""></span><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=pQw7h83fWt3LLbgkfL4TSUL0weaZnVFZxDe5GShw4uRLzGJbydNlhtAT9sDS3rnlFVpsPKw8zaLfySiq6lNtkJXfHRc09BXTrEsLRCWq3M10mhAerVJilToWghM6x8-2FI0vuIQ5WAzoOIRlVHl0rOERHkqhr0OnWNJN9EBRaVH9ODwWrOXBy-2B3Bnqm3fmJXNh2DurGCq0w8wYAeThRRKd-2BQ-3D-3D" alt="" width="1" height="1" border="0" style="min-height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;" class=""></div><br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""><br class=""></blockquote></div><br class=""></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=iRI3beHTe3UxYAHTlV3lA38zIPfHMhyuRzgTmGKV6k40bJHZ6nUPY8SuFqKmFPyOvd5ld6hPgmoHoj-2F6MmHom4yTTnbw5hGz6yHXBWQjmLpPsnDR-2BXocYKzayY9ng-2BNDIO2jzNNAegjZfw2QY0zzPmArJna4imhnNdR9tCVQMiKJfGK0-2FnEEUdwEBkibrWbv9T2FBCCrEYwtMB-2FO8xIvTHYGaTK9ByUmGh0IGFnhfr4-3D" alt="" width="1" height="1" border="0" style="font-family: LucidaGrande; 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: LucidaGrande; 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: LucidaGrande; 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: LucidaGrande; 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-evolution mailing list</span><br style="font-family: LucidaGrande; 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-evolution@swift.org" style="font-family: LucidaGrande; 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-evolution@swift.org</a><br style="font-family: LucidaGrande; 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-evolution" style="font-family: LucidaGrande; 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-evolution</a></div></blockquote></div><br class=""></div></div></div></body></html>