mirror of
https://github.com/anomalyco/opencode.git
synced 2026-11-07 16:17:25 +03:00
38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
#!/usr/bin/env bun
|
|
|
|
// Per-run setup cost: making a runtime, and running a trivial program end to end, in microseconds.
|
|
// Usage: bun run script/setup.ts [--iterations N]
|
|
|
|
import { Effect } from "effect"
|
|
import { CodeMode } from "../src/index.js"
|
|
import { Interpreter } from "../src/vm/runtime/interpreter.js"
|
|
import { createBuiltins } from "../src/vm/runtime/intrinsics.js"
|
|
import { ToolRuntime } from "../src/tool-runtime.js"
|
|
|
|
const index = process.argv.indexOf("--iterations")
|
|
const iterations = index === -1 ? 2000 : Number(process.argv[index + 1])
|
|
|
|
const runtime = CodeMode.make({ tools: {}, engine: "vm" })
|
|
const prepared = ToolRuntime.prepare({})
|
|
|
|
const measure = async (name: string, work: () => unknown) => {
|
|
for (let at = 0; at < 200; at++) await work()
|
|
const times: Array<number> = []
|
|
for (let at = 0; at < iterations; at++) {
|
|
const start = performance.now()
|
|
await work()
|
|
times.push(performance.now() - start)
|
|
}
|
|
times.sort((a, b) => a - b)
|
|
const micros = (ms: number) => `${(ms * 1000).toFixed(0).padStart(5)} µs`
|
|
console.log(
|
|
`${name.padEnd(24)} median ${micros(times[times.length >> 1]!)} p10 ${micros(times[Math.floor(times.length / 10)]!)}`,
|
|
)
|
|
}
|
|
|
|
await measure(
|
|
"runtime",
|
|
() => new Interpreter({ tools: ToolRuntime.make(prepared, undefined, {}), builtins: createBuiltins() }),
|
|
)
|
|
await measure("trivial program", () => Effect.runPromise(runtime.execute("return 1")))
|