[swift-evolution] continuations - "extensions on steroids" idea

Eagle Offshore eagleoffshore at mac.com
Wed Nov 1 02:31:14 CDT 2017


"Continuation" already means something else in computer programming.  I would suggest you find another term.

https://en.wikipedia.org/wiki/Continuation


> On Oct 30, 2017, at 6:12 PM, Mike Kluev via swift-evolution <swift-evolution at swift.org> wrote:
> 
> a general feeling that there are two very different use cases of extensions -- one to extend own classes and another to extend other people classes; a lengthy discussion in a nearby thread; a disparity of features of class and it's extensions and different access right treatment depending upon whether the extension is in the same with the main class or a different file lead me to the following idea. hopefully you will find this idea useful and we may even see it one day in swift.
> 
> introducing class / struct / enum continuations.
> 
> in a few words the are:
> 
> 1) "extensions on steroids". in fact very similar to Objective-C "class extensions" but can be more than one and in more than one file.
> 
> 2) as good as the classes they continue (or other continuations they continue)
> 
> 3) can declare variables
> 
> 4) have full access to "private" members of the class or other continuations
> regardless whether they are in the same or in a different files. no need for "public/internal/module" fallbacks to pass though files boundaries. similarly the class itself can use private members of its continuations.
> 
> 5) "by invitation only" system. can only be written if declared by the class or some continuation of it.
> 
> 6) A particular continuation only defined once (of course). There can be an arbitrary number of different continuations to a class similar to extensions.
> 
> 7) alternative name considered: "extending" (as a noun). shall definitely be a different name than say, "extension" with some bracket-syntax variation - the two use cases are very different and shall be named differently.
> 
> 8) the particular syntax is preliminary of course. 
> 
> example:
> 
> ============= Some.swift ==================
> 
> class Some {
> 
>     private func private_method_of_class() {
> 
>         // *** can use private methods of continuations even if they are in a different file
>         private_method_defined_in_a_continuation()
>     }
>     
>     // *** "by invitation" system
> 
>     continuation Feature		// *** declaring a continuation
>     continuation SomethingElse	// *** Capitalized names, like classes
> }
> 
> ============= Some-Feature.swift ==================
> 
> // *** similar naming convetion to "Some+Feature.swift"
> // used for extensions, just with "-" instead
> 
> // *** this is merely a naming convention, no need to
> necessarily follow it, can put more than one thing into
> a file, the continuation can reside in the same file as
> the main class fie, etc.
> 
> continuation Feature of Some {
> 
> // *** as good as class itself. first-class citizen
> // *** same syntax can be used for structs and enums
> 
>     var x: Int // *** can declare variables
>     
>     private func private_method_defined_in_a_continuation() {
>         private_method_of_class()
> 
>         // *** can use private methods of the class or of other
> continuations even if they are in a different file
>     }
>     
>     // *** continuations are as good as classes and can
>     // *** declare other continuations if needed
> 
>     continuation CanDoThis
> }
> 
> ============= Any file ==================
> 
> continuation Feature of Some { // *** error, continuation is already defined
> }
> 
> continuation Other of Some { // *** error: Other is not a continuation of Some
> }
> 
> thoughts?
> 
> Mike
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list