The MetaBETA Project

A Meta-Level Architecture for BETA

The aim of the MetaBETA project is to design and implement a
meta-level interface for the statically typed and compiled language BETA. A meta-level
interface extends the expressibility of a programming language to
allow programs to be written for the language and not just
in the language. Functionality that depends on the language
implementation is either impossible or very hard to express in most
languages, e.g., object distribution, persistence, source-code
interpreters, debuggers, source browsers. etc. The problem is that it
is impossible for a running program to access class information, or
overwrite the default implementation of language primitives, such as
object creation, destruction, and invocation. In other words, to
access meta-level information.

Most meta-level interfaces have been designed for dynamically
typed and semi-interpreted languages. Implementing a meta-level
interface for a statically typed and compiled language introduces
several new problems:

Introducing a meta-level interface must not affect the efficiency
of the base-level language

To address these problems, our design is based on: (i) the meta-level
architecture, which introduces a runtime system for a compiled
language. The runtime system is viewed as a virtual machine that
implements the functionality of the programming language, and
therefore it provides a natural entity to be extended with a meta-level
interface. And (ii) the meta-level interface is based on a novel
language construct, a meta-reference called attribute
reference. Attribute references extend the expressive power of the
language by allowing the programmer to have typed references to
instance variables, which is essential for implementing a meta-level
interface.