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
Dynamic typing
Delegation
Classes, inheritance
Higher order functions
Generators
Cooperative threads (coroutines)
Tail recursion
Exception handling
Automatic memory management (mainly reference counting with backup garbage collector)
Weak references
Both compiler and virtual machine fit together in about 7k lines of C++ code
Optional 16-bit character strings

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 

 Alien Swarm
 Antinomy of Common Flowers
 Apex Legends
 Battle Brothers
 Contagion
 Counter Strike: Global Offensive
 CRSED: F.O.A.D.
 Final Fantasy Crystal Chronicles: My Life as a King
 Gothic Online, a mod for Gothic II
 GTA IV's IV-MP
 Left 4 Dead 2 Liberty Unleashed Mafia II's M2-Multiplayer
 Melty Blood: Type Lumina Nuclear Dawn OpenTTD Portal 2 Shadow Warrior Simutrans Sonic Unleashed (PS2/Wii)
 SuperTux Team Fortress 2 Thimbleweed Park Thief II (unofficial NewDark engine update)
 Titanfall Vice City Multiplayer, a mod for Grand Theft Auto: Vice City Under Night In-Birth War Thunder Zero no Tsukaima - Maigo no Period to Ikusen no Symphony (PS2)
 Zero no Tsukaima - Muma ga Tsumugu Yokaze no Nocturne (PS2)
 Zero no Tsukaima - Shou-akuma to Harukaze no Concerto'' (PS2)

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

 Lua
 AngelScript
 Python
 ECMAScript
 Ruby

References

External links

2003 software
Cross-platform free software
Free computer libraries
Free software programmed in C
Object-oriented programming languages
Procedural programming languages
Programming languages
Programming languages created in 2003
Scripting languages
Software using the MIT license