[swift-evolution] Global init() functions

Alan Cabrera adc at toolazydogs.com
Sat Nov 19 12:07:27 CST 2016

> On Nov 19, 2016, at 9:27 AM, Jean-Daniel <dev at xenonium.com> wrote:
>> Le 19 nov. 2016 à 15:58, Alan Cabrera via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> a écrit :
>> I’m not sure if this was proposed or not; or even if this is a Swift-ly way of doing things.  It would be pretty handy to be able to declare init() functions in my module to register handlers.  It’s a common pattern in enterprise software.
>> Currently, I have to generate a lot of boilerplate code to emulate the behavior.  I think it would be cleaner to have these global init() functions.
> I’d rather like a swift attribute equivalent to : __attribute__((constructor))
> 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.

I’m not quite following what “__attribute__((constructor))” means; it looks like an LLVM implementation bit.  Do you mean defining a new Swift declaration attribute named “constructor”?  If so, I really like that idea.  I think that the specific attribute name “constructor” may be a bit confusing though, since it’s not really constructing anything specific.  Maybe “startup” would be a more descriptive attribute name?

func registerHandlers() {

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.  Maybe global teardown functions would be helpful as well.

I’m going to try goofing around with the idea on my fork.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161119/d0d03b76/attachment.html>

More information about the swift-evolution mailing list