The codebase previously used "interpreter" terminology and standalone functions for expression operations.
This PR modernizes the architecture by renaming to "runtime" and converting operations to receiver methods.
Rename pkg/interpreter to pkg/runtime.
Move ReduceOnce to new pkg/normalorder package for reduction strategy isolation.
Convert standalone functions (Substitute, Rename, GetFree, IsFree) to receiver methods on concrete expression types.
Change Set from pointer receivers to value receivers for simpler usage.
Update all references from "interpreter" to "runtime" terminology throughout the codebase.
Decisions
Operations like Substitute, Rename, GetFree, and IsFree are now methods on the Expression interface, implemented by each concrete type (Variable, Abstraction, Application).
The normalorder package isolates the normal-order reduction strategy, allowing future reduction strategies to be added in separate packages.
Set uses value receivers since Go maps are reference types and don't require pointer semantics.
Benefits
Cleaner API: expr.Substitute(target, replacement) instead of Substitute(expr, target, replacement).
Better separation of concerns: reduction strategies are isolated from expression types.
Consistent terminology: "runtime" better reflects the execution model.
Simpler Set usage without needing to manage pointers.
Checklist
Code follows conventional commit format.
Branch follows naming convention (<type>/<description>). Always use underscores.
Tests pass (if applicable).
Documentation updated (if applicable).
## Description
The codebase previously used "interpreter" terminology and standalone functions for expression operations.
This PR modernizes the architecture by renaming to "runtime" and converting operations to receiver methods.
- Rename `pkg/interpreter` to `pkg/runtime`.
- Move `ReduceOnce` to new `pkg/normalorder` package for reduction strategy isolation.
- Convert standalone functions (`Substitute`, `Rename`, `GetFree`, `IsFree`) to receiver methods on concrete expression types.
- Change `Set` from pointer receivers to value receivers for simpler usage.
- Update all references from "interpreter" to "runtime" terminology throughout the codebase.
### Decisions
- Operations like `Substitute`, `Rename`, `GetFree`, and `IsFree` are now methods on the `Expression` interface, implemented by each concrete type (`Variable`, `Abstraction`, `Application`).
- The `normalorder` package isolates the normal-order reduction strategy, allowing future reduction strategies to be added in separate packages.
- `Set` uses value receivers since Go maps are reference types and don't require pointer semantics.
## Benefits
- Cleaner API: `expr.Substitute(target, replacement)` instead of `Substitute(expr, target, replacement)`.
- Better separation of concerns: reduction strategies are isolated from expression types.
- Consistent terminology: "runtime" better reflects the execution model.
- Simpler `Set` usage without needing to manage pointers.
## Checklist
- [x] Code follows conventional commit format.
- [x] Branch follows naming convention (`<type>/<description>`). Always use underscores.
- [x] Tests pass (if applicable).
- [x] Documentation updated (if applicable).
- Rename pkg/interpreter to pkg/runtime
- Move ReduceOnce to new pkg/normalorder package
- Convert standalone functions (Substitute, Rename, GetFree, IsFree)
to receiver methods on concrete expression types
- Change Set from pointer receivers to value receivers
- Update all references from interpreter to runtime terminology
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
mvhutz
merged commit 9c7fb8ceba into main2026-01-18 20:52:35 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Description
The codebase previously used "interpreter" terminology and standalone functions for expression operations.
This PR modernizes the architecture by renaming to "runtime" and converting operations to receiver methods.
pkg/interpretertopkg/runtime.ReduceOnceto newpkg/normalorderpackage for reduction strategy isolation.Substitute,Rename,GetFree,IsFree) to receiver methods on concrete expression types.Setfrom pointer receivers to value receivers for simpler usage.Decisions
Substitute,Rename,GetFree, andIsFreeare now methods on theExpressioninterface, implemented by each concrete type (Variable,Abstraction,Application).normalorderpackage isolates the normal-order reduction strategy, allowing future reduction strategies to be added in separate packages.Setuses value receivers since Go maps are reference types and don't require pointer semantics.Benefits
expr.Substitute(target, replacement)instead ofSubstitute(expr, target, replacement).Setusage without needing to manage pointers.Checklist
<type>/<description>). Always use underscores.