Squirrel

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

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

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

[править | править код]
  • Синтаксис языка ближе к 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.