[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?
@startup
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