<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="" style="word-wrap:break-word; line-break:after-white-space">
<div class="">
<div class="x_BodyFragment"><font size="2" class=""><span class="" style="font-size:10pt">
<div class="x_PlainText">Hi swift-dev,<br class="">
<br class="">
I was trying to determine the most efficient way to store constants in swift without impacting compilation time. I started off by creating a python script (attached) that just creates a swift file with a single type with 1, 2, 4, 8, …, 1024 fields. The type
 could be enum, struct, or class. And the field declaration can be ‘case’ (for enum), ‘let’, or ‘static let’.<br class="">
<br class="">
Now to the interesting part, I plotted the size of the resulting .o file and this is what I got:<br class="">
<br class="">
</div>
</span></font></div>
<div class=""></div>
</div>
</div>
<div><img src="cid:2abbcede-fca6-44d2-9a84-72a6546d02a8@namprd21.prod.outlook.com">
</div>
<div style="word-wrap:break-word; line-break:after-white-space">
<div>
<div class=""></div>
<div class="x_BodyFragment"><font size="2" class=""><span class="" style="font-size:10pt">
<div class="x_PlainText"><br class="">
<br class="">
Looking at this it looks like enum/case is the way to go, however I also plotted the time it took to compile the swift file:<br class="">
<br class="">
</div>
</span></font></div>
<div class=""></div>
</div>
</div>
<div><img src="cid:9a4cb1fa-556b-48c0-87bc-8bf03458ceae@namprd21.prod.outlook.com">
</div>
<div style="word-wrap:break-word; line-break:after-white-space">
<div class="">
<div class=""></div>
<div class="x_BodyFragment"><font size="2" class=""><span class="" style="font-size:10pt">
<div class="x_PlainText"><br class="">
<br class="">
One thing that surprised me is that for some common cases (enum/case, class/let, and struct/let) the compilation time seems at least quadratic.<br class="">
<br class="">
Is this something that is well known or have I stumbled on a corner-case?<br class="">
<br class="">
I’m attaching both the script I used for generating the tests and the R script used for plotting. (Please excuse the small images, I tried sending the email with large images and it bounced).</div>
<div class="x_PlainText"><br class="">
</div>
<div class="x_PlainText">What is the most space/compile time efficient way to handle constants?<br class="">
<br class="">
Cheers,<br class="">
<br class="">
-Oscar<br class="">
<br class="">
<br class="">
</div>
</span></font></div>
</div>
</div>
<div style="word-wrap:break-word; line-break:after-white-space"></div>
<div class="" style="word-wrap:break-word; line-break:after-white-space"></div>
</body>
</html>