LuaLuaC 언어의 API 훅을 제공하는 애플리케이션이라면 어떤  애플리케이션이라도 짜 넣을 수 있는 스크립트 엔진이다. 최근 LuaJIT 컴파일러의 버전 2가 베타가 되었다. 이것은 트레이스 컴파일러와 어셈블러에서 쓰여진 인터프린터에 근거하여 완전하게 고쳐 쓴 VM이 포함되어 있다.

 

………

 

Lua는 범용 스크립트 언어로 구문은 Modula로부터 빌려 오고 있다. SNOBOL이나 AWK, C++ 그리고 Lisp으로부터도 영향을 받고 있다. Scheme로부터도 큰 영향을 받은 언어이다. 데이터 정의 언어의 구문은 Ierusalimschy씨가 만들었던 SOL(포르투갈어로 '태양')이라고 하는 언어로부터 계승하고 있지만 이 SOLLua에 의해서 바뀌었다. 그 외의 특징으로서는 함수형으로 확장하면 객체 지향 언어로서 사용할 수 있고 프로토 타입 베이스이기도 하며 가베지 콜렉션도 지원하고 있다.

 

LuaCAPI를 가지고 있으므로 여러가지 언어로 쓰여진 애플리케이션에 간단하게 임베디드 할 수 있다. API는 코어 부분의 API와 확장 라이브러리로 나누어져 있다. 바이너리 패키지의 크기는 플랫폼에 따라서 다르지만 200 ~ 700KB정도로 매우 작으며 ANSI 또는 ISO C 컴파일러를 탑재하는 플랫폼이면 어떠한 플랫폼에서도 동작한다. 실제  모든 Unix/LinuxWindows에서 동작할 뿐만 아니라 ARM을 탑재한 휴대 단말이나 Rabbit 마이크로 프로세서/콘트롤러로에서도 동작한다.

 

가장 중요한 특징의 하나로서 들 수 있는 것은 테이블 형태다. 이 데이터형은 유일한 복합형이지만 확장할 수 있다. 테이블은 키와 데이터의 조합의 컬렉션(해시 이종성 연상 배열로도 알려져 있다)으로 키에 의해서 데이터를 참조한다. nil 이외라면 어떤 형태라도 키(인덱스)로서 이용할 수 있다. 수치형의 키 1은 문자열 형의 키 "1"과는 구별된다.

 

Lua에는 클래스라고 하는 개념은 없지만 펑션과 테이블을 사용해 만들 수도 있다.

테이블 안에 펑션과 관련하는 데이터를 배치하는 것으로 오브젝트를 형성할 수 있다. 계승(단일이든 다중이라도)"메타 테이블"을 사용하면 실현될 수 있다. 으브젝트가 자신에게는 존재하지 않는 메소드나 필드를 부모 오브젝트에 있는지  탐색하도록 짜면 된다.

아래는 Lua의 단순한 샘플 코드다.

 
function factorial(n)
  if n == 0 then
    return 1
  else
    return n * factorial(n - 1)
  end
end

 

다른 스크립트 언어와는 다르게 Lua는 직접 해석되는 것이 아니라 바이트 코드에 컴파일 되고 나서 독자적인 레지스터 베이스의 버추얼 머신 상에서 실행된다. 독일의 오픈 소스 개발자인 Michael Pall씨는 Lua JIT 컴파일러를 구현하여 현재 전2.0이 베타 2가 되어 있다. 우선 x86 아키텍처용 JIT를 작성하여고 현재 64비트 아키텍처로의 이식을 시도하고 있다. 작자의 LuaJIT 대한 코멘트는

유연성과 고성능을 겸비하면서 거기에 적합하지 않을 정도로 적은 메모리 밖에 사용하지 않습니다. VM에 사용하는 것이 겨우 120K 정도로 JIT 컴파일러에 필요한 것은 80K정도입니다.…

 

2009년은 오랫동안 기다리고 있었던 LuaJIT 2.0의 최초의 릴리스를 한 해가 되었습니다. 이 버전에서는 VM은 철저하게 성능을 추구하기 위해 완전하게 고쳐 써져 그 결과 어셈블러에서 쓰여진 고속 인터 프린터와 최신 기술을 이용한 JIT 컴파일러가 완성 되었습니다.

 

또 혁신적인 트레이스 컴파일러도 통합되고 있고 선진적인 SSA 베이스의 최적화와 연구 최종 단계 처리에서 고도로 조정된 코드 생성을 실현하고 있습니다. 이것에 의해서 동적 언어에 특징적인 오버헤드가 큰 폭으로 삭감 되었습니다. 그 결과  성능은 종래는 오프 라인의 정적 언어 컴파일러의 성능이라고 생각되고 있는 수준에 가까워지고 있습니다.”

 

Lua는 여러가지 애플리케이션에 짜넣을 수 있지만 한편으로 게임 개발자에게도 받아 들여지고 있다. 고성능에 더하여 한 번 게임을 중단하여 여러가지 파라미터를 만진 뒤 게임을 재개할 경우에 리로드 하기 위한 정지가 거의 없어도 되는 것이 Lua가 받아 들여지고 있는 큰 이유다. World of Warcraft이나 League of Legends, Star War 시리즈나 외의 여러가지 게임에서 개발 시에 Lua를 사용하고 있다. 그 외에도 여러가지 타입의 애플리케이션이 Lua를 이용하거나 Lua를 사용하기 위한 구현이 되고 있다. 예를 들면 Adobe Photoshop Lightroom이나 Apache HTTP Server(mod_lua 모듈), MySQL Proxy, nmap  그리고 밖에도 많이 있다. Lua로 쓰여진 웹 프레임웍도 최저 둘은 존재한다. KeplerOrbit이다.

 

 

출처 : http://www.infoq.com/jp/news/2010/01/LuaJIT-2.0

 

저작자 표시
신고
by 흥배 2010.01.29 09:00
| 1 |