Comparison to HotJava
[This document needs to be updated.]
The similarities between Grail and Sun's HotJava browser are
obvious:
- Both browsers are extensible using an interpreted,
object-oriented programming language (HotJava's extension language is
called Java, and resembles a simplified C++).
- Both are capable of executing extensions in a restricted
execution environment, where malicious or broken extensions are
prevented from harming the user.
- Grail borrows some terminology from Java (in particular
applet), and its syntax for the APP tag is nearly identical.
This is intentional. It is our belief that the world can cope with
multiple competing browser extension languages. Comparison of the two
systems is not served by using arbitrarily different
terminology. Using a suitable server set-up, it is even possible to
create HTML pages that are enhanced by either Java or Python applets
depending on which browser is used.
There also clear differences:
- Python as a programming language has been around, at least in
public, much longer than Java: Python was first released in 1991,
whereas Java and HotJava were first shown to the public in 1995.
- Python is free, while Java is proprietary technology that must be
licenced from Sun.
- Python is arguably a higher-level language than Java, with
built-in abstractions like associative arrays and arbitrary-precision
integers, for instance.
- Python has a richer library, and is quite usable for other
purposes than writing browser extensions.
- There are probably more Python programmers in the world than Java
programmers.
- Java is, in the words of its own designers, more of an
implementation language, while Python is more a scripting and
prototyping language.
- Finally, Python leverages off other free technology, such as the
Tk toolkit (ironically, also coming from Sun nowadays).
At a more tangible level, the development cycles for Python and Java
programs are quite different:
- Java requires explicit compilation (to byte-code, a kind of
virtual machine code) and separates the run-time environment (the
interpreter) from the development environment (the byte-code
compiler).
- Python integrates the parser, compiler and interpreter, thus
providing a more powerful and flexible run-time environment.
For example, it's quite doable to write a spreadsheet in Python which
invokes the Python interpreter's parse to parse and evaluate the
expressions entered by the user in its cells. In Python, since the
parser is a permanent part of the run-time environment, this is
trivial, using the built-in function eval()
. In Java,
the parser is an external program, and one would have to run it as a
sub-process, and it is likely that most users don't have access to it
at all, just like most PC and Mac users don't have access to a C
compiler.