스퀴럴 (프로그래밍 언어)

스퀴럴() 프로그래밍 언어는 스크립트 언어로 명령형, 절차적, 객체 지향적 특징을 지닌다. 메모리 사용량이 적고 실시간 처리가 우수하여 주로 게임 내 탑재 언어로 쓰이고 있다.

2003년부터 개발하기 시작했고 zlib/libpng 라이선스를 가지고 있다. 개발 및 유지보수는 Alberto Demichelis가 맡고 있다.

특징 
C 언어에 탑재(host)하여 동작하는 것을 목적으로 설계되었으며 빠른 실행 속도 및 다양한 플랫폼으로의 손쉬운 이식, 편리성이 특징이다. 또한 스크립트 라이브러리로 C 언어를 이용할 수 있다.

제작 동기는 처음에 루아의 클론에서 시작했으며 루아의 이질적인 문법과 기능의 제한을 확장하기 위해 스퀴럴이 제작되었다.

루아와 비교했을 때 다른 점을 들면 다음과 같다.
 C/C++의 형태를 가지고 있고
 정수와 부동소수점(실수) 양쪽 모두 가지고 있으며
 배열의 인덱스는 0부터 시작
 테이블과 배열이 서로 다른 구조를 가지고
 클래스를 가지며 클래스는 상속 가능 하다.

메모리 관리 방식은 기본적으로 참조 횟수 계산 방식(reference counting)을 사용하며 가비지 컬렉팅(garbage collection)도 사용한다.

기능 
 유동적인(dynamic) 자료형
 대리자
 클래스 & 상속
 우선 순위 함수
 제네레이터
 협동 스레드 (코루틴)
 재귀 호출 최적화
 예외 처리 (try, catch, throw)
 자동 메모리 관리 (참조 횟수 계산 방식, 가비지 컬렉팅)
 약한 참조 횐수 계산
 컴파일러 및 가상 머신을 합쳐 6k 정도의 C++ 코드로 구성
 옵션으로 16비트 문자 코드(UTF-16 유니코드 대응) 사용 가능

문법 
스퀴럴은 C/C++와 유사한 문법을 가진다.

스퀴럴로 구현한 팩토리얼
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(vargc >= 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 this.getclass())
      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();

사용 소프트웨어 
스퀴럴은 다음과 같은 소프트웨어가 사용하고 있다.
 작은 임금님과 약속의 나라 파이널 판타지 크리스탈 크로니클 (Wii 웨어)
 Portal2
 Left4Dead2
 GTA Vicecity Multiplayer
 GTAIV's IV-MP
 Mafia II's M2-Multiplayer
 Alien Swarm
 Counter Strike: Global Offensive
 Shadow Warrior
동방빙의화

같이 보기 
 루아 (프로그래밍 언어)
 파이썬
 루비 (프로그래밍 언어)

외부 링크 
 스퀴럴 웹사이트
 스퀴럴 위키 
 오픈소스 게임 아카데미

스크립트 언어
2003년 개발된 프로그래밍 언어
C로 작성된 자유 소프트웨어
크로스 플랫폼 자유 소프트웨어
자유 라이브러리