「Squirrel」の版間の差分
→採用ソフトウェア: 採用ソフトウェアにSimutransを追加 タグ: モバイル編集 モバイルウェブ編集 |
|||
43行目: | 43行目: | ||
SquirrelではCライクな構文が使われる。C/C++のほか、[[C Sharp|C#]]、[[Java]]、[[JavaScript]]、そしてLuaに似た部分も持っている。行末のセミコロンはあってもなくてもかまわない。 |
SquirrelではCライクな構文が使われる。C/C++のほか、[[C Sharp|C#]]、[[Java]]、[[JavaScript]]、そしてLuaに似た部分も持っている。行末のセミコロンはあってもなくてもかまわない。 |
||
;クラスと継承 |
;クラスと継承 |
||
< |
<syntaxhighlight lang="java"> |
||
class BaseVector { |
class BaseVector { |
||
constructor(...) { |
constructor(...) { |
||
75行目: | 75行目: | ||
local v2 = v0 + v1 |
local v2 = v0 + v1 |
||
print(v2.tostring()) |
print(v2.tostring()) |
||
</syntaxhighlight> |
|||
</source> |
|||
== 採用ソフトウェア == |
== 採用ソフトウェア == |
2020年7月5日 (日) 23:00時点における版
パラダイム | マルチパラダイム |
---|---|
設計者 | Alberto Demichelis |
最新リリース | 3.1/ 2016年3月27日 |
プラットフォーム | クロスプラットフォーム |
ライセンス |
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())
採用ソフトウェア
この節には独自研究が含まれているおそれがあります。 |
Squirrel は以下のソフトウェアで利用されている。
- 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル (Wiiウェア) [1]
- OpenTTD - COMプレーヤ用AIモジュール (NoAI) の記述スクリプトにSquirrelが採用されている [2]
- Vice City Multiplayer - グランド・セフト・オート・バイスシティのMODのひとつ
- Left 4 Dead 2 [1]
- Portal 2 [1]
- Alien Swarm [1]
- V-Multiplayer [3]
- GTAIV's IV-MP [4]
- Mafia II's M2-Multiplayer [5]
- Counter Strike: Global Offensive [1]
- Shadow Warrior (2013年のゲーム)
- 東方心綺楼 [6]
- スクールガールストライカーズ [7][8]
- Simutrans
ただしzlib/libpng licenseではライセンスの表記義務が無いため、上記の採用ソフトウェア以外にも、Squirrelの採用を公開していないソフトウェアが多数存在する可能性がある。
歴史
Alberto Demichelisによって2003年に開発され、zlib/libpng licenseのもとで公開された。Squirrel 3.0 beta3からは、MIT Licenseへと変更されている。
オープンソースではあるが、開発とメンテナンスはAlberto Demichelisが中心となって行なっている。