This directory contains examples demonstrating the Script language module system.
A multi-module calculator application that demonstrates:
- Module imports and exports
- Module aliasing
- Organizing code into logical modules
- Separation of concerns (lexer, parser, operations, display)
To run:
script examples/modules/calculator/main.scriptA simple game engine structure showing:
- Hierarchical module organization
- Relative imports
- Module dependencies
- Entity-Component-System architecture
To run:
script examples/modules/game_engine/main.script// Import specific items
import math_utils.{ add, subtract, PI }
// Import all exported items
import math_utils.*
// Import with alias
import "./geometry.script" as Geo
// Import from nested modules
import std.collections.map as Map
// Export specific items
export { add, subtract, multiply, divide }
// Items not exported are private to the module
fn privateHelper() {
// Not accessible from outside
}
-
Relative paths start with
./or../import "./utils/math.script" import "../common/types.script" -
Absolute paths resolve from module search paths
import math_utils import std.collections
- One module per file - Each
.scriptfile is a module - Explicit exports - Only export what's needed
- Avoid circular dependencies - Structure modules hierarchically
- Use meaningful names - Module names should reflect their purpose
- Group related functionality - Keep related code together
calculator/
├── main.script
├── operations.script
├── parser.script
├── lexer.script
├── display.script
└── types.script
game_engine/
├── main.script
├── core/
│ ├── engine.script
│ └── system.script
├── entities/
│ ├── entity.script
│ ├── player.script
│ └── enemy.script
├── systems/
│ ├── physics.script
│ └── renderer.script
└── utils/
├── vector.script
└── math.script
// common.script
import "./types.script" as Types
import "./utils.script" as Utils
export { Types, Utils }
// factory.script
import "./impl_a.script" as ImplA
import "./impl_b.script" as ImplB
export { create }
fn create(type: string) -> Implementation {
match type {
"A" => ImplA.new(),
"B" => ImplB.new(),
_ => panic("Unknown type")
}
}
// math.script
export { Vector, Matrix, Quaternion, lerp, clamp }
// Usage
import math
let v = math.Vector.new(1, 2, 3)
let clamped = math.clamp(value, 0, 1)