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)«Welcome to Vice City Multiplayer website!» . vicecitymultiplayer.com 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 WhatsApp для Windows

См. также Lua Python ECMAScript Ruby

Примечания

Ссылки Официальный сайт squirrel Squirrel 3.0 Reference Manual

Категория:Скриптовые языки Категория:Свободные библиотеки программ