at:tutorial:symbiosis
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
at:tutorial:symbiosis [2007/06/19 10:58] – jdedecker | at:tutorial:symbiosis [2007/07/04 22:42] – jdedecker | ||
---|---|---|---|
Line 10: | Line 10: | ||
===== Symbiosis Architecture ===== | ===== Symbiosis Architecture ===== | ||
- | AmbientTalk has been implemented in Java. Because of this, Java plays two roles: it is both a symbiont language and the implementation language of AmbientTalk (and hence of the linguistic symbiosis itself). | + | AmbientTalk has been implemented in Java. Because of this, Java plays two roles: it is both a symbiont language and the implementation language of AmbientTalk (and hence of the linguistic symbiosis itself). |
{{: | {{: | ||
Line 51: | Line 51: | ||
</ | </ | ||
- | The AmbientTalk/ | + | The AmbientTalk/ |
==== Overloading ==== | ==== Overloading ==== | ||
Line 58: | Line 58: | ||
< | < | ||
- | Add code that shows how to disambiguate between overloaded methods | + | aVector.remove.cast(jlobby.java.lang.Integer)(1) |
+ | aVector.remove.cast(jlobby.java.lang.Object)(3) | ||
</ | </ | ||
- | |||
- | ==== Concurrency ==== | ||
===== Accessing AmbientTalk from within Java ===== | ===== Accessing AmbientTalk from within Java ===== | ||
- | ===== Using Java wrappers ===== | + | ==== Invoking AmbientTalk methods in Java ==== |
+ | Besides calling Java methods from within AmbientTalk it is also possible to call AmbientTalk methods from within Java. To illustrate this consider the code snippet shown below. | ||
- | ===== Symbionts ===== | + | < |
+ | def SymbiosisDemo := jlobby.at.tutorial.SymbiosisDemo; | ||
- | ===== Conversions ===== | + | def showSymbiosis() { |
+ | def javaDemo := SymbiosisDemo.new(); | ||
+ | |||
+ | def atObject := object: { | ||
+ | def ping() { | ||
+ | system.println(" | ||
+ | javaDemo.run2(self); | ||
+ | }; | ||
+ | def pong() { | ||
+ | system.println(" | ||
+ | 42 | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | javaDemo.run(atObject); | ||
+ | }; | ||
+ | |||
+ | self | ||
+ | </ | ||
+ | |||
+ | When an AmbientTalk object is passed as an argument to a Java method expecting an object of an interface type, the AmbientTalk object will appear to Java objects as a regular Java object implementing that interface. | ||
+ | |||
+ | < | ||
+ | package at.tutorial; | ||
+ | |||
+ | public class SymbiosisDemo { | ||
+ | public interface PingPong { | ||
+ | public int ping(); | ||
+ | public int pong(); | ||
+ | } | ||
+ | |||
+ | public int run(PingPong pp) { | ||
+ | return pp.ping(); | ||
+ | } | ||
+ | |||
+ | public int run2(PingPong pp) { | ||
+ | return pp.pong(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
- | ===== Thread-Actor Symbiosis ===== | + | If Java invokes a method declared in an interface with an overloaded method signature, all overloaded invocations are transformed into the same method invocation on the AmbientTalk object. In other words, the AmbientTalk object does not take the types into consideration. However, if the Java method is overloaded based on arity, the AmbientTalk programmer can take this into account in the parameter list of the corresponding AmbientTalk method, by means of a variable-argument list or optional parameters. Otherwise, the Java invocation may fail because of an arity mismatch. |
at/tutorial/symbiosis.txt · Last modified: 2013/05/17 20:25 by tvcutsem