Squirrel (programming language)

Squirrel is a high level imperative, object-oriented programming language, designed to be a lightweight scripting language that fits in the size, memory bandwidth, and real-time requirements of applications like video games.

MirthKit, a simple toolkit for making and distributing open source, cross-platform 2D games, uses Squirrel for its platform. It is used extensively by Code::Blocks for scripting and was also used in Final Fantasy Crystal Chronicles: My Life as a King. It is also used in Left 4 Dead 2, Portal 2 and Thimbleweed Park for scripted events and in NewDark, an unofficial Thief 2: The Metal Age engine update, to facilitate additional, simplified means of scripting mission events, aside of the regular C scripting.

Language features

Syntax

Squirrel uses a C-like syntax, albeit inspired by that of Lua as well.

Factorial in Squirrel
local function factorial(x) // Getting function which is factorial, then getting value which is x
{
  if (x <= 1) {  // if x is less than 1
    return 1;  // then the code will just return 1
  }
  else { // if that doesn't work
    return x * factorial(x-1); // then the code will return x times factorial(x-1)
  }
}
Generators
function not_a_random_number_generator(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 = not_a_random_number_generator(100);

for(local i = 0; i < 10; i += 1)
   print(">"+resume randtor+"\n");
Classes and inheritance
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();

Applications

Applications using Squirrel

  • Code::Blocks, integrated development environment
  • Enduro/X, cluster application server
  • Electric Imp, an end-to-end IoT platform

Games using Squirrel

History

The language was made public in 2003 under the zlib/libpng license. In November 2010, the license was changed to the MIT license to enable the project to be hosted on Google Code. It is developed and maintained by Alberto Demichelis.

See also

References

Uses material from the Wikipedia article Squirrel (programming language), released under the CC BY-SA 4.0 license.