-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Meevax is a programming language classified as Lisp-1.
Meevax has a independent programming language specification aspect, an its implementation aspect, a C++ library aspect, and Scheme implementation aspect, which call Meevax language, Meevax ICE (Incremental Compilation Environment), Meevax C++ library, Meevax Scheme. When we simply call Meevax, these generic names are intended.
The Meevax language is strongly based on R7RS (see reference at the end of this document).
Meevax is a statically scoped programming language. Each use of a variable is associated with a lexically apparent binding of that variable.
Meevax is a dynamically typed language. Types are associated with values (also called objects) rather than with variables. Statically typed languages, by contrast, associate types with variables and expressions as well as with values.
All objects created in the course of Meevax computation, including procedures
and continuations, have unlimited extent. No Meevax object is ever
destroyed. The reason that implementations of Meevax do not (usually!) run out
of storage is that they are permitted to reclaim the storage occupied by an
object if they can prove that the object cannot possibly matter to any future
computation.
Implementations of Meevax are required to be properly tail-recursive. This allows the execution of an iterative computation in constant space, even if the iterative computation is described by a syntactically recursive procedure. Thus with a properly tail-recursive implementation, iteration can be expressed using the ordinary procedure-call mechanics, so that special iteration constructs are useful only as syntactic sugar.
Meevax procedures are objects in their own right. Procedures can be created dynamically, stored in data structures, returned as results of procedures, and so on.
One distinguishing feature of Meevax is that continuations, which in most other languages only operate behind the scenes, also have "first-class" status. Continuations are useful for implementing a wide variety of advanced control constructs, including non-lexical exits, backtracking, and coroutines.
Arguments to Meevax procedures are always passed by value, which means that the actual argument expressions are evaluated before the procedure gains control, regardless of whether the procedure needs the result of the evaluation.
Meevax's model of arithmetic is designed to remain as independent as possible
of the particular ways in which numbers are represented. within a computer. In
Meevax, every integer is a rational number, every rational is a real, and every
real is a complex number. Thus the distinction between integer and real
arithmetic, so important to many programming languages, does not appear in
Meevax. In its place is a distinction between exact arithmetic, which
corresponds to the mathematical ideal, and inexact arithmetic on
approximations. Exact arithmetic is not limited to integers.
TODO
TODO