I will acknowledge this idea is potentially inconsistent with many standard 
language practices however I’m interested in discussing the potential benefits 
of including this in Swift.

Swift has always had a lot of potential for being the one language (to rule 
them all) you code in whether it’s on client or server. However to do this you 
still have to implement some sort of bridge between the two systems. Whether 
it’s a REST API or web socket you have to step outside of Swift and you have to 
step outside of knowable interfaces (I.e., Server.call(api:”/route/users” 
withParams:.. <- You just have to know that route and which params it takes, 
yes you can wrap your RestAPI in a framework, but someone still has to write 
and maintain that framework which is just another bridge).

Here’s an alternative:

```
// Local
remote import “swift://localhost” // URL for framework.

try Session(apiKey:”ABC”)
let results = DataController.searchData(term: “Foo”)

```

```
// Remote
import AnyOtherClass
// remote import “swift://..."

remote class Session {
    init (apiKey:String) {
        
    }
}
remote class DataController {
    public static func searchData(term:String) -> Array<Data> {
        return MySQL.call(“SELECT * FROM data WHERE field LIKE %?%”, 
term).map(…);
    }
}

remote struct Data {
    let field:String
    let id:String
    ….
}

class InternalController {
    
}
```

When you import a remote framework it fetches the interfaces so you know how 
you to interact with the framework. You know which functions you can call and 
the parameters for each. There could be key words for synchronous vs 
asynchronous and while the actual compiled code would setup TLS calls between 
the two those calls could be optimized and compressed to send only necessary 
elements of the scope.

This could be looked at similarly to Node.js which features a lot of calling 
functions on the server from the client without having to setup a RestAPI. 
Perhaps thats a model to look at however node seems to have a lot closer 
connection between the client and server and as far as I know there is no code 
completion for server calls in any IDE. Beyond that the ability to share 
classes is certainly a step above.

Again this may be breaking way too many rules of language development however 
as shown above the simplicity it could bring to client server communication may 
worth it. It raises many considerations as well, Authentication for private 
remote interfaces, versioning, session tracking, cross platform support (as in 
other languages, for instance you could have a RestAPI router in addition to 
the remote classes).

Weston
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to