Squirrelは、軽量かつ高機能な
スクリプト言語で、その設計思想は、
C言語のホストプログラムに組み込むことを強く意識しています。このため、高速な動作、高い移植性、そして容易な組み込みが特徴です。Squirrelは、ソースコードが一度
バイトコードにコンパイルされ、仮想マシン(VM)上で実行される仕組みを採用しています。コンパイラとVMは、わずか6000行程度の
C++コードで実装されており、そのすべてがオープンソースとして公開されています。また、ライブラリは
C++だけでなく、
C言語からも利用可能です。
Squirrelの主な特徴
多様なパラダイムのサポート: 手続き型、オブジェクト指向、関数型、データ駆動型といった、複数のプログラミングパラダイムに対応しています。
動的型付け: 変数の型を明示的に宣言する必要がなく、柔軟なプログラミングが可能です。
高階関数: 関数を引数として渡したり、関数から返したりできます。
コルーチン: 協調的なマルチスレッド処理を実現します。
末尾再帰の最適化: 再帰処理を効率的に実行します。
例外処理: throw, try, catchによる例外処理をサポートしています。
自動メモリ管理: 参照カウントとガベージコレクションを組み合わせた自動メモリ管理により、メモリリークを防ぎます。
弱い参照: オブジェクトへの弱い参照をサポートし、循環参照によるメモリリークを防ぎます。
マルチバイト文字/ワイド文字対応: UTF-16などの文字コードに対応しており、国際化に対応したアプリケーション開発が可能です。
SquirrelはLuaを強く意識して設計されており、組み込みライブラリの関数シグネチャには類似性が見られます。しかし、以下のような重要な違いも存在します。
C/C++に似た構文: C/
C++プログラマーにとって馴染みやすい構文を採用しています。
テーブルと配列: テーブルと配列は別のオブジェクトとして扱われます。
整数と浮動小数点数: 整数と浮動小数点数も別のオブジェクトとして扱われます。
配列のインデックス: 配列のインデックスは0から始まります。
クラスと継承: クラスと継承を扱うための構文が組み込まれています。
変数代入時のエラー検出: 未定義の変数への代入をエラーとし、変数定義用の構文を用意することで、タイプミスによるバグを防ぎます。
形式のテーブル定義: テーブルの定義に形式の記法を利用できます。
構文
Squirrelの構文は
C言語に似ていますが、C#、
Java、
JavaScript、そして
Luaの影響も見られます。行末のセミコロンは必須ではありません。
クラスと継承
Squirrelはクラスと継承をサポートしており、オブジェクト指向プログラミングが可能です。
採用事例
Squirrelは、以下のソフトウェアで採用されています。
小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル (Wiiウェア)
OpenTTD - COMプレーヤ用AIモジュール (NoAI) の記述スクリプト
Vice City Multiplayer - グランド・セフト・オート・バイスシティのMOD
Left 4 Dead 2
Portal 2
Alien Swarm
V-Multiplayer
GTAIV's IV-MP
Mafia II's M2-Multiplayer
Counter Strike: Global Offensive
Shadow Warrior (2013年のゲーム)
東方心綺楼
スクールガールストライカーズ
Simutrans
ただし、zlib/libpng
ライセンスでは
ライセンス表記義務がないため、上記以外にもSquirrelを採用しているソフトウェアは多数存在する可能性があります。
歴史
Squirrelは、Alberto Demichelis氏によって2003年に開発され、当初はzlib/libpng
ライセンスで公開されました。その後、Squirrel 3.0 beta3からは、MIT
ライセンスへと変更されています。開発とメンテナンスは、現在もAlberto Demichelis氏が中心となって行っています。
関連項目
Lua
グルー言語
外部リンク
*
Squirrel - The Programming Language 公式ウェブサイト