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 and embedded systems.
MirthKit, a simple toolkit for making and distributing open source, cross-platform 2D games, uses Squirrel for its platform.MirthKit Developer Wiki  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.
;Factorial in Squirrel:
function factorial(x)   {     if (x == 0) {       return 1;     }     else {       return x * 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
Left 4 Dead 2
Thief II (unofficial NewDark engine update)
Portal 2
Alien Swarm
Titanfall
Apex Legends
Nuclear Dawn
OpenTTD
GTA IV's IV-MP
Mafia II's M2-Multiplayer
Counter Strike: Global Offensive
Shadow Warrior
War Thunder
CRSED: F.O.A.D.
SuperTux
Battle Brothers
Sonic Unleashed (PS2/Wii)
Contagion  (PC)
Thimbleweed Park
Simutrans
Vice City Multiplayer, Vice City Multiplayer a mod for Grand Theft Auto: Vice City
Liberty Unleashed
Zero no Tsukaima - Muma ga Tsumugu Yokaze no Nocturne (PS2)
Zero no Tsukaima - Maigo no Period to Ikusen no Symphony (PS2)
Zero no Tsukaima - Shou-akuma to Harukaze no Concerto (PS2)
Antinomy of Common Flowers
Final Fantasy Crystal Chronicles: My Life as a King
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
