コンテンツにスキップ

QuickJSエンジン

出典: フリー教科書『ウィキブックス(Wikibooks)』

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 オプションで実行時プロファイリング
  • メモリ使用状況の分析
  • 実行時間の測定

パフォーマンスの最適化

[編集]

メモリ使用の最適化

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

実行速度の最適化

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

セキュリティ考慮事項

[編集]

サンドボックス化

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

セキュアな実行環境

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

トラブルシューティング

[編集]

一般的な問題

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

エラー処理

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

参考文献

[編集]

外部リンク

[編集]