aheinze / scriptlite-ext
C extension for ScriptLite — high-performance ECMAScript interpreter with native C parser
Package info
github.com/aheinze/ScriptLiteExt
Language:C
Type:php-ext
Ext name:ext-scriptlite
pkg:composer/aheinze/scriptlite-ext
Requires
- php: >=8.3
README
Mirror repository — this repo is automatically mirrored from aheinze/ScriptLite for PHP PIE installation. All development, issues, and pull requests happen in the main repository.
High-performance PHP extension for the ScriptLite ECMAScript interpreter. Replaces the PHP bytecode VM with a C implementation using computed-goto dispatch, delivering ~180x speedup.
The extension ships with a native C parser only (no PHP parser fallback), so no Composer autoloader or external PHP parser runtime is required at runtime.
Installation
Via PHP PIE (recommended)
pie install aheinze/scriptlite-ext
Manual build
Prerequisites: PHP 8.3+ dev headers, phpize, C11 compiler, libpcre2-dev, make.
phpize
./configure --enable-scriptlite
make -j"$(nproc)"
make install
Then enable:
extension=scriptlite
Verify
php -r "var_dump(extension_loaded('scriptlite'));" # bool(true) php -r "echo (new ScriptLiteExt\Engine())->eval('1 + 2');" # 3
Usage
Standalone (no PHP library needed)
$engine = new ScriptLiteExt\Engine(); $result = $engine->eval('Math.max(1, 2, 3)'); echo $result; // 3
With ScriptLite PHP library
When installed alongside aheinze/ScriptLite, the PHP Engine class automatically delegates to the C extension — no code changes needed.
$engine = new ScriptLite\Engine(); $result = $engine->eval('Math.max(1, 2, 3)'); // uses C extension transparently
API
ScriptLiteExt\Engine
| Method | Description |
|---|---|
eval(string $code, array $globals = []): mixed |
Evaluate JS code and return the result |
compile(string $code): CompiledScript |
Compile JS to bytecode |
run(CompiledScript $script, array $globals = []): mixed |
Execute compiled bytecode |
transpile(string $code): string |
Transpile JS to PHP code |
getOutput(): string |
Get captured console.log output |
ScriptLiteExt\Compiler
| Method | Description |
|---|---|
compile(Program $ast): CompiledScript |
Compile an AST to bytecode |
ScriptLiteExt\VirtualMachine
| Method | Description |
|---|---|
execute(CompiledScript $script, array $globals = []): mixed |
Execute compiled bytecode |
getOutput(): string |
Get captured console.log output |
License
MIT