Squirrel

Squirrel（スクワール）は軽量な高級スクリプト言語である。手続き型言語、オブジェクト指向言語、関数型言語、データ駆動などの特性を併せ持つ。メモリ消費量やリアルタイム応答性の面で優れ、ゲームへの組み込み言語として採用が進んでいる。

英語で「リス」のことで、発音は /ˈskwɪrəl/ 決して「スクワール」ではない

 特徴 
C言語のホストプログラムに組み込まれることを目的に設計されており、高速な動作と、高い移植性、組み込みの容易さが特徴である。いったんバイトコードにコンパイルされ、仮想マシン (VM) で実行される。コンパイラとVMは共に6000行程度のC++で実装されており、全てオープンソースで公開されている。ライブラリはC++だけでなくC言語からも利用できる。

その他に、以下の特徴を持つ。

 動的型付け
 高階関数
 協調型スレッド (コルーチン)
 末尾再帰の最適化
 例外処理 (throw, try, catch)
 参照カウント と ガベージコレクション を組み合わせた自動メモリ管理
 弱い参照 (weak reference)
 文字コードとしてマルチバイト文字とワイド文字 (UTF-16) を切り替えてビルド可能

Luaを強く意識して設計された言語であり、組み込みのためのライブラリの関数シグネチャはLuaと類似性がある。ただし、以下のような差異がある。
 C/C++に似た構文を採用している。
 テーブルと配列が別のオブジェクトである。
 整数と浮動小数点数が別のオブジェクトである。
 配列のインデックスが 0 から始まる。
 クラスと継承を扱う構文を組み込みで持っている。
 変数への代入式 obj.attr = x で変数名をtypoした際に、typoした名前の新しい変数が定義されることでバグの温床となるのを防ぐために、定義されていない変数への代入はエラーとし、変数定義用の構文 obj.attr <- x を用意している。
 テーブルの定義にJSON形式の記法を利用できる。

 構文 
SquirrelではCライクな構文が使われる。C/C++のほか、C#、Java、JavaScript、そしてLuaに似た部分も持っている。行末のセミコロンはあってもなくてもかまわない。
クラスと継承
class BaseVector {
  constructor(...) {
    if (vargv.len() >= 3) {
      x = vargv[0]
      y = vargv[1]
      z = vargv[2]
    }
  }

  x = 0
  y = 0
  z = 0
}

// メタメソッドを実装するクラス。
class Vector3 extends BaseVector {
  function _add(other) {
    if (other instanceof this.getclass())
      return ::Vector3(x + other.x, y + other.y, z + other.z)
    else
      throw "wrong parameter"
  }
  function _tostring() {
    return x + "," + y + "," + z
  }
}

local v0 = Vector3(1, 2, 3)
local v1 = Vector3(11, 12, 13)
local v2 = v0 + v1
print(v2.tostring())

 採用ソフトウェア 

Squirrel は以下のソフトウェアで利用されている。
 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル (Wiiウェア) Wiiウェアで始まった、スクエニの“小規模開発への挑戦”。「小さな王様と約束の国 FFCC」の開発事例
 OpenTTD - COMプレーヤ用AIモジュール (NoAI) の記述スクリプトにSquirrelが採用されている 
 Vice City Multiplayer - グランド・セフト・オート・バイスシティのMODのひとつ
 Left 4 Dead 2 VScript - Valve Developer Community
 Portal 2 

 V-Multiplayer
 GTAIV's IV-MP
 Mafia II's M2-Multiplayer


 東方心綺楼東方心綺楼の解析 – 他人の空似
 スクールガールストライカーズ スライド 1 "スクールガールストライカーズの
内製クライアントエンジン"スクエニモバイルカンファレンスに行ってきたまとめ · GitHub
 Simutrans

ただしzlib/libpng licenseではライセンスの表記義務が無いため、上記の採用ソフトウェア以外にも、Squirrelの採用を公開していないソフトウェアが多数存在する可能性がある。

 歴史 
Alberto Demichelisによって2003年に開発され、zlib/libpng licenseのもとで公開された。Squirrel 3.0 beta3からは、MIT Licenseへと変更されている。

オープンソースではあるが、開発とメンテナンスはAlberto Demichelisが中心となって行なっている。

 注釈 

 脚注 

 関連項目 

 Lua
 グルー言語

 外部リンク 
  公式ウェブサイト

Squirrel
Category:オブジェクト指向言語
Category:スクリプト言語
Category:Cでプログラムされた自由ソフトウェア