This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
at:tutorial:symbiosis [2007/06/19 10:58] jdedecker |
at:tutorial:symbiosis [2013/05/17 20:25] tvcutsem updated |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | < | ||
- | ====== Symbiosis with Java ====== | ||
- | |||
- | AmbientTalk is fully implemented in Java and runs on top of the JVM. Java provides an extensive class library that can be accessed from within AmbientTalk. | ||
- | |||
- | The reverse, namely that AmbientTalk objects can accessed from within Java is also possible. | ||
- | |||
- | This chapter explains how both sides of this symbiotic relationship between Java and AmbientTalk can be leveraged. The goal of this symbiotic relationship is to complement the advantages of both languages and to alleviate their disadvantages. | ||
- | |||
- | ===== 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). Figure \ref{fig: | ||
- | |||
- | {{: | ||
- | |||
- | ===== Accessing Java from within AmbientTalk ===== | ||
- | |||
- | |||
- | ==== Accessing Java classes ==== | ||
- | The complete set of classes that are available in the class path of a running JVM are accessible from AmbientTalk through the jlobby object. | ||
- | |||
- | < | ||
- | >def Vector := jlobby.java.util.Vector | ||
- | >>< | ||
- | </ | ||
- | |||
- | ==== Creating Java objects ==== | ||
- | Java classes can be instantiated in AmbientTalk similar to how AmbientTalk objects are instantiated, | ||
- | the Java constructor. For example, in the snippet code below **new** method is invoked on the class **Vector**. | ||
- | |||
- | < | ||
- | >def aVector := Vector.new() | ||
- | >>< | ||
- | </ | ||
- | |||
- | All constructors defined in the corresponding Java class can be accessed too. For example, | ||
- | |||
- | < | ||
- | >aVector := Vector.new(30) | ||
- | >>< | ||
- | </ | ||
- | |||
- | ==== Invoking methods on Java objects ==== | ||
- | Java objects appear as AmbientTalk objects whose field and method slots correspond to public instance-level fields and methods in the Java object. These are accessed or invoked as if they were plain AmbientTalk slots. | ||
- | |||
- | < | ||
- | >1.to: 10 do: { |i| aVector.add(i) } | ||
- | >>nil | ||
- | >aVector | ||
- | >>< | ||
- | </ | ||
- | |||
- | The AmbientTalk/ | ||
- | |||
- | ==== Overloading ==== | ||
- | 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' | ||
- | |||
- | < | ||
- | Add code that shows how to disambiguate between overloaded methods | ||
- | </ | ||
- | |||
- | ==== Concurrency ==== | ||
- | |||
- | ===== Accessing AmbientTalk from within Java ===== | ||
- | |||
- | ===== Using Java wrappers ===== | ||
- | |||
- | ===== Symbionts ===== | ||
- | |||
- | ===== Conversions ===== | ||
- | |||
- | ===== Thread-Actor Symbiosis ===== |