[plt-scheme] ann: erlang-scheme interop

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Tue Jul 8 09:50:01 EDT 2008

Cute! keep going - Matthias

On Jul 8, 2008, at 8:34 AM, Eric Sessoms wrote:

> I've put together a small scheme package to talk to erlang (attached).
>  It's still very much a toy and under development, but I wanted to
> release it early for anyone crazy enough to want to play with it.
> What it is:  Basically, it's a port of Distel from emacs lisp over to
> scheme.  It talks to erlang using its own protocol and impersonates an
> erlang node on the network.  It aims to provide an abstraction such
> that erlang processes look like scheme threads, and vice-versa.
> Communication from scheme to erlang is done with (a wrapper around)
> thread-send.  Messages from erlang to scheme get routed to thread
> mailboxes so that they can be picked up with thread-receive.
> What works: bi-directional communication between scheme and erlang,
> using native data-types and communication mechanisms in both
> languages.
> What doesn't (I did say it it's just a toy):  Linking is not yet
> implemented.  In erlang, "linking" establishes a connection between
> two processes such that if one dies the other is notified.  This is
> TBD.  Right now, scheme does not register with the erlang port-mapper,
> which means that scheme has to initiate contact with erlang.  Once
> scheme initiates contact, messages can flow both ways.  Lastly, much
> of the more interesting erlang functionality is implemented using
> higher-level protocols built on top of the primitive message passing
> (i.e., gen_server).  Most of this isn't yet done.
> Below are scheme and erlang transcripts from a play session.
> Welcome to MzScheme v4.0.2 [3m], Copyright (c) 2004-2008 PLT Scheme  
> Inc.
>> (enter! "erlang.ss")
>  [loading erlang.ss]
>  [loading etc]
>> (erlang-set-node-name! 'scheme at Azathoth)
>> (erlang-console)
>> (erlang-self)
> #(TYPE erlang-pid scheme at Azathoth 1 0 1)
>> (define t (erlang-node 'test))
>> (erlang-echo-test t "r u there?")
> #(#(TYPE erlang-new-ref scheme at Azathoth 1 #"\0\0\0\1\0\0\0\0\0\0\0\0")
>   "r u there?")
>> (erlang-rpc-call t 'echo 'echo "hello, erlang!")
> #(#(TYPE erlang-new-ref scheme at Azathoth 1 #"\0\0\0\2\0\0\0\0\0\0\0\0")
>   "hello, erlang!")
>> (thread-receive)
> "hello, scheme!"
>> (erlang-rpc-call t 'erlang 'display "w00t!")
> #(#(TYPE erlang-new-ref scheme at Azathoth 1 #"\0\0\0\3\0\0\0\0\0\0\0 
> \0") true)
>> (erlang-rpc-call t 'code 'get_path)
> #(#(TYPE erlang-new-ref scheme at Azathoth 1 #"\0\0\0\4\0\0\0\0\0\0\0\0")
>   ("."
>    "/usr/local/lib/erlang/lib/kernel-2.12.3/ebin"
>    "etc"))
> Eshell V5.6.3  (abort with ^G)
> (test at Azathoth)1> node().
> test at Azathoth
> (test at Azathoth)2> c(echo).
> {ok,echo}
> (test at Azathoth)3> {console, 'scheme at Azathoth'} ! "hello, scheme!".
> "hello, scheme!"
> (test at Azathoth)4>  
> "w00t!"<v01.tbz>_________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme

Posted on the users mailing list.