Squirrel

| この項目では、プログラミング言語について説明しています。動物のリスについては「リス」をご覧ください。

|

Squirrelパラダイム|  マルチパラダイム

|

設計者|  Alberto Demichelis
最新リリース|  3.2/ 2022年2月11日 (3年前) (2022-02-11)
プラットフォーム|  クロスプラットフォーム
ライセンス|

MIT License (3.0 beta3 以降)

zlib/libpng license (3.0 beta2 以前)
ウェブサイト|  squirrel-lang.org
テンプレートを表示

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形式の記法を利用できる。

## 構文

[編集]

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())

## 採用ソフトウェア

[編集]

この節には独自研究が含まれているおそれがあります。 問題箇所を検証し出典を追加して、記事の改善にご協力ください。議論はノートを参照してください。（2013年12月）

|

この節は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。（このテンプレートの使い方）
出典検索?: "Squirrel" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL (2013年12月)

|

Squirrel は以下のソフトウェアで利用されている。

* 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル (Wiiウェア) [1]
* OpenTTD \- COMプレーヤ用AIモジュール (NoAI) の記述スクリプトにSquirrelが採用されている [2]
* Vice City Multiplayer - グランド・セフト・オート・バイスシティのMODのひとつ
* Left 4 Dead 2 [3]
* Portal 2 [3]
* Alien Swarm（英語版） [3]
* V-Multiplayer[4]
* GTAIV's IV-MP[5]
* Mafia II's M2-Multiplayer[6]
* Counter Strike: Global Offensive（英語版） [3]
* Shadow Warrior (2013年のゲーム)（英語版）
* 東方心綺楼[※ 1]
* スクールガールストライカーズ [7][※ 2]
* Simutrans

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

## 歴史

[編集]

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

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

## 注釈

[編集]

1. ^ 東方心綺楼の解析 – 他人の空似
2. ^ スクエニモバイルカンファレンスに行ってきたまとめ · GitHub

## 脚注

[編集]

1. ^ Wiiウェアで始まった、スクエニの“小規模開発への挑戦”。「小さな王様と約束の国 FFCC」の開発事例
2. ^ [1]
3. ^ a b c d VScript - Valve Developer Community
4. ^ [2]
5. ^ [3]
6. ^ [4]
7. ^ スライド 1 "スクールガールストライカーズの 内製クライアントエンジン"

## 関連項目

[編集]

ポータル FOSS

* Lua
* グルー言語

## 外部リンク

[編集]

* Squirrel - The Programming Language 公式ウェブサイト

この項目は、コンピュータに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています（PJ:コンピュータ/P:コンピュータ）。

|

* 表示
* 編集