多范式声明式语言中的分布式编程
示例
为了展示分布式应用原语的使用,下面简化了一些示例,主要关注其通信结构。
名称服务器
这是一个客户端/服务器应用示例,服务器维护一个数据库,客户端可进行查询。这里实现了一个简单的名称服务器,它存储符号名称到数字的映射,能处理 “PutName n i”(存储名称 n 和数字 i)和 “GetName n i”(获取名称 n 对应的数字 i)消息。
名称服务器的实现如下:
nameserver = openNamedPort "nameserver" >>= ns_loop \_->0
ns_loop n2i (GetName n i : ms) | i=:=(n2i n) = ns_loop n2i ms
ns_loop n2i (PutName n i : ms) = ns_loop new_n2i ms
where new_n2i m = if m==n then i else n2i m
在 ns_loop
的第一条规则中,变量 i
通过求解等式约束来实例化;第二条规则则将修改后的映射 new_n2i
传递给递归调用。
例如,在机器 medoc.cs.rwth.de
上运行 nameserver
,在连接互联网的机器上执行:
client "nameserver@medoc.cs.rwth.de" (PutName "talk