VIPER INTERPRETER VERSION 1
---------------------------

WHAT IS VIPER?
--------------

Viperi is an interpreter for the Viper language, which is
basically the same as Python. Many 'pure python' programs
should run with Viperi. Viperi is a testbed for the run time
system, which will be needed by Viperc, the Viper compiler.

Viper is principally written in Ocaml, with some C interfacing.
Ocaml is a procedural language in the ML family, providing
support for functional, object oriented, and procedural programming.
Memory is managed by an incremental, generational garbage collector.
Separate compilation is supported. High performance, rivalling C,
is reported for ocaml programs: the ocaml optimising compiler
generates assembly code.

These features make ocaml the language of choice for implementing
language processors.


WHO IS IT FOR
-------------

This version of Viper is mainly for Python enthusiasts.

However, the design is intended to support a full compiler
with type inference; and the complete production version
will therefore also target those with performance and integration
problems.

In addition, Viper is much easier to extend than CPython, due to the
power of the Ocaml implementation language.

Finally, the builtin features such the GUI require less client
customisation, configuration, etc.


OMISSIONS
---------

C extensions cannot be used at this time,
however many of the standard builtin library components have be provided,
including sys, pcre, strop, posix, marshal, errno, time. All these modules
except sys are provided as *.vy (viper) files, which primarily partition
the large set of builtin functions into modules.

The principal ommissions in the version are threading and sockets.
However, some of the other standard modules are incomplete.

The most serious omission at this time, however, is that __del__ methods
are not invoked.

EXTENSIONS
----------

Viper also contains some additional builtin functionality.

Rational numbers are standard, as is a complete GUI.
Strides in rvalue slices are implemented.
All the standard C assignment operators are provided.

Sensible radix notation for binary, octal, decimal, and hex
literals is provided (0b, 0o, 0d, 0x), and underscores may
be used sensibly in numbers.

The type system is generalised over Python by allowing arbitrary
objects to be types objects; failed attribute lookups for
an object proceed to lookup in the type object.
The standard viper file py_types.vy contains the type objects for
the standard types. [All happen to be classes]

BUGS
----

Oh yes, there are lots of them :-)

INSTALLATION REQUIREMENTS
-------------------------

You will need the standard Python distribution (www.python.org),
and either Linux to use the prebuilt binaries,
or Un*x and the Ocaml optimising compiler (caml.inria.fr)
to build from source. Ocaml must be built to use posix threads.

You will also need standard unix/gnu libraries including
readline, X, and you will also need Gtk installed.

Unpack the tarball in an empty directory.

LICENCE
-------

This is an evaluation version only. It may be modified for
evaluation purposes only. It may be redistribued as the
original, unmodified tarball only. This version is provided
at no cost (free) but it is not (yet) free software. Snippets of
code my be distributed for discussion purposes.

Copyright Maxtal P/L, 1999, Australia, All Rights Reserved.
See the LICENCE file for details. This licence is a temporary
measure.

SUPPORT
-------

Yes, please. I need funding to continue the project.
If you are interested in seeing further development,
in particular a relaxation of the license to free source,
and wish to contribute, either financially, as a tester,
or as a developer, please contact me:

 mailto:[email protected]