The symbol type describes the context in which a symbol may be used, and the attributes it supports. Generally, both the compiler and linker must be aware of a given symbol type: the compiler uses the symbol type to determine the type of code to generate, and the linker uses that information to determine what section the object code should be linked to. There are exceptions, noted in their individual sections.
TAME aims to reduce the number of symbol types in favor of a generalized system with few primitives—before defining a new symbol type, consider whether the existing can be reused in a novel way. Certain symbols will be consolidated in the future, time permitting.13
Calculations yield a single scalar value.
If a child
the yield of the calculation is equivalent to the sum of all its
Generators produce a vector element for each iteration of some
Generators always have a parent
Classification. Classifications are universal or existential quantifiers most often used as predicates.
produces a boolean element for each classification result.
gen, the dimension of a given
cgen is the
largest of all of its predicates.
All TAME programs can be viewed as a function operating on a set of
Their domains are defined by their datatype,
represented by the symbol attribute
(see Symbol Types).
In contrast to
param, local parameters are restricted to a
defined scope (e.g. function parameters; let expressions).
This symbol is not used by the linker.
Local parameter parent.
This is set for
let expressions in place of
since the parent let does not actually generate a symbol.
Global constant. Constant values (of any dimension). These values may be inlined at the compiler’s discretion.
Template definition. Templates define expandable text in the form of macros (see Macro Expansion). This symbol is not used by the linker.
A type describes the domain of a symbol.
Types do not include dimension information—such is determined by the
dim symbol attribute
(see Symbol Format).
TAME supports functions as a means of calculation reuse and
functions can recurse (see
Functions are not first-class—TAME is not a functional language.
Arbitrary metadata about the program. These metadata are key-value and are intended to be compiled statically into the program for static reference without having to actually invoke the program.
|• Program Metadata:|
class can be a special case of
gen can acquire the multidimensional capabilities of
cgen and the latter can be removed.
lparam can be merged if the former
is defined by a wide "local" scope.
const is a special case of
func can be eliminated if all current
considered to be immediate function applications;
this would also allow for mocking inputs for testing and
If it’s not yet clear, TAME started as a very rigid,
narrowly-focused system and began generalizing over time.
The term rate (a verb) is a consequence of TAME’s origin
as an insurance rating system.
This symbol type will be renamed to
The name is regrettable—it originated from the concept of a generator function,
but never turned out that way.
gen is actually a list comprehension,
and will likely be renamed in the future to reflect that.
See footnote for