QuickJSエンジンは、Fabrice Bellardによって開発された軽量なJavaScriptエンジンです。ECMAScript 2020の仕様に準拠し、高速な実行と低メモリ消費を特徴としています。

特徴

編集

主な特徴

編集
  • 完全なECMAScript 2020サポート
  • 低メモリフットプリント
  • 高速な起動時間
  • バイトコードコンパイル/実行のサポート
  • CやC++との容易な統合

技術的特徴

編集
  • インクリメンタルガベージコレクション
  • 正規表現エンジン内蔵
  • JSON解析器内蔵
  • BigInt及びBigDecimalサポート

インストール方法

編集

Linuxでのビルド

編集
git clone https://github.com/bellard/quickjs
cd quickjs
make
sudo make install

実行可能ファイル

編集

インストール後、以下の実行可能ファイルが利用可能になります:

  • qjs - QuickJSインタプリタ
  • qjsc - QuickJSコンパイラ

基本的な使用方法

編集

コマンドラインでの実行

編集

JavaScriptファイルを実行するには:

qjs script.js

対話モードで起動するには:

qjs

コードのコンパイル

編集

JavaScriptファイルを実行可能ファイルにコンパイルするには:

qjsc -o output script.js

プログラミング例

編集

基本的なプログラム例

編集
import * as std from 'std';

function hello() {
    std.out.printf("Hello, QuickJS!\n");
}

hello();

モジュールの使用例

編集
import { readFile, writeFile } from 'std';

async function processFile(filename) {
    const content = await readFile(filename);
    // 処理を行う
    await writeFile('output.txt', content);
}

組み込み関数とモジュール

編集

標準モジュール

編集
  • std - ファイルI/O、システムコール等の基本機能
  • os - オペレーティングシステム関連の機能
  • worker - Web Workerのサポート

グローバルオブジェクト

編集
  • console - コンソール出力
  • performance - パフォーマンス測定
  • BigInt - 大きな整数の処理

組み込みオブジェクト

編集
console.log(
  Reflect.ownKeys(globalThis)
    .filter(q=> typeof q === 'string')
    .filter(q=> typeof globalThis[q] === 'function')
    .filter(q=> "prototype" in globalThis[q])
    .filter(q=> globalThis[q] === globalThis[q].prototype.constructor)
    .sort().map(x => `=== globalThis.${x} ===`)
    .join("\n")
  );

globalThis.AggregateError

編集

globalThis.Array

編集

globalThis.ArrayBuffer

編集

globalThis.BigInt

編集

globalThis.BigInt64Array

編集

globalThis.BigUint64Array

編集

globalThis.Boolean

編集

globalThis.DataView

編集

globalThis.Date

編集

globalThis.Error

編集

globalThis.EvalError

編集

globalThis.Float32Array

編集

globalThis.Float64Array

編集

globalThis.Function

編集

globalThis.Int16Array

編集

globalThis.Int32Array

編集

globalThis.Int8Array

編集

globalThis.InternalError

編集

globalThis.Map

編集

globalThis.Number

編集

globalThis.Object

編集

globalThis.Promise

編集

globalThis.RangeError

編集

globalThis.ReferenceError

編集

globalThis.RegExp

編集

globalThis.Set

編集

globalThis.SharedArrayBuffer

編集

globalThis.String

編集

globalThis.Symbol

編集

globalThis.SyntaxError

編集

globalThis.TypeError

編集

globalThis.URIError

編集

globalThis.Uint16Array

編集

globalThis.Uint32Array

編集

globalThis.Uint8Array

編集

globalThis.Uint8ClampedArray

編集

globalThis.WeakMap

編集

globalThis.WeakSet

編集

デバッグとプロファイリング

編集

デバッグ機能

編集
  • --debug オプションでデバッグ情報の出力
  • エラートレース機能
  • メモリ使用量の監視

プロファイリング

編集
  • --profile オプションで実行時プロファイリング
  • メモリ使用状況の分析
  • 実行時間の測定

パフォーマンスの最適化

編集

メモリ使用の最適化

編集
  • オブジェクトプールの使用
  • 不要なクロージャの回避
  • 適切なガベージコレクション設定

実行速度の最適化

編集
  • バイトコードコンパイルの活用
  • 適切なデータ構造の選択
  • ホットパスの最適化

セキュリティ考慮事項

編集

サンドボックス化

編集
  • モジュールアクセスの制限
  • ファイルシステムアクセスの制限
  • システムコールの制限

セキュアな実行環境

編集
  • 適切な権限設定
  • メモリ保護機能
  • 入力検証

トラブルシューティング

編集

一般的な問題

編集
  • メモリリーク対策
  • スタックオーバーフロー対策
  • モジュール解決の問題

エラー処理

編集
  • エラーメッセージの解釈
  • デバッグ情報の活用
  • エラーログの分析

参考文献

編集

外部リンク

編集