Squirrel
Squirrel | |
---|---|
Класс языка | мультипарадигменный |
Тип исполнения | интерпретируемый, JIT |
Появился в | 2003 |
Автор | Альберто Демичелис |
Выпуск | 3.2 (10 февраля 2022 ) |
Испытал влияние | Lua, Python, Javascript, C++ |
Лицензия | Лицензия zlib/libpng |
Сайт | squirrel-lang.org |
Squirrel (с англ. — «белка») — интерпретируемый язык программирования, разработанный специально для использования в качестве скриптового языка в приложениях реального времени, таких как компьютерные игры. Является свободно распространяемым, с открытыми исходными текстами.
Основные особенности
[править | править код]- Динамическая типизация
- Делегирование
- Поддержка классов и наследования
- Управление памятью и сборка мусора
- Генераторы
- Работа с исключениями
- Функции высшего порядка
- Слабые ссылки
- Малый размер
Отличия от Lua
[править | править код]- Синтаксис языка ближе к C/C++
- Поддержка классов на уровне языка
- Для создания полей у таблиц нужно использовать специальный оператор <-, таким образом, невозможно создать новое поле, случайно совершив ошибку в имени
- Lua разрабатывается на протяжении более 25 лет и для него создано большое количество библиотек, Squirrel — относительно молодой язык.
Типы данных
[править | править код]Squirrel представляет собой язык с динамическим определением типов данных — тип переменной определяется значением, которое она хранит в данный момент времени и может меняться при присваивании нового значения. Все значения в Squirrel могут храниться в переменных, использоваться в качестве аргументов при вызове функций и возвращаться в виде результата их выполнения.
Значения в Squirrel могут быть следующих типов:
- null — неопределённое значение. Переменные типа Null могут иметь только одно значение — null;
- bool — логический тип, может иметь значение true или false;
- integer — целые числа (только 32 бита);
- float — вещественные числа (32 бита или больше);
- string — текстовые строки — может хранить строки в кодировке ASCII (1 байт) или unicode (2 байта);
- table — таблица — может хранить набор значений, представленных парами ключ/значение (называемых «слоты»);
- array — массив — последовательность значений переменной длины, индексируемых целыми числами. Индексы начинаются с 0;
- function — функция — значение типа функция можно «вызвать», передав ему параметры и получив результат выполнения;
- generator — генератор — функция, выполнение которой может быть приостановлено и возобновлено с помощью операторов yield/resume;
- class — как и таблица, классы имеют набор слотов, однако, классы могут быть унаследованы, а на их основе можно создавать объекты. После создания класса к нему можно добавлять слоты в любой момент;
- instance объект, созданный из класса. Так же содержит слоты, однако добавлять новые слоты в объект нельзя;
- thread — поток выполнения;
- userdata — пользовательские данные — участки памяти и указатели, которые используются приложением, использующим Squirrel;
Примеры программ
[править | править код]Вычисление факториала
function factorial(x)
{
if (x == 0)
{
return 1;
}
return x * factorial(x - 1);
}
Генератор случайных чисел:
function gen_random(max)
{
local last = 42;
local IM = 139968;
local IA = 3877;
local IC = 29573;
for (;;) // бесконечный цикл
{
yield (max * (last = (last * IA + IC) % IM) / IM);
}
}
local randtor = gen_random(100);
for (local i = 0; i < 10; i++)
print(">" + resume randtor + "\n");
Классы и наследование:
class BaseVector
{
constructor(x, y, z)
{
this.x = x;
this.y = y;
this.z = z;
}
x = 0;
y = 0;
z = 0;
}
class Vector3 extends BaseVector
{
function _add(other) // перегрузка оператора '+', см. подробности http://www.squirrel-lang.org/squirreldoc/reference/language/metamethods.html
{
if (other instanceof ::Vector3)
return ::Vector3(x + other.x, y + other.y, z + other.z);
else
throw "wrong parameter";
}
function Print()
{
::print(x + ", " + y + ", " + z + "\n");
}
}
local v0 = Vector3(1, 2, 3);
local v1 = Vector3(11, 12, 13);
local v2 = v0 + v1;
v2.Print();
Реализация
[править | править код]Исходный код компилируется в байт-код, который впоследствии выполняется на виртуальной машине. Для задач, критичных по времени, имеется JIT-компилятор.
Приложения, использующие язык
[править | править код]Игры
[править | править код]- Vice City Multiplayer (мод для Grand Theft Auto: Vice City)[1]
- Left 4 Dead 2
- Portal 2
- Alien Swarm
- OpenTTD
- Counter-Strike: Global Offensive
- Shadow Warrior
- War Thunder
- Mafia 2 Online
- GTA IV: Multiplayer
- Gothic 2 Online
- Team Fortress 2
Неигровые приложения
[править | править код]- Code::Blocks[2]
- WhatsApp для Windows
См. также
[править | править код]Примечания
[править | править код]- ↑ «Welcome to Vice City Multiplayer website!» Архивная копия от 30 марта 2015 на Wayback Machine. vicecitymultiplayer.com
- ↑ Biplab Kumar Modak. Scripting Code::Blocks // C++ Application Development with Code::Blocks. — Packt Publishing Ltd, 2013. — ISBN 9781783283422.
Ссылки
[править | править код]- Официальный сайт squirrel (англ.)
- Squirrel 3.0 Reference Manual (англ.)