스쿼럴3를 대충 훑어보는데 어제 하루가 들어갔다. 그리고 본래 목적인 스쿼럴의 성능 테스트를 해 보기로 했다. 비교대상은 루아.

벤치마크를 위한 스크립트, 스쿼럴.

//squirrel test-_-
local i,n = 0;
local t = 10000000;
for (i = 0; i < t; i++)
{
n++;
}

print(“squirrel processing : “);
print(n);

다음, 루아.
[lua]
— test-_-
t = 10000000
n = 0

for i = 0 , t-1 do
n = n + 1
end

print (“lua processing : ” .. n);
[/lua]
그리고 그 결과……………
sq >3071ms
sq >3039ms
sq >3068ms
sq >3034ms
sq >3039ms
sq >3067ms
sq >3082ms
sq >3151ms
sq >3112ms
sq >3078ms
lua>472ms
lua>478ms
lua>474ms
lua>467ms
lua>475ms
lua>479ms
lua>495ms
lua>483ms
lua>481ms
lua>482ms
squirrel average : 3074.1ms
lua average : 478.6ms
squirrel / lua = 6.42311

루아가 빠르다. 이렇게 단순한 비교로 모든 걸 따질 수는없겠지만.그러고보면 파이썬도 루프성능은 좋지 않다던가.
다만, 스쿼럴 포럼에서 후증가가 전증가보다 느리다는 언급을 발견하고 전증가로, 또는 n = n + 1로 고쳐서 테스트 해보니,
후증가를 n = n + 1로 평가하는 듯, 동일한 성능을 보였고, 전증가로 교체했을시의 결과는 다음과 같다.

squirrel average : 2426.8ms
lua average : 473.8ms
squirrel / lua = 5.12199

아주 약간이지만 개선됨을 알 수 있다. 최근의 C++ 컴파일러라면 당연히 이런것까지 최적화 하겠지만..
스쿼럴은 아직 좀 더 발전할 필요가 있을듯.

좀더 정보를 찾아 보니, 스쿼럴의 원 저자는 포럼의 언급에서, 스쿼럴이 루아보다는 파이썬이나 루비와 비교되기를 원한다고 한다. 특히 메모리 관련 문제에서, 레퍼런스 카운팅이 CPU파워의 20%정도를 고정적으로 잡아먹지만 루아같은 GC언어는 보다 큰 프로그램에서 더 많은 메모리를 사용할 때 더 많은 부하를 발생시킬 것이라고 하며, 작은 어플리케이션을 위해서는 자신 역시 새로 언어를 작성하든지 루아를 쓰겠다:), 라고 말한다.

일러두기>
환경 : Core i7 860 / Win7 x64 / VS2008
Lua 5.1.4, Squirrel3.0 beta 1

 테스트 코드 : script_bench