Skip to content

Conversation

@jfhamlin
Copy link
Contributor

@jfhamlin jfhamlin commented Sep 2, 2025

This commit introduces Ahead-Of-Time (AOT) compilation specifically for the Glojure standard library, significantly improving startup performance by pre-compiling core modules to Go code.

Key Features:

  • Code generation infrastructure in pkg/runtime/codegen.go
  • Pre-compiled standard library modules (core, core_print, protocols, etc.)
  • Automatic AOT compilation during build via 'make generate'
  • Runtime registration and loading of pre-compiled namespaces
  • Comprehensive test suite with golden file testing

Implementation Scope (Standard Library Only):

  • This initial implementation focuses exclusively on pre-compiling the Glojure standard library for faster startup
  • User code AOT compilation will be added in future updates
  • Pre-compiled modules are embedded in the binary at build time

Technical Implementation:

  • AST-to-Go code transformation with proper scoping
  • Support for all core language constructs used in stdlib
  • Special forms: def, set!, case, letfn, try/catch/finally, etc.
  • Metadata preservation and symbol/keyword pre-allocation
  • Topological sorting for dependency resolution

Performance Benefits:

  • Eliminates parse and eval overhead for standard library at runtime
  • REPL startup time significantly reduced
  • Default enabled. Disable with GLOJURE_USE_AOT=false environment variable

This commit introduces Ahead-Of-Time (AOT) compilation specifically for the
Glojure standard library, significantly improving startup performance by
pre-compiling core modules to Go code.

Key Features:
- Code generation infrastructure in pkg/runtime/codegen.go
- Pre-compiled standard library modules (core, core_print, protocols, etc.)
- Automatic AOT compilation during build via 'make generate'
- Runtime registration and loading of pre-compiled namespaces
- Comprehensive test suite with golden file testing

Implementation Scope (Standard Library Only):
- This initial implementation focuses exclusively on pre-compiling the
  Glojure standard library for faster startup
- User code AOT compilation will be added in future updates
- Pre-compiled modules are embedded in the binary at build time

Technical Implementation:
- AST-to-Go code transformation with proper scoping
- Support for all core language constructs used in stdlib
- Special forms: def, set!, case, letfn, try/catch/finally, etc.
- Metadata preservation and symbol/keyword pre-allocation
- Topological sorting for dependency resolution

Performance Benefits:
- Eliminates parse and eval overhead for standard library at runtime
- REPL startup time significantly reduced
- Default enabled with GLOJURE_USE_AOT=true environment variable

Testing:
- Comprehensive test coverage for code generation paths
- Golden file testing for reproducible output verification
- Behavioral testing ensures correctness vs interpreted code

This foundation will enable AOT compilation of user code in future releases,
further improving performance for production Glojure applications.
@jfhamlin jfhamlin merged commit 095b1af into main Sep 2, 2025
2 checks passed
@jfhamlin jfhamlin deleted the stdlib-aot branch September 2, 2025 05:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants