<div dir="ltr">I&#39;m used to the name &quot;directive&quot; from C preprocessor nomenclature, but I think it would best be used for all of #available, #selector, and #line, in addition to #if/#else/#endif.<div><br></div><div>Maybe &quot;#if&quot; is a &quot;conditional directive&quot;, and &quot;os(...) &amp;&amp; swift(...)&quot; is simply its condition.<br><div><br></div><div>-D  &quot;Defines&quot; something (a flag). Perhaps it &quot;defines a flag such that the &#39;#if flag&#39; condition is true&quot;.</div><div class="gmail_extra">
<br><div class="gmail_quote">On Wed, Jan 27, 2016 at 5:18 PM, Jordan Rose 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: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">Hi, everyone. This isn&#39;t <i>exactly</i> a language feature, but it&#39;s something that would benefit from the idea pool and bikeshedding that happens on the list. Simply put, what&#39;s the name of this feature?<div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>#if os(OSX)</div><div>#if swift(&gt;=3.0)</div><div>#if DEBUG</div></blockquote><br><div>And what&#39;s this command-line option? (not that most people are invoking Swift on the command line)</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>swift -DDEBUG main.swift</div></blockquote><br><div>---</div><div><br></div><div>The <a href="https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/compiler-control-statement" target="_blank">Swift Programming Language book</a> and the compiler diagnostics aren&#39;t quite consistent here:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>#if: &quot;configuration block&quot; (compiler), &quot;build configuration statement&quot; (book)</div><div>(the condition): &quot;build configuration expression&quot; (compiler), &quot;build configuration&quot; (book)</div><div>os(…) and arch(…): &quot;target configuration expression&quot; (compiler), &quot;platform testing function&quot; (book)</div><div>swift(&gt;=…): &quot;version requirement&quot; (compiler), (not yet in book)</div><div><br></div><div>-D flag: &quot;specifies one or more build configuration options&quot;</div></blockquote><div><br></div><div>On top of this, there&#39;s another problem: the term &quot;build configuration&quot; has long been used by Xcode to refer to &quot;Debug&quot;, &quot;Release&quot;, etc—a different mode of compilation that manifests itself as different build settings. Having two different concepts with the same name is never a great idea, and Xcode&#39;s feature definitely has seniority here.</div><div><br></div><div>---</div><div><br></div><div>Some things to keep in mind for this feature:</div><div><br></div><div>- All conditions are (currently) compile-time conditions.</div><div>- Code in the non-compiled block still has to parse…except if the predicate is &quot;swift(&gt;=…)&quot;, for obvious reasons.</div><div>- All conditions are boolean-valued predicates; the ones set on the command line are options (present or absent), not macros.</div><div><br></div><div>Here&#39;s my proposed names to get the discussion started:</div><div><br></div><div>- &quot;Conditional Compilation Block&quot; for the whole construct (from the #if to the #endif and everything in between).</div><div>- &quot;Conditional Compilation Directive&quot; for the #if line (and #elseif line). Not sure if the #endif line applies.</div><div>- &quot;Conditional Compilation Expression&quot; for the condition of a #if.</div><div>- &quot;Platform Compilation Features&quot; for all the function-like predicates (including &quot;swift(&gt;=…)&quot;, even though that&#39;s special.</div><div>- &quot;Custom Compilation Features&quot; for all the user-defined options.</div><div>- &quot;marks a custom compilation feature as present&quot; as the --help text for -D.</div><div><br></div><div>…but I&#39;d be happy if someone comes up with something better. (And I&#39;d like feedback on if any of these names are problematic in some other way.)</div><div><br></div><div>Thanks, all,</div><div>Jordan</div><div><br></div><div>P.S. Since this is only changing diagnostics and the book, I don&#39;t think it needs to go through the full evolution process, but someone else from the core team can correct me.</div></div><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>
<br></blockquote></div><br></div></div></div>