Squirrel

Squirrel (с англ. — «белка») — интерпретируемый язык программирования, разработанный специально для использования в качестве скриптового языка в приложениях реального времени, таких как компьютерные игры. Является свободно распространяемым, с открытыми исходными текстами.

Squirrel
Класс языка мультипарадигменный
Тип исполнения интерпретируемый, JIT
Появился в 2003
Автор Альберто Демичелис
Выпуск 3.2 (10 февраля 2022; 2 года назад (2022-02-10))
Испытал влияние Lua, Python, Javascript, C++
Лицензия Лицензия zlib/libpng
Сайт squirrel-lang.org

Основные особенности

править

Отличия от 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-компилятор.

Приложения, использующие язык

править

Неигровые приложения

править

См. также

править

Примечания

править
  1. «Welcome to Vice City Multiplayer website!» Архивная копия от 30 марта 2015 на Wayback Machine. vicecitymultiplayer.com
  2. Biplab Kumar Modak. Scripting Code::Blocks // C++ Application Development with Code::Blocks. — Packt Publishing Ltd, 2013. — ISBN 9781783283422.

Ссылки

править