Runtime tracing feature specification
This is the engineering specification for the Tracer abstract type.
Overview
Tracing is a form of logging in which information is recorded about a program's execution. Tracing can be used for debugging code, writing unit tests, and building user interfaces representing the current state of a system.
Tracing can be enabled on a runtime by providing an instance of an object that conforms to the Tracer type.
Runtime
AddTracer and RemoveTracer APIs
The runtime should provide a APIs for adding and removing tracer instances.
Example pseudo-code:
class Runtime {
function addTracer(Tracer)
function removeTracer(Tracer)
}
Tracer
Abstract type
Provide an abstract type named Tracer.
Example pseudo-code:
Tracer {
}
didAddPlan: event
The Tracer type can optionally implement a didAddPlan function.
Invoked by the runtime when addPlan is about to return from its execution.
Example pseudo-code:
Tracer {
optional function didAddPlan(Plan, to: Target)
}
didAddPlan:named: event
The Tracer type can optionally implement a didAddPlan:named: function.
Invoked by the runtime when addPlan:named: is about to return from its execution.
Example pseudo-code:
Tracer {
optional function didAddPlan(Plan, named: String, to: Target)
}
didRemovePlanNamed: event
The Tracer type can optionally implement a didAddPlan:named: function.
Invoked by the runtime when removePlanNamed is about to return from its execution.
Example pseudo-code:
Tracer {
optional function didRemovePlanNamed(String, from: Target)
}
didCreatePerformer: event
The Tracer type can optionally implement a didCreatePerformer function.
Invoked by the runtime after a new performer instance has been created.
Example pseudo-code:
Tracer {
optional function didCreatePerformer(Performer, for: Target)
}