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