# Avram
Avram : applicative virtual machine

Avram is an interpreter that executes programs written in Ursala. The virtual code format supported by Avram has a simple and well defined semantics that might also make it a suitable target for other compiler projects, especially for functional programming languages.

The virtual machine code for an application program to be executed, along with any required input files, are passed to Avram on the command line. Execution takes place for the most part non-interactively, and the results, if any, are written to output files or to the console by Avram.

Avram is written in C and can be linked with various numerical libraries to make them callable from the interpreted application program. These libraries include the GNU Scientific library, fftw (for fast Fourier transforms), Harminv (for harmonic inversion), Lapack and minpack (for linear algebra), mpfr (for arbitrary precision floating point arithmetic), ufsparse (for sparse matrix computations), and the R math library (for probability and statistics). Adding a new interface to someone's favorite library, although not a fully automated procedure, is well documented and should be a straightforward task for a competent C programmer. It is also possible to link Avram with the Expect library, enabling it to interact arbitrarily with command line interpreters on behalf of the application program it executes.

The computational model implemented by Avram is amenable to distributed concurrent evaluation in potentially the same manner as a map-reduce architecture. Currently Avram implements a full complement of client-side features for dynamically decomposing, scattering, and gathering the results of an application program at run-time using TCP sockets. Implementation of a corresponding server-side capability is an area for further development.