글
Lua는
Lua용 C 언어의 API
훅을 제공하는 애플리케이션이라면 어떤 애플리케이션이라도 짜 넣을
수 있는 스크립트 엔진이다. 최근 Lua의 JIT 컴파일러의 버전 2가 베타가 되었다. 이것은 트레이스 컴파일러와 어셈블러에서 쓰여진 인터프린터에 근거하여 완전하게 고쳐 쓴 VM이 포함되어 있다.
………
Lua는 범용 스크립트 언어로 구문은 Modula로부터 빌려 오고 있다. 또 SNOBOL이나 AWK, C++ 그리고 Lisp으로부터도 영향을 받고 있다. 또 Scheme로부터도 큰 영향을 받은 언어이다. 데이터 정의 언어의 구문은 Ierusalimschy씨가 만들었던
SOL(포르투갈어로 '태양')이라고
하는 언어로부터 계승하고 있지만 이 SOL는 Lua에 의해서
바뀌었다. 그 외의 특징으로서는 함수형으로 확장하면 객체 지향 언어로서 사용할 수 있고 프로토 타입
베이스이기도 하며 가베지 콜렉션도 지원하고 있다.
Lua는 C의 API를
가지고 있으므로 여러가지 언어로 쓰여진 애플리케이션에 간단하게 임베디드 할 수 있다. 이 API는 코어 부분의 API와 확장 라이브러리로 나누어져 있다. 바이너리 패키지의 크기는 플랫폼에 따라서 다르지만 200 ~ 700KB정도로
매우 작으며 ANSI 또는 ISO C 컴파일러를 탑재하는
플랫폼이면 어떠한 플랫폼에서도 동작한다. 실제 모든 Unix/Linux나 Windows에서 동작할 뿐만 아니라 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로 쓰여진 웹 프레임웍도 최저 둘은 존재한다. Kepler과 Orbit이다.
출처 : http://www.infoq.com/jp/news/2010/01/LuaJIT-2.0
댓글