User Tools

Site Tools


at:tutorial:symbiosis

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
at:tutorial:symbiosis [2007/06/19 10:25]
jdedecker
at:tutorial:symbiosis [2013/05/17 20:25]
tvcutsem updated
Line 1: Line 1:
-<note>This Tutorial is still under heavy construction</note> 
  
-====== 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.  In other words, Java classes can be instantiated and messages can be sent to Java objects from within AmbientTalk. 
- 
-The reverse, namely that AmbientTalk objects can accessed from within Java is also possible.  AmbientTalk objects are reified at the Java level such that the Java language can be used to send messages and create new objects. 
- 
-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.  For example, AmbientTalk can use the extensive class library from Java and Java can benefit from AmbientTalk's superior concurrency abstractions. 
- 
-===== 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.  For example, referencing the Java Vector class from within AmbientTalk can be accessed with: 
- 
-<code> 
->def Vector := jlobby.java.util.Vector 
->><java:class java.util.Vector> 
-</code> 
- 
-===== Creating Java objects ===== 
-Java classes can be instantiated in AmbientTalk similar to how AmbientTalk objects are instantiated, i.e. by sending new to the wrapper for the class, which returns a wrapped instance of the Java class. Arguments to new are passed as arguments to  
-the Java constructor. For example, in the snippet code below **new** method is invoked on the class **Vector**.  
- 
-<code> 
->def aVector := Vector.new() 
->><java:[]> 
-</code> 
- 
-All constructors defined in the corresponding Java class can be accessed too.  For example,  the Vector class also has a constructor that takes an initial capacity as its argument.  This constructor can be called using an integer as the argument of new. 
- 
-<code> 
->aVector := Vector.new(30) 
->><java:[]> 
-</code> 
- 
-===== 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.  In the example, this means that all public methods and fields of the **Vector** class are accessible from within AmbientTalk.  Hence, to add elements to the vector we can simply invoke the add method on the AmbientTalk wrapper object. 
- 
-<code> 
->1.to: 10 do: { |i| aVector.add(i) } 
->>nil 
->aVector 
->><java:[1, 2, 3, 4, 5, 6, 7, 8, 9]> 
-</code> 
- 
- 
-===== Overloading ===== 
- 
-===== Concurrency ===== 
- 
-===== Distribution ===== 
- 
-===== Using Java wrappers ===== 
- 
-===== Symbionts ===== 
- 
-===== Conversions ===== 
- 
-===== Thread-Actor Symbiosis ===== 
at/tutorial/symbiosis.txt ยท Last modified: 2013/05/17 20:25 by tvcutsem