[swift-evolution] Object declarations

Chris Lattner clattner at apple.com
Sun Dec 13 21:44:48 CST 2015


-1 from me as well.  In addition to those points, syntax optimizing shared global state encourages its use.  This is problematic for threading and many other things as well.

-Chris

> On Dec 11, 2015, at 4:09 PM, Riley Avron via swift-evolution <swift-evolution at swift.org> wrote:
> 
> -1. Agreed for all of Jordan's reasons.
> 
> 
> Riley
> 
> On 11 December 2015 at 14:55, Jordan Rose via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> -1. Enforced singletons lead to code that can't be unit-tested. Local types are occasionally convenient and they can't be unit-tested either, but spending one extra line to name the thing isn't going to hurt. You also can't pick an initializer here (at least not in this version).
> 
> IMHO, this just adds "another kind of thing" just to make code shorter, and "shorter" is not the right goal for Swift.
> 
> Best,
> Jordan
> 
> 
>> On Dec 11, 2015, at 14:07, Marc Knaup via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> Hey guys,
>> 
>> I am working on a proposal which touches (and could even partially depend on) another interesting concept which I think would be a great addition for Swift.
>> 
>> Object declarations could be a way to declare a class or struct with exactly one instance. They are perfect for singletons, anonymous subclasses and to anonymously implement a protocol.
>> 
>> Here some examples how it could look like:
>> 
>> // singleton
>> object GlobalResource {
>>     func doSomething() { … }
>> }
>> 
>> let resource = GlobalResource
>> 
>> // could all be the same
>> resource.doSomething()
>> GlobalResource.doSomething()
>> GlobalResource.Type.doSomething()
>> 
>> 
>> // anonymous subclass
>> class ViewController: UIViewController {
>> 
>>     override func loadView() {
>>         view = object: UIView {
>>             // configure view
>>         }
>>     }
>> }
>> 
>> 
>> // anonymous protocol implementation
>> protocol TapHandler {
>>     func handleTap()
>> }
>> 
>> view.tapHandler = object: TapHandler {
>>     func handleTap() {
>>         // …
>>     }
>> }
>> 
>> 
>> Kotlin is an example for a a modern language which uses this concept:
>> https://kotlinlang.org/docs/reference/object-declarations.html <https://kotlinlang.org/docs/reference/object-declarations.html>
>> 
>> 
>> What do you think about such an addition?
>>  _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
>  _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151213/42fc6615/attachment.html>


More information about the swift-evolution mailing list