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:skaller@maxtal.com.au