It is increasingly common for languages to treat programming concepts as “first class.” For example, reflection in Java and C# is a solution for making types first class. A type is not a black box, hard coded by a programmer that is only used to create objects. It is a value that can be inspected and manipulated. Functions are also commonly first class, in that they can be assigned to variables, constructed at run time, and be subjected to lambda calculus. Metaobjects are the abstraction of language features into representations that may be constructed, inspected, and manipulated by that same language.

The development environment includes metaobjects for:

within metaobjects for:

all of which can be

by programs.

There are APIs for each of the items in the following (incomplete) table. The code tier, and the documentation feature (in the software tier), is also accessible through syntax.

Code Tier Software Tier Build Tier
types modules compilation
functions libraries profiling
syntax trees programs optimization
constraints extensions language grammar(s)
execution contexts certificates runtimes
side effects processes toolchain
expressions permissions IDE
statements documentation dependency graphs

See also: Strongly Connected Model Of Computation

copyright © Brent Lewis 2017