1.8 KiB
1.8 KiB
Concepts
Dhamma
A dhamma is anything that can "occur"; think of them as encompassing "functions", "events", "systems" and the like.
Fields
A dhamma has the following fields:
name
: This is the type of the dhamma; it encodes the meaning of the dhamma, meaning what actually happens when this dhamma occurs.data
: Data held by the dhamma; a generic field.meta
: Metadata for the dhamma; this is used when we need to encode data about how a dhamma is executed, whereas thedata
: field encodes what a dhamma is executed on.asp-props
: Aspect properties; these are used to encode which dhamma are aspects of this dhamma. Think of them as categories; one dhamma keeps a list of its aspect properties, and other dhammas track which aspect properties they "subscribe" to. See also Aspects.is-aspect-of?
: A function which takes as arguments this verydhamma
and aparent
and returns whether thisdhamma
should be considered an aspect ofparent
. This is used to apply more fine-grained filtering of aspects after checking aspect properties.transient
: A boolean that is true when a dhamma should occur as an aspect only once, and false when it should keep reoccurring until it is explicitly removed.
Implementation
A dhamma's implementation is a function which takes itself and optionally a parent
and actually executes whichever action the dhamma stands for.
Aspects
Aspects are dhamma; when we say a dhamma is an aspect of another, we mean that the aspect dhamma occurs in the context of a parent dhamma, occurring after the implementation of the parent and with access to the data of its parent. Aspects serve the role of allowing composition of dhamma. Allowing this composition to happen dynamically is a core feature of the engine.