v5 Modules
Core idea
- modules provide explicit ownership and visibility boundaries
- imports create visibility edges
- exports are explicit public API
Module contract
module NAME { ... }import moduleorimport module as alias- only
alias.namefor cross-module access
Rules to enforce
mainmust be last- imports to earlier modules only (in v5)
- duplicate module names disallowed
- alias collisions rejected
- non-exported symbols are inaccessible across modules
Runtime model
- module exports compiled into module value/map
- qualified access becomes lookup on that exported map
- no special runtime module opcodes needed
Link linkage
- module visibility and order constraints matter to linker
- closure/function ids rely on stable module ordering
Quick checks
- unknown module import
- alias collision
- export enforcement
- default alias behavior (
import util) - forward import rejection
1 / 1