On Friday, 14 June 2013 at 22:17:16 UTC, bearophile wrote:
http://rosettacode.org/wiki/Distributed_programming#D

It kinda sounds like the description calls for something like what web.d does:

server:

import arsd.web;
class Foo : ApiProvider {
    export string hello(string name) { return "hello, " ~ name; }
    export int add(int a, int b) { return a + b; }
}
mixin FancyMain!Foo;

client:

import arsd.curl;
import std.stdio;
void main() {
    writeln(curl("http://example.com/server/hello?name=me";));
}

or javascript client:

Foo.hello("me").get(alert); // will pop up "hello, me"

or php client:

$api = new Foo("http://example.com/server/";);
echo $api->add(10, 20)->getSync(); // prints 30

(the code for this is generated automatically by web.d. I also wrote a bash [!] script to call arbitrary web.d functions remotely but have not actually done the same for D itself yet! The reason is for all my use cases, I can just call the D function without going through the http middle man because all the D is part of the same executable program. Interestingly, the D one would probably use a code generator like javascript rather than opDispatch like the bash and php examples do because the code generator could give more type safety.)



This is a generic protocol, can handle many things at once, and uses pretty natural data structures. (The returned values can be almost anything, but the arguments must be all types that can be converted from strings or arrays of strings.)


This actual example here uses several thousand lines of library code but if you think it would fit the description, I'm sure I can do a basic demo in far fewer lines using nothing but phobos.

Reply via email to