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/20 14:19] – jdedecker | at:tutorial:symbiosis [2007/07/27 10:25] – changes tvcutsem | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | < | ||
====== Symbiosis with Java ====== | ====== Symbiosis with Java ====== | ||
Line 10: | Line 9: | ||
===== 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 56: | Line 55: | ||
In Java methods can be overloaded based on the number of arguments and the types of the arguments. | In Java methods can be overloaded based on the number of arguments and the types of the arguments. | ||
If the Java method is overloaded based on arity (i.e. each overloaded method takes a different number of arguments), the number of arguments in the AmbientTalk invocation can be used to identify a unique Java method. Hence, overloading based on arity does not require special attention. If the Java method is overloaded based solely on argument types, the interpreter may derive that the actual arguments can only be converted from AmbientTalk to the appropriate Java types for one of the matching overloaded signatures. Again, if only one match remains, the unique match is invoked. In the remaining case in which the actual AmbientTalk arguments satisfy more than one overloaded method signature, the symbiotic invocation fails. It is then the AmbientTalk programmer' | If the Java method is overloaded based on arity (i.e. each overloaded method takes a different number of arguments), the number of arguments in the AmbientTalk invocation can be used to identify a unique Java method. Hence, overloading based on arity does not require special attention. If the Java method is overloaded based solely on argument types, the interpreter may derive that the actual arguments can only be converted from AmbientTalk to the appropriate Java types for one of the matching overloaded signatures. Again, if only one match remains, the unique match is invoked. In the remaining case in which the actual AmbientTalk arguments satisfy more than one overloaded method signature, the symbiotic invocation fails. It is then the AmbientTalk programmer' | ||
+ | |||
+ | Selection of the correct overloaded method is done using the '' | ||
< | < | ||
- | Add code that shows how to disambiguate between overloaded methods | + | >def remove := aVector.& |
+ | >>< | ||
+ | > | ||
+ | >>1 | ||
+ | > | ||
+ | >>< | ||
+ | > | ||
+ | >> | ||
+ | > | ||
+ | >>< | ||
</ | </ | ||
- | |||
- | ==== Concurrency ==== | ||
===== Accessing AmbientTalk from within Java ===== | ===== Accessing AmbientTalk from within Java ===== | ||
==== Invoking AmbientTalk methods in Java ==== | ==== Invoking AmbientTalk methods in Java ==== | ||
- | 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. Hence, messages sent to this wrapped AmbientTalk object appear as regular Java method invocations on an interface type. For example, the action listener in the chat example can be notified as if it were a normal Java object by performing | + | 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. |
+ | |||
+ | < | ||
+ | def SymbiosisDemo := jlobby.at.tutorial.SymbiosisDemo; | ||
+ | |||
+ | 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. | ||
< | < | ||
Line 86: | Line 119: | ||
} | } | ||
- | </ | ||
- | |||
- | < | ||
- | def SymbiosisDemo := jlobby.at.tutorial.SymbiosisDemo; | ||
- | |||
- | def showSymbiosis() { | ||
- | def javaDemo := SymbiosisDemo.new(); | ||
- | |||
- | def atObject := object: { | ||
- | def ping() { system.println(" | ||
- | def pong() { system.println(" | ||
- | }; | ||
- | |||
- | javaDemo.run(atObject); | ||
- | }; | ||
- | |||
- | self | ||
</ | </ | ||
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. | 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. | ||
- | ==== Conversions ==== | + | < |
- | ==== Thread-Actor Symbiosis ==== | + | >def test := / |
+ | >>< | ||
+ | > | ||
+ | ping! | ||
+ | pong! | ||
+ | >> | ||
+ | </ |
at/tutorial/symbiosis.txt · Last modified: 2013/05/17 20:25 by tvcutsem