Documentation
¶
Overview ¶
Package registry provides a plugin architecture for registering Scheme primitives.
The registry allows extensions to register primitives that are applied to environments at initialization time. Primitives can be registered for different phases: runtime, expand-time, and compile-time.
Key Types ¶
- Registry: central store for primitive registrations
- PrimitiveSpec: defines a single primitive (name, params, implementation)
- Phase: bit flags controlling environment placement (Runtime, Expand, Compile)
- Extension: interface for modular primitive packages
Registration ¶
reg := registry.NewRegistry()
reg.AddPrimitives([]registry.PrimitiveSpec{
{Name: "my-func", ParamCount: 1, Impl: myFuncImpl},
}, registry.PhaseRuntime|registry.PhaseExpand)
Application ¶
After registration, apply the registry to an environment:
err := reg.Apply(ctx, env)
Extensions ¶
Extensions implement the Extension interface and can be composed:
var Extension = registry.NewExtension("myext", AddToRegistry)
The RegistryBuilder type provides a convenient way to compose multiple registration functions into a single extension.
Index ¶
- type ApplyContext
- type Closeable
- type Extension
- type ExtensionFunc
- type InitFunc
- type Phase
- type PrimitiveRegistration
- type PrimitiveSpec
- type Registry
- func (p *Registry) AddBinding(name string)
- func (p *Registry) AddBindings(names []string)
- func (p *Registry) AddInitFunc(f InitFunc)
- func (p *Registry) AddMacroSource(source string)
- func (p *Registry) AddPrimitive(spec PrimitiveSpec, phases Phase)
- func (p *Registry) AddPrimitives(specs []PrimitiveSpec, phases Phase)
- func (p *Registry) Apply(ctx context.Context, env *environment.EnvironmentFrame) error
- func (p *Registry) BindingCount() int
- func (p *Registry) Bindings() []string
- func (p *Registry) Clone() *Registry
- func (p *Registry) FindPrimitive(name string, phase Phase) (PrimitiveRegistration, bool)
- func (p *Registry) HasPrimitive(name string, phase Phase) bool
- func (p *Registry) InitFuncs() []InitFunc
- func (p *Registry) MacroSources() []string
- func (p *Registry) PrimitiveByName(name string) (PrimitiveRegistration, bool)
- func (p *Registry) PrimitiveCount() int
- func (p *Registry) PrimitiveNames() []string
- func (p *Registry) Primitives() []PrimitiveRegistration
- func (p *Registry) PrimitivesByCategory() map[string][]PrimitiveRegistration
- type RegistryBuilder
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ApplyContext ¶
type ApplyContext interface {
Environment() *environment.EnvironmentFrame
}
ApplyContext provides context during registry application.
type Closeable ¶ added in v1.3.0
type Closeable interface {
Close() error
}
Closeable is an opt-in interface for extensions that hold resources (goroutines, file handles, connections) and need cleanup when the engine is shut down. Extensions that implement this interface will have Close called by Engine.Close().
type Extension ¶
type Extension interface {
// Name returns the extension name for logging/debugging.
Name() string
// AddToRegistry registers primitives with the registry.
AddToRegistry(r *Registry) error
}
Extension represents a loadable extension that adds primitives to a registry.
type ExtensionFunc ¶
type ExtensionFunc struct {
// contains filtered or unexported fields
}
ExtensionFunc adapts a function to the Extension interface.
func (*ExtensionFunc) AddToRegistry ¶
func (p *ExtensionFunc) AddToRegistry(r *Registry) error
AddToRegistry registers primitives with the registry.
type InitFunc ¶
type InitFunc func(ApplyContext) error
InitFunc is called after primitives are registered.
type Phase ¶
type Phase int
Phase indicates when a primitive is available.
func (Phase) HasCompile ¶
HasCompile returns true if the phase includes compile time.
func (Phase) HasRuntime ¶
HasRuntime returns true if the phase includes runtime.
type PrimitiveRegistration ¶
type PrimitiveRegistration struct {
Spec PrimitiveSpec
Phases Phase
}
PrimitiveRegistration holds a primitive and its phases.
type PrimitiveSpec ¶
type PrimitiveSpec struct {
Name string
ParamCount int
IsVariadic bool
Impl machine.ForeignFunction
Doc string // optional: one-line description
ParamNames []string // optional: parameter names
Category string // optional: grouping category
}
PrimitiveSpec defines a primitive to be registered.
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry is the central registry for primitives.
func (*Registry) AddBinding ¶
AddBinding registers a compile-time only binding (no runtime value).
func (*Registry) AddBindings ¶
AddBindings registers multiple compile-time only bindings.
func (*Registry) AddInitFunc ¶
AddInitFunc registers an initialization function.
func (*Registry) AddMacroSource ¶
AddMacroSource adds Scheme source code for bootstrap macros.
func (*Registry) AddPrimitive ¶
func (p *Registry) AddPrimitive(spec PrimitiveSpec, phases Phase)
AddPrimitive registers a primitive with the given phases.
func (*Registry) AddPrimitives ¶
func (p *Registry) AddPrimitives(specs []PrimitiveSpec, phases Phase)
AddPrimitives registers multiple primitives with the given phases.
func (*Registry) Apply ¶
func (p *Registry) Apply(ctx context.Context, env *environment.EnvironmentFrame) error
Apply registers all primitives and runs init functions on an environment.
func (*Registry) BindingCount ¶
BindingCount returns the number of compile-time bindings.
func (*Registry) FindPrimitive ¶ added in v1.3.0
func (p *Registry) FindPrimitive(name string, phase Phase) (PrimitiveRegistration, bool)
FindPrimitive returns the first registered primitive with the given name. If phase is non-zero, only primitives active in that phase are considered. If phase is zero, any phase matches.
func (*Registry) HasPrimitive ¶ added in v1.3.0
HasPrimitive reports whether a primitive with the given name is registered. If phase is non-zero, only primitives active in that phase are considered. If phase is zero, any phase matches.
func (*Registry) MacroSources ¶
MacroSources returns copies of macro source strings.
func (*Registry) PrimitiveByName ¶ added in v1.3.0
func (p *Registry) PrimitiveByName(name string) (PrimitiveRegistration, bool)
PrimitiveByName returns the registration for the named primitive, if any.
func (*Registry) PrimitiveCount ¶
PrimitiveCount returns the number of registered primitives.
func (*Registry) PrimitiveNames ¶ added in v1.3.0
PrimitiveNames returns the names of all registered primitives in registration order.
func (*Registry) Primitives ¶
func (p *Registry) Primitives() []PrimitiveRegistration
Primitives returns a copy of the primitive registrations.
func (*Registry) PrimitivesByCategory ¶ added in v1.3.0
func (p *Registry) PrimitivesByCategory() map[string][]PrimitiveRegistration
PrimitivesByCategory returns registered primitives grouped by category. Primitives with no category are grouped under the empty string key.
type RegistryBuilder ¶
RegistryBuilder collects functions that add primitives to a registry.
func NewRegistryBuilder ¶
func NewRegistryBuilder(funcs ...func(*Registry) error) RegistryBuilder
NewRegistryBuilder creates a builder with the given registration functions.
func (RegistryBuilder) AddToRegistry ¶
func (p RegistryBuilder) AddToRegistry(r *Registry) error
AddToRegistry applies all registration functions to the registry.
func (RegistryBuilder) Build ¶
func (p RegistryBuilder) Build() (*Registry, error)
Build creates a new registry and applies all registration functions.
func (*RegistryBuilder) Register ¶
func (p *RegistryBuilder) Register(funcs ...func(*Registry) error)
Register adds registration functions to the builder.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package core provides the essential primitives required for Scheme to function.
|
Package core provides the essential primitives required for Scheme to function. |
|
Package helpers provides shared utility functions for primitive implementations.
|
Package helpers provides shared utility functions for primitive implementations. |
|
Package testhelpers provides shared test infrastructure for Scheme primitive tests.
|
Package testhelpers provides shared test infrastructure for Scheme primitive tests. |