<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On Nov 19, 2016, at 9:27 AM, Jean-Daniel &lt;<a href="mailto:dev@xenonium.com" class="">dev@xenonium.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 19 nov. 2016 à 15:58, Alan Cabrera 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 class="">I’m not sure if this was proposed or not; or even if this is a Swift-ly way of doing things. &nbsp;It would be pretty handy to be able to declare init() functions in my module to register handlers. &nbsp;It’s a common pattern in enterprise software.<br class=""><br class="">Currently, I have to generate a lot of boilerplate code to emulate the behavior. &nbsp;I think it would be cleaner to have these global init() functions.<br class=""><br class=""></div></div></blockquote><br class=""></div><div class="">I’d rather like a swift attribute equivalent to :&nbsp;<span class="pln" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);">__attribute__</span><span class="pun" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);">((</span><span class="kwd" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(16, 16, 148);">constructor</span><span class="pun" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);">))</span></div><div class=""><span class="pun" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);"><br class=""></span></div><div class=""><span class="pun" style="white-space: inherit; margin: 0px; padding: 0px; border: 0px;">It will not force me to call my initializer init, and moreover it will let me declare multiple functions so I would be able to register multiples handlers from a single module without having to group all the register call into a single init() function.</span></div><div class=""><br class=""></div></div></div></blockquote></div><br class=""><div class="">I’m not quite following what “<span class="pln" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);">__attribute__</span><span class="pun" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);">((</span><span class="kwd" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(16, 16, 148);">constructor</span><span class="pun" style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; font-size: 13px; margin: 0px; padding: 0px; border: 0px; color: rgb(48, 51, 54);">))</span>” means; it looks like an LLVM implementation bit. &nbsp;Do you mean defining a new Swift declaration attribute named “constructor”? &nbsp;If so, I <i class=""><b class="">really</b></i> like that idea. &nbsp;I think that the specific attribute name “constructor” may be a bit confusing though, since it’s not really constructing anything specific. &nbsp;Maybe “startup” would be a more descriptive attribute name?</div><div class=""><br class=""></div><div class="">@startup</div><div class="">func registerHandlers() {</div><div class="">}</div><div class=""><br class=""></div><div class="">The attribute would also help the compiler and IDEs prevent direct calling of the startup functions, thus reinforcing/focusing the startup functions’ role as global startup functions. &nbsp;Maybe global teardown functions would be helpful as well.</div><div class=""><br class=""></div><div class="">I’m going to try goofing around with the idea on my fork.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></body></html>