Squirrel

Squirrelは、軽量かつ高機能なスクリプト言語で、その設計思想は、C言語のホストプログラムに組み込むことを強く意識しています。このため、高速な動作、高い移植性、そして容易な組み込みが特徴です。Squirrelは、ソースコードが一度バイトコードにコンパイルされ、仮想マシン(VM)上で実行される仕組みを採用しています。コンパイラとVMは、わずか6000行程度のC++コードで実装されており、そのすべてがオープンソースとして公開されています。また、ライブラリはC++だけでなく、C言語からも利用可能です。

Squirrelの主な特徴



多様なパラダイムのサポート: 手続き型、オブジェクト指向、関数型、データ駆動型といった、複数のプログラミングパラダイムに対応しています。
動的型付け: 変数の型を明示的に宣言する必要がなく、柔軟なプログラミングが可能です。
高階関数: 関数を引数として渡したり、関数から返したりできます。
コルーチン: 協調的なマルチスレッド処理を実現します。
末尾再帰の最適化: 再帰処理を効率的に実行します。
例外処理: throw, try, catchによる例外処理をサポートしています。
自動メモリ管理: 参照カウントガベージコレクションを組み合わせた自動メモリ管理により、メモリリークを防ぎます。
弱い参照: オブジェクトへの弱い参照をサポートし、循環参照によるメモリリークを防ぎます。
マルチバイト文字/ワイド文字対応: UTF-16などの文字コードに対応しており、国際化に対応したアプリケーション開発が可能です。

Luaとの比較



SquirrelはLuaを強く意識して設計されており、組み込みライブラリの関数シグネチャには類似性が見られます。しかし、以下のような重要な違いも存在します。

C/C++に似た構文: C/C++プログラマーにとって馴染みやすい構文を採用しています。
テーブルと配列: テーブルと配列は別のオブジェクトとして扱われます。
整数と浮動小数点数: 整数と浮動小数点数も別のオブジェクトとして扱われます。
配列のインデックス: 配列のインデックスは0から始まります。
クラスと継承: クラスと継承を扱うための構文が組み込まれています。
変数代入時のエラー検出: 未定義の変数への代入をエラーとし、変数定義用の構文を用意することで、タイプミスによるバグを防ぎます。
形式のテーブル定義: テーブルの定義に形式の記法を利用できます。

構文



Squirrelの構文はC言語に似ていますが、C#、JavaJavaScript、そして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 公式ウェブサイト

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。