Squirrel

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

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

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

Отличия от Lua

  • Синтаксис языка ближе к C/C++
  • Поддержка классов на уровне языка
  • Для создания полей у таблиц нужно использовать специальный оператор <-, таким образом, невозможно создать новое поле, случайно совершив ошибку в имени
  • Lua разрабатывается на протяжении более 15 лет и для него создано большое количество библиотек, 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.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.