Most network protocols address the issue of heterogenous hardware platforms,
including byte order of multi-byte integer representations. But an emerging
technique for distributing applications involves "mobile code" -- code that
can be transmitted across the network and executed on the other end.
Each of the following systems presents technology that can be used to distribute
applications across the web.
-
Inferno
-
From lucent. Lots of Plan9 heritage. Limbo is their language for distributed
apps, though inferno is a whole system: protocols, APIs, ...
-
Java --
evaluation
-
Java is a programming language similar in syntax to C++, but similar in other
ways to Smalltalk and Objective C. The system includes a bytecode compiler
and a virtual machine runtime. The runtime is typesafe and supports a form
of secure loading, so that code from untrusted sources can be added dynamically.
The demonstration app for Java -- HotJava -- is a complete web browser. It
demonstrates that (1) the Java interpreter has reasonable performance, and
(2) the Java class library is relatively complete, including the Abstract
Window Toolkit and thread-aware network I/O.
See also: OSF RI work on Java
-
Safe-Tcl
-- evaluation
-
Safe-Tcl is somewhat less ambitious performance goals than some of the other
systems here, but it is also somewhat more mature. It is deployed in a number
of mail user agents, to support "enabled mail," which is a platform that
can support voting, questionaires, forms, and a host of other applications.
The Surf-It browser demonstrates
use of Safe-Tcl in the web. At the time of this writing (11 Sep 95) it's
definitely alpha stuff, though.
I've heard of something called "hippo" too, though I haven't seen it.
-
Penguin
(perl5) -- @@evaluation pending
-
The perl5 gang has gotten in on the act (Jan 96). These guys have a long
history of delivering distributed applications to the net community. They've
tackled the problem of sending signed, encrypted code around. Their resource
accounting is tied to the OS accounting mechanism (e.g. rlimit()).
-
Python --
evaluation
-
Python is a really nifty object oriented language in the spirit of ABC and
Modula-3, by Guido Van Rossum at CWI (currently visiting at CNRI). It's used
quite a bit as an embedded/extension language in hypermedia projects, and
quite a bit for the sort of text processing and administrative scripting
that perl is often used for.
"Safe python," or restricted execution, is under development. The demonstration
app is -- you guessed it -- a web browser. Check out
Grail, their web browser
that supports applets.
-
Caml Special Light
-
MMM is a web browser
written using this ML dialect. It supports runtime safety in tow ways: a
strongly typed runtime, plus PGP signatures on downloaded code. The GUI is
Tk-based. Among browsers with sourcecode freely available (0.30 beta released
Apr 5, 1996), it's the fastest and smoothest I've seen (aside from the buggy/slow
tables implementation).
-
scheme48
-- evaluation
-
scheme48 is a bytecode scheme compiler and a VM.
Work at NEC
extends scheme48 with distributed computations: continuation passing across
the net.
-
Guile --
evaluation
-
The recent guile release includes some rather interesting
proof-of-concept implementations of interoperability with each of the above
systems: it's runtime has been integrated with the Tk library (and the Tcl
library in a way that's compatible with many of its extensions), supports
many of the systems programming features needed to support scsh, and a
Java class loader and a compiler for a C-like (and hence somewhat
Java-like) language.
-
Obliq
-- evaluation
-
Obliq is a lexically-scoped untyped interpreted language that supports
distributed object-oriented computation.
Obliq objects have state and are local to a site. Obliq computations can
roam over the network, while maintaining network connections.
Demonstration apps for Obliq include visual-obliq, a complete direct-manipulation
application builder ala Visual Basic.
-
Logicware
-
ACTOR like: Scheme with lazy evaluation Interpreted + Object Oriented + Forward
& Backward chaining rules
PROTOCOL - KQML (asynchronous) Remote Evaluation, Query & Update,
Notification, Brokering, Networking between servers (forward, pipe, register,
etc.)
-
NetREXX
-
IBM's tried-and-true REXX language souped up with objects and networking.
Runs on the Java VM. Non-commercial use license.
-
Codeworks
(Glyphic)
-
Prototype object system (similar to Obliq). Small system! Alan Kay's group.
-
ANDF
-
Architecture Neutral Distribution Format. Distribution format is a parse
tree (an intermediate step in compilation) rather than machine code instructions
or bytecodes. OSF/RI is now studying the relationshop to Java.
-
Juice
-
At UCI. Another mobile code technology based on parse trees rather than opcodes.
-
Aglets
-
The Aglets Library - Programming Mobile Agents in Java(tm)
-
GOMscript
-
interpreted C++-like language, DSOM integration. Supports migration of code
and state (mobile closures?)
The following technologies are related and interesting, but they don't appear
to be available on the net.