스퀴럴 (프로그래밍 언어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
스퀴럴은 C 언어에 임베딩되어 빠른 실행 속도, 이식성, 편리성을 제공하는 스크립트 언어이다. 동적 타이핑, 위임, 고차 함수, 코루틴, 예외 처리 등 다양한 기능을 지원하며, C/C++와 유사한 문법을 사용한다. Lua의 영향을 받아 설계되었으며, C/C++와 같은 구문, 테이블과 배열의 분리, 정수와 부동 소수점의 구분, 0부터 시작하는 배열 인덱스, 클래스와 상속을 지원하는 특징을 갖는다. 2003년 zlib/libpng 라이선스로 공개되었으며, 2010년 MIT 라이선스로 변경되었다. 코드::블록스, 레프트 4 데드 2, 포탈 2, Apex 레전드 등 다양한 소프트웨어 및 게임에서 활용된다.
더 읽어볼만한 페이지
- 2003년 개발된 프로그래밍 언어 - 스칼라 (프로그래밍 언어)
스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다. - 2003년 개발된 프로그래밍 언어 - 아파치 그루비
아파치 그루비는 자바 가상 머신에서 실행되는 동적 타이핑 프로그래밍 언어이며, 자바와 파이썬 등의 특징을 결합하여 웹 애플리케이션 개발 등 다양한 분야에서 활용된다. - 자유 라이브러리 - Tk (소프트웨어)
Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다. - 자유 라이브러리 - SQLite
SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다. - 스크립트 언어 - Tcl
Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다. - 스크립트 언어 - PHP
PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
스퀴럴 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
이름 | 스쿼럴 |
종류 | 멀티 패러다임: 스크립팅, 명령형, 함수형, 객체 지향 |
설계자 | Alberto Demichelis |
최초 공개 | 2003년 9월 6일 |
최신 안정화 버전 | 3.2 |
최신 안정화 버전 날짜 | 2022년 2월 11일 |
자료형 | 동적 |
영향을 준 언어 | C++, 자바스크립트, 루아, 파이썬 |
영향을 받은 언어 | MiniD |
운영 체제 | 크로스 플랫폼 |
라이선스 | MIT 라이선스 |
파일 확장자 | .nut |
웹사이트 | 스쿼럴 공식 웹사이트 |
2. 특징
C 언어에 탑재(host)하여 동작하는 것을 목적으로 설계되었으며 빠른 실행 속도 및 다양한 플랫폼으로의 손쉬운 이식, 편리성이 특징이다. 또한 스크립트 라이브러리로 C 언어를 이용할 수 있다.[1]
제작 동기는 처음에 루아의 클론에서 시작했으며 루아의 이질적인 문법과 기능의 제한을 확장하기 위해 스퀴럴이 제작되었다.[1]
메모리 관리 방식은 기본적으로 참조 횟수 계산 방식(reference counting)을 사용하며 가비지 컬렉팅(garbage collection)도 사용한다.[1]
그 외에 다음과 같은 특징을 갖는다.
- 동적 타이핑[1]
- 위임[1]
- 고차 함수[1]
- 제너레이터[1]
- 협동 스레드(코루틴)[1]
- 꼬리 재귀[1]
- 예외 처리[1]
- 자동 메모리 관리 (주로 백업 가비지 컬렉터를 사용한 참조 카운팅)[1]
- 약한 참조[1]
- 컴파일러와 가상 머신 모두 약 7천 줄의 C++ 코드에 맞춰져 있다.[1]
- 선택적 16비트 문자열 문자열[1]
- 문자 코드로 멀티바이트 문자와 와이드 문자 (UTF-16)를 전환하여 빌드 가능[1]
C 언어의 호스트 프로그램에 포함되도록 설계되었으며, 빠른 작동 속도, 높은 이식성, 쉬운 임베딩이 특징이다. 일단 바이트코드로 컴파일되어 가상 머신 (VM)에서 실행된다. 컴파일러와 VM은 모두 6000행 정도의 C++(C++)로 구현되었으며, 모두 오픈 소스로 공개되어 있다. 라이브러리는 C++뿐만 아니라 C 언어에서도 사용할 수 있다.[1]
Lua를 강하게 의식하여 설계된 언어이며, 임베딩을 위한 라이브러리의 함수 시그니처는 Lua와 유사성이 있다.[1]
2. 1. 루아와의 비교
루아와의 차이점 |
---|
3. 기능
그 외에 다음과 같은 특징을 갖는다.
Lua를 강하게 의식하여 설계된 언어이며, 임베딩을 위한 라이브러리의 함수 시그니처는 Lua와 유사성이 있다. 단, 다음과 같은 차이점이 있다.
스퀴럴 | Lua |
---|---|
C 언어/C++(C++)와 유사한 구문을 채택하고 있다. | |
테이블과 배열이 별개의 객체이다. | |
정수와 부동 소수점 숫자가 별개의 객체이다. | |
배열의 인덱스가 0부터 시작한다. | |
클래스와 상속을 다루는 구문을 내장하고 있다. | |
정의되지 않은 변수에 대한 대입은 오류로 처리하고, 변수 정의용 구문 `obj.attr <- x`를 제공 | 변수에 대입하는 식 `obj.attr = x`에서 변수 이름을 오타 냈을 때, 오타 난 이름의 새로운 변수가 정의되어 버리는 것으로 버그의 온상이 되는 것을 방지 |
테이블 정의에 JSON 형식의 표기를 사용할 수 있다. |
4. 문법
스퀴럴은 C/C++와 유사한 문법을 가지며, 루아의 문법에서도 영감을 받았다. 행의 끝에 세미콜론(;)은 있어도 되고 없어도 된다.
스퀴럴 문법의 주요 특징은 다음과 같다.
4. 1. 팩토리얼 예제
다음은 스퀴럴로 구현한 팩토리얼 함수이다.
function factorial(x)
{
if (x == 0) {
return 1;
}
else {
return x * factorial(x-1);
}
}
4. 2. 난수 생성기 (코루틴) 예제
스퀴럴을 사용한 난수 생성기(코루틴) 예시는 다음과 같다.
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");
위 코드는 `gen_random`이라는 코루틴 함수를 정의한다. 이 함수는 `max` 값을 인자로 받아 이를 기반으로 난수를 생성한다.
- `last`: 난수 생성에 사용되는 초깃값으로, 42로 설정되어 있다.
- `IM`, `IA`, `IC`: 난수 생성 공식에 사용되는 상수들이다.
- `for(;;)`: 무한 루프를 의미하며, 코루틴이 계속해서 난수를 생성할 수 있도록 한다.
- `yield`: 현재까지 계산된 난수 값을 반환하고 코루틴의 실행을 일시 중지한다.
- `randtor`: `gen_random(100)`을 호출하여 생성된 코루틴 객체를 저장한다.
- `for` 루프: `resume randtor`를 통해 코루틴을 다시 실행시키고 생성된 난수를 출력하는 과정을 10번 반복한다.
4. 3. 클래스와 상속 예제
javaclass 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();
```
스퀴럴은 클래스 기반 객체 지향 프로그래밍을 지원하며, 상속을 통해 기존 클래스의 기능을 확장할 수 있다. 위의 코드는 `BaseVector` 클래스를 정의하고, 이를 상속받는 `Vector3` 클래스를 구현한 예시이다. `Vector3` 클래스는 `BaseVector`의 속성(x, y, z)을 상속받고, `_add`와 `Print` 메서드를 추가로 정의한다. `_add` 메서드는 두 `Vector3` 객체를 더하는 기능을, `Print` 메서드는 객체의 좌표를 출력하는 기능을 수행한다.
5. 활용 사례
스퀴럴은 게임을 포함한 다양한 소프트웨어에서 스크립팅 언어로 활용되고 있다. 특히 유연성과 성능 덕분에 게임 분야에서 널리 사용된다.
스퀴럴이 사용된 대표적인 게임으로는 Wii 웨어 게임 작은 임금님과 약속의 나라 파이널 판타지 크리스탈 크로니클, 포탈 2, 레프트 4 데드 2 등이 있다.[27] 또한, 그랜드 테프트 오토: 바이스 시티의 MOD인 Vice City Multiplayer, GTAIV's IV-MP, 마피아 II's M2-Multiplayer와 같은 게임 MOD 개발에도 사용되었다.[28][29][30] 이 외에도 Alien Swarm, 카운터 스트라이크: 글로벌 오펜시브, Shadow Warrior, 동방심기루[31], 스쿨걸 스트라이커스[32][33], Simutrans, OpenTTD[26] 등에서 사용되었다.
zlib/libpng 라이선스는 라이선스 표기 의무가 없기 때문에, 위에 언급된 소프트웨어 외에도 스퀴럴을 사용하고도 이를 공개하지 않은 경우가 많을 수 있다.
5. 1. 애플리케이션
스퀴럴은 다음과 같은 소프트웨어에서 사용되고 있다.- Wii 웨어 게임 "작은 임금님과 약속의 나라 파이널 판타지 크리스탈 크로니클"
- 포탈 2
- 레프트 포 데드 2
- GTA Vicecity Multiplayer
- GTAIV's IV-MP
- Mafia II's M2-Multiplayer
- Alien Swarm
- 카운터 스트라이크: 글로벌 오펜시브
- Shadow Warrior
- 동방빙의화
- 통합 개발 환경 코드::블록스
- 클러스터 애플리케이션 서버 엔듀로/X
- 엔드 투 엔드 사물 인터넷 플랫폼 일렉트릭 임프[5]
5. 2. 게임
스퀴럴은 다음과 같은 게임에서 사용되고 있다.게임 이름 | 플랫폼 | 비고 |
---|---|---|
작은 임금님과 약속의 나라 파이널 판타지 크리스탈 크로니클 | Wii 웨어 | [2] |
포탈 2 | [10] | |
레프트 4 데드 2 | [10] | |
GTA Vicecity Multiplayer|GTA 바이스 시티 멀티플레이어영어 | Grand Theft Auto: Vice City의 모드[19][20] | |
GTA IV's IV-MP | [9] | |
마피아 II's M2-Multiplayer | [12] | |
Alien Swarm|에일리언 스웜영어 | [10] | |
카운터 스트라이크: 글로벌 오펜시브 | [10] | |
Shadow Warrior (2013 video game)|섀도우 워리어 (2013 비디오 게임)영어 | ||
동방빙의화 | ||
에일리언 스웜 | [1] | |
안티노미 오브 커먼 플라워즈 | [6] | |
Apex 레전드 | [7] | |
배틀 브라더스 | ||
컨테이전 | [10] | |
CRSED: F.O.A.D.|CRSED: F.O.A.D.영어 | ||
파이널 판타지 크리스탈 크로니클: 마이 라이프 as 어 킹 | [2] | |
고딕 온라인 | 고딕 II의 모드[8] | |
Liberty Unleashed | [11] | |
멜티 블러드: 타입 루미나 | [13] | |
뉴클리어 던 | [10] | |
오픈TTD | [14] | |
시뮬트랜스 | [15] | |
소닉 언리쉬드 | PS2/Wii | [16] |
수퍼턱스 | ||
팀 포트리스 2 | [10] | |
심비위드 파크 | [17] | |
도둑 II | 비공식 NewDark 엔진 업데이트[18] | |
타이탄폴 | [10] | |
언더 나이트 인버스 | [21] | |
워 썬더 | ||
제로의 사역마 - 미아가 엮는 밤바람의 녹턴 | PS2 | |
제로의 사역마 - 악마가 자아내는 밤바람의 녹턴 | PS2 | |
제로의 사역마 - 소악마와 봄바람의 협주곡 | PS2 | |
OpenTTD | COM 플레이어용 AI 모듈 (NoAI)의 스크립트에 스퀴럴이 채용[26] | |
V-Multiplayer | [28] | |
동방심기루 | [31] | |
스쿨걸 스트라이커스 | [32][33] |
다만 zlib/libpng 라이선스는 라이선스 표기 의무가 없기 때문에, 위에 언급된 소프트웨어 외에도 스퀴럴 채용을 공개하지 않은 소프트웨어가 다수 존재할 가능성이 있다.
6. 역사
알베르토 데미켈리스가 2003년에 스퀴럴을 개발했으며, zlib/libpng 라이선스로 공개했다.[22] 2010년 11월, 구글 코드에서 프로젝트를 호스팅하기 위해 라이선스를 MIT 라이선스로 변경했다.[23][24] 스퀴럴은 오픈 소스이지만, 개발과 유지는 알베르토 데미켈리스가 중심이 되어 진행하고 있다.
참조
[1]
웹사이트
MirthKit Developer Wiki
http://devs.mirthkit[...]
2014-02-11
[2]
웹사이트
Gamasutra - GDC 2008 Event Coverage
http://www.gamasutra[...]
Gamasutra
2008-02-21
[3]
웹사이트
Exclusive: Behind The Scenes of Final Fantasy's WiiWare Debut
http://www.gamasutra[...]
Gamasutra
2011-09-22
[4]
웹사이트
L4D2 Vscripts - Valve Developer Community
http://developer.val[...]
2018-07-06
[5]
웹사이트
Electric Imp programming guide
https://developer.el[...]
[6]
웹사이트
th155-decomp
https://github.com/m[...]
2020-10-19
[7]
웹사이트
WHAT in the hell, is consumable nut? Please help this is an error code I got, have any of you got this before?
https://www.reddit.c[...]
2021-09-04
[8]
웹사이트
Gothic 2 Online
https://gothic-onlin[...]
[9]
웹사이트
iv-multiplayer.com
http://wiki.iv-multi[...]
2018-07-06
[10]
웹사이트
VScript
https://developer.va[...]
2015-01-17
[11]
웹사이트
Liberty Unleashed
http://liberty-unlea[...]
2019-12-04
[12]
웹사이트
m2-multiplayer.com
http://www.m2-multip[...]
2018-07-06
[13]
웹사이트
undernightinbirth
https://github.com/F[...]
2024-08-18
[14]
웹사이트
AI:Main Page - OpenTTD
http://wiki.openttd.[...]
2018-07-06
[15]
웹사이트
Simutrans-Squirrel-API: Main Page
https://dwachs.githu[...]
2018-07-06
[16]
웹사이트
The VG Resource Wiki
https://wiki.vg-reso[...]
2021-09-04
[17]
웹사이트
Thimbleweed Park Blog- Engine
http://blog.thimblew[...]
2018-07-06
[18]
웹사이트
NewDark 1.25: Squirrel script?
https://www.ttlg.com[...]
2019-12-25
[19]
웹사이트
Vice City Multiplayer
https://vc-mp.org/
[20]
웹사이트
Welcome To VC-MP website!
https://vc-mp.org/
2014-05-04
[21]
웹사이트
undernightinbirth
https://github.com/F[...]
2024-08-18
[22]
웹사이트
The Squirrel programming language
http://sourceforge.n[...]
2018-07-06
[23]
웹사이트
Moving to code.google.com and MIT License - The Language - Squirrel - The Programming Language
http://forum.squirre[...]
2018-07-06
[24]
웹사이트
Google Code Archive - Long-term storage for Google Code Project Hosting.
https://code.google.[...]
2018-07-06
[25]
웹사이트
Wiiウェアで始まった、スクエニの“小規模開発への挑戦”。「小さな王様と約束の国 FFCC」の開発事例
https://game.watch.i[...]
[26]
웹사이트
AI:Introduction
http://wiki.openttd.[...]
[27]
웹사이트
VScript - Valve Developer Community
https://developer.va[...]
[28]
웹사이트
5-mp.com
http://www.5-mp.com/[...]
[29]
웹사이트
iv-multiplayer.com
http://www.iv-multip[...]
[30]
웹사이트
m2-multiplayer.com
http://www.m2-multip[...]
[31]
웹사이트
東方心綺楼の解析 – 他人の空似
http://resemblances.[...]
[32]
웹사이트
"スクールガールストライカーズの\n内製クライアントエンジン"
https://www.jp.squar[...]
[33]
웹사이트
スクエニモバイルカンファレンスに行ってきたまとめ · GitHub
https://gist.github.[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com