at:introduction
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
at:introduction [2007/04/07 12:22] – tvcutsem | at:introduction [2008/07/15 12:19] (current) – * tvcutsem | ||
---|---|---|---|
Line 6: | Line 6: | ||
* **dynamically typed**, which is **not** the same as being untyped: AmbientTalk //values// are typed, but // | * **dynamically typed**, which is **not** the same as being untyped: AmbientTalk //values// are typed, but // | ||
* object-oriented, | * object-oriented, | ||
+ | * flexible: like Scheme, Smalltalk, Self and many other languages, AmbientTalk embraces the use of elegant and expressive **block closures** to achieve a level of reusability far exceeding that of Java or similar languages lacking true closures. | ||
* event-driven: | * event-driven: | ||
- | * distributed: | + | * distributed: |
* **symbiotic**: | * **symbiotic**: | ||
- | A word of warning, though: AmbientTalk is **not** a stable development platform. Rather, it is a research artifact used as a " | + | A word of warning, though: AmbientTalk is **not**: |
+ | | ||
+ | * a secure distributed computing platform. | ||
+ | * a customisable or language-neutral distributed computing platform. | ||
===== AmbientTalk in a nutshell ===== | ===== AmbientTalk in a nutshell ===== | ||
Line 36: | Line 40: | ||
| | ||
// engage in peer-to-peer service discovery | // engage in peer-to-peer service discovery | ||
- | | + | |
export: remoteInterface as: InstantMessenger; | export: remoteInterface as: InstantMessenger; | ||
whenever: InstantMessenger discovered: { |messenger| | whenever: InstantMessenger discovered: { |messenger| | ||
Line 47: | Line 51: | ||
An instant messenger object is created by invoking a function called '' | An instant messenger object is created by invoking a function called '' | ||
- | Within the lexical scope of the '' | + | Within the lexical scope of the '' |
The '' | The '' | ||
Line 69: | Line 73: | ||
}; | }; | ||
def buddyList := jlobby.java.util.HashMap.new(); | def buddyList := jlobby.java.util.HashMap.new(); | ||
+ | ... | ||
+ | }; | ||
</ | </ | ||
- | The '' | + | The '' |
- | Also interesting is the initialisation code of the '' | + | Also interesting is the initialisation code of the '' |
Now let us delve into the details of the local interface object: | Now let us delve into the details of the local interface object: | ||
Line 105: | Line 111: | ||
</ | </ | ||
This code should look familiar to Smalltalk/ | This code should look familiar to Smalltalk/ | ||
+ | |||
+ | Most curly braces in AmbientTalk denote first-class blocks. These never denote hard-wired syntax as in C or Java. The only exception are the braces used to delimit a method definition. | ||
</ | </ | ||
Line 124: | Line 132: | ||
< | < | ||
- | | + | |
export: remoteInterface as: InstantMessenger; | export: remoteInterface as: InstantMessenger; | ||
whenever: InstantMessenger discovered: { |messenger| | whenever: InstantMessenger discovered: { |messenger| | ||
Line 144: | Line 152: | ||
</ | </ | ||
- | The '' | + | The '' |
Finally, notice how AmbientTalk allows you to deal with //partial failures//: you can register two kinds of // | Finally, notice how AmbientTalk allows you to deal with //partial failures//: you can register two kinds of // | ||
Line 150: | Line 158: | ||
===== Conclusion ===== | ===== Conclusion ===== | ||
- | So, you read the introduction and are interested in all of the gory details of the language? In that case, you can go ahead and [[at: | + | You might wonder what is so special about the above example. After all, it is simply an application that sends simple strings across the network and displays them on the screen. But keep in mind all of the things you did **not** have to do: |
+ | * no explicit thread management | ||
+ | * not having to prevent data-level race conditions, not having to define locks, not having to debug the ensuing deadlocks | ||
+ | * not having to manually serialize/ | ||
+ | * not having to manage low-level socket connections | ||
+ | * no need to setup a name server or similar lookup service | ||
+ | * no annoying configuration files | ||
+ | * not one XML document in sight | ||
+ | * not having to manage complex buffering to ensure messages sent to disconnected objects are not lost | ||
+ | * no need to write the boring Singleton design pattern to make your classes look like objects | ||
+ | * no need to generate stubs, skeletons or other kinds of proxies to manage remote objects | ||
+ | |||
+ | Of course, we are not claiming that AmbientTalk is a good replacement for distributed computing standards such as CORBA or Jini, which are much more flexible, at the cost of increased complexity. AmbientTalk is simply a lightweight alternative for doing experimental research. | ||
+ | |||
+ | ===== Moving on ===== | ||
+ | |||
+ | So, you read the introduction and are interested in all of the gory details of the language? In that case, you can go ahead and [[at: |
at/introduction.1175941347.txt.gz · Last modified: 2007/04/07 12:31 (external edit)