Squirrel

Поделись знанием:
Перейти к: навигация, поиск
Squirrel
Класс языка:

мультипарадигменный

Тип исполнения:

интерпретируемый, JIT

Появился в:

2003

Автор:

Альберто Демичелис

Выпуск:

3.1 (27 марта 2016)

Испытал влияние:

Lua, Python, Javascript, С++

Лицензия:

Лицензия zlib/libpng

Сайт:

[squirrel-lang.org/ l-lang.org]

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





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

Отличия от 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;
    }
    else {
      return x * factorial(x-1);
    }
  }

Генератор случайных чисел:

  function gen_random(max) {
    local last=42
    local IM = 139968;
    local IA = 3877;
    local IC = 29573;
    for(;;) {  //loops forever
      yield (max * (last = (last * IA + IC) % IM) / IM);
    }
  }

  local randtor = gen_random(100);

  for(local i = 0; i < 10; i += 1)
     print(">"+resume randtor+"\n");

Классы и наследование:

  class BaseVector {
    constructor(...)
    {
      if(vargv.len() >= 3) {
        x = vargv[0];
        y = vargv[1];
        z = vargv[2];
      }
    }
    x = 0;
    y = 0;
    z = 0;
  }

  class Vector3 extends BaseVector {
    function _add(other)
    {
      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 компилятор.

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

Игры

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

См. также

Напишите отзыв о статье "Squirrel"

Примечания

  1. [vicecitymultiplayer.com «Welcome to Vice City Multiplayer website!»]. vicecitymultiplayer.com
  2. Biplab Kumar Modak. Scripting Code::Blocks // C++ Application Development with Code::Blocks. — Packt Publishing Ltd, 2013. — ISBN 9781783283422.

Ссылки

  • [squirrel-lang.org/ Официальный сайт squirrel] (англ.)
  • [translated.by/you/squirrel-tutorial/into-ru/trans/ Совместный перевод документации] (рус.)

Отрывок, характеризующий Squirrel

«Солдаты! Русская армия выходит против вас, чтобы отмстить за австрийскую, ульмскую армию. Это те же баталионы, которые вы разбили при Голлабрунне и которые вы с тех пор преследовали постоянно до этого места. Позиции, которые мы занимаем, – могущественны, и пока они будут итти, чтоб обойти меня справа, они выставят мне фланг! Солдаты! Я сам буду руководить вашими баталионами. Я буду держаться далеко от огня, если вы, с вашей обычной храбростью, внесете в ряды неприятельские беспорядок и смятение; но если победа будет хоть одну минуту сомнительна, вы увидите вашего императора, подвергающегося первым ударам неприятеля, потому что не может быть колебания в победе, особенно в тот день, в который идет речь о чести французской пехоты, которая так необходима для чести своей нации.
Под предлогом увода раненых не расстроивать ряда! Каждый да будет вполне проникнут мыслию, что надо победить этих наемников Англии, воодушевленных такою ненавистью против нашей нации. Эта победа окончит наш поход, и мы можем возвратиться на зимние квартиры, где застанут нас новые французские войска, которые формируются во Франции; и тогда мир, который я заключу, будет достоин моего народа, вас и меня.
Наполеон».


В 5 часов утра еще было совсем темно. Войска центра, резервов и правый фланг Багратиона стояли еще неподвижно; но на левом фланге колонны пехоты, кавалерии и артиллерии, долженствовавшие первые спуститься с высот, для того чтобы атаковать французский правый фланг и отбросить его, по диспозиции, в Богемские горы, уже зашевелились и начали подниматься с своих ночлегов. Дым от костров, в которые бросали всё лишнее, ел глаза. Было холодно и темно. Офицеры торопливо пили чай и завтракали, солдаты пережевывали сухари, отбивали ногами дробь, согреваясь, и стекались против огней, бросая в дрова остатки балаганов, стулья, столы, колеса, кадушки, всё лишнее, что нельзя было увезти с собою. Австрийские колонновожатые сновали между русскими войсками и служили предвестниками выступления. Как только показывался австрийский офицер около стоянки полкового командира, полк начинал шевелиться: солдаты сбегались от костров, прятали в голенища трубочки, мешочки в повозки, разбирали ружья и строились. Офицеры застегивались, надевали шпаги и ранцы и, покрикивая, обходили ряды; обозные и денщики запрягали, укладывали и увязывали повозки. Адъютанты, батальонные и полковые командиры садились верхами, крестились, отдавали последние приказания, наставления и поручения остающимся обозным, и звучал однообразный топот тысячей ног. Колонны двигались, не зная куда и не видя от окружавших людей, от дыма и от усиливающегося тумана ни той местности, из которой они выходили, ни той, в которую они вступали.
Солдат в движении так же окружен, ограничен и влеком своим полком, как моряк кораблем, на котором он находится. Как бы далеко он ни прошел, в какие бы странные, неведомые и опасные широты ни вступил он, вокруг него – как для моряка всегда и везде те же палубы, мачты, канаты своего корабля – всегда и везде те же товарищи, те же ряды, тот же фельдфебель Иван Митрич, та же ротная собака Жучка, то же начальство. Солдат редко желает знать те широты, в которых находится весь корабль его; но в день сражения, Бог знает как и откуда, в нравственном мире войска слышится одна для всех строгая нота, которая звучит приближением чего то решительного и торжественного и вызывает их на несвойственное им любопытство. Солдаты в дни сражений возбужденно стараются выйти из интересов своего полка, прислушиваются, приглядываются и жадно расспрашивают о том, что делается вокруг них.
Туман стал так силен, что, несмотря на то, что рассветало, не видно было в десяти шагах перед собою. Кусты казались громадными деревьями, ровные места – обрывами и скатами. Везде, со всех сторон, можно было столкнуться с невидимым в десяти шагах неприятелем. Но долго шли колонны всё в том же тумане, спускаясь и поднимаясь на горы, минуя сады и ограды, по новой, непонятной местности, нигде не сталкиваясь с неприятелем. Напротив того, то впереди, то сзади, со всех сторон, солдаты узнавали, что идут по тому же направлению наши русские колонны. Каждому солдату приятно становилось на душе оттого, что он знал, что туда же, куда он идет, то есть неизвестно куда, идет еще много, много наших.
– Ишь ты, и курские прошли, – говорили в рядах.
– Страсть, братец ты мой, что войски нашей собралось! Вечор посмотрел, как огни разложили, конца краю не видать. Москва, – одно слово!
Хотя никто из колонных начальников не подъезжал к рядам и не говорил с солдатами (колонные начальники, как мы видели на военном совете, были не в духе и недовольны предпринимаемым делом и потому только исполняли приказания и не заботились о том, чтобы повеселить солдат), несмотря на то, солдаты шли весело, как и всегда, идя в дело, в особенности в наступательное. Но, пройдя около часу всё в густом тумане, большая часть войска должна была остановиться, и по рядам пронеслось неприятное сознание совершающегося беспорядка и бестолковщины. Каким образом передается это сознание, – весьма трудно определить; но несомненно то, что оно передается необыкновенно верно и быстро разливается, незаметно и неудержимо, как вода по лощине. Ежели бы русское войско было одно, без союзников, то, может быть, еще прошло бы много времени, пока это сознание беспорядка сделалось бы общею уверенностью; но теперь, с особенным удовольствием и естественностью относя причину беспорядков к бестолковым немцам, все убедились в том, что происходит вредная путаница, которую наделали колбасники.