A dream still held by many who can think beyond the next bug fix is provably correct software and the mathematical tools for realizing the dream. If sound mappings can be established between JSR-1214 and pi calculi there is the potential for strong assertions about applications using the JSR-121 APIs . This will allow architects and developers to move closer to designing quality in and further from the need to stamp defects out.JSR-121 associations with pi calculus and pi calculus relevance to mobile agent systems will stimulate interest in the isolation APIs.
- Link can Link instances ("channel names"), Isolate references ("processes"), (limited) "process state" and arbitrary data expressible as bytes as well as specialized types like DBDs1 and Isolate state events. Study of Milner2 suggests that Link seems to be at least as powerful as a pi calculus channel in terms of what can be sent on it. Also, the key quality of channels supporting the sending and receiving of channel names is supported by Link. So overlap between pi calculus and the Link abstraction seems undeniable.
- Isolation APIs clearly support full parallelism apart from the Link send/receive rendezvous (perhaps ameliorated by nonblocking links if LinkChannel5 makes it into Java).
- It isn't yet clear that isolation APIs provide a complete set of mappings to the pi calculus and it seems doubtful that a complete set of ideal mappings to more relevant calculi like delta pi3 can be defined. On the other hand almost all mappings between delta pi and existing Java have been made without anything more intrusive than a preprocessor, so there is room for optimism.
- So yes, JSR121 is clearly pi-derived in the sense that it has at least some direct mappings to pi calculus and the potential for the benefit that stems from them.
No. Control state cannot be reestablished , let alone namespaces or other resources. But this is no worse than for other mobility systems based on Java.
PI Calculus |
Isolation APIs |
Process |
Isolate |
Channel |
Link |
a<x> (output msg x on channel a) |
a.send(IsolateMessage.new<type of x>(x)) |
a(x) (input msg x on channel a) |
x = a.receive().get<type of x>() |
Restriction (channel creation) |
Link object instantiation, e.g. a = Link.newLink() |