CAFE

루아 스크립트

루아 스크립트 소개

작성자날개|작성시간17.07.07|조회수647 목록 댓글 0

1. 개요[편집]

1993년에 개발된 프로그래밍 언어. 이름은 달을 의미하는 포르투갈어 단어라고 한다. 스크립트 언어를 하나의 목적으로 가지고 있기 때문에 굉장히 작고 가벼운 인터프리터형 언어이다. 현재 안정버전은 5.3

2. 설명[편집]

태생 자체가 가벼운 스크립트 언어이며, C/C++에 접착시키기 매우 쉽다. 개발 과정에서 재컴파일이나 리로딩없이 바로 설정 변화를 적용할 수 있는 점 때문에 특히 게임업계에서 많이 쓰인다. 한국에선 월드 오브 워크래프트에서 유저들이 UI를 직접 제작할 수 있게 됨으로서 일반 게이머들에게도 인지도를 얻었는데, 사실 그전에도 여러 게임에 쓰였다. 루아가 쓰인 게임들 리스트. 와우에서처럼 커스텀 UI 설정 언어로도 쓰이고, RPG 게임 등에서 스크립트로도 쓰인다. 제작과정에서 내부적으로 활용하는 경우도 있고, API를 유저들에게 공개하여 MOD 제작 등에 쓰이기도 한다. 국내게임으론 라그나로크 온라인에서 NPC의 AI와 호문클루스의 AI, 용병의 AI에 Lua가 쓰였으며, 이 가운데 호문클루스와 용병은 유저가 직접 변경이 가능했다(아직도 되는지 확인 바람). 3차 직업군이 등장할 즈음에 용병의 AI를 변경하여 거의 0프레임 수준의 스킬이 가능하다는게 여기저기 알려져 너도 나도 창용병 무명섬 3층 고고싱을 외친적이 있다.
게리모드에서도 루아를 지원해주고, 일부 소스게임(또는 모드)들도 Lua를 사용한다. 특이한건 GTA 4에도 Lua 스크립트 모드가 있다. GTA: San Andreas의 멀티플레이어의 하나인 MTA: San Andreas의 서버도 Lua 언어로 작성한다. TAS 영상을 만드는 데에도 일부 사용한다.

한게임에서 제공중인 오픈 마켓형 게임 툴인 아이두게임도 기본 언어는 Lua로 이루어져있다. 초보 프로그래머들을 위해서 배려를 해준 것이라고...

마인크래프트의 모드 컴퓨터크래프트의 프로그램 작성도 이 언어로 이루어진다.

하프 라이프 2의 모드격 게임인 게리 모드에서 유저들이 직접 메커니즘을 디자인할때 쓰이는 언어다. 이 언어 덕분에 상자로 만든 건물부터 투석기, 전투기, 헬리콥터, 골드버그 장치, 컴퓨터(!)까지 유저 맘대로 만들 수 있게 되었다.

아이패드로 만든 Lua 개발 툴도 있다! 이름은 공개 당시 Codify, 현재 Codea이다.사이트 링크. 막 패드에서 이래저래 코딩해서 만든다. [1] 

3. 언어적 특징[편집]

3.1. 가벼움[편집]

인터프리터(또는 후술한 JIT 컴파일러)의 용량이 300kb도 안 되는 정도로 작고 굉장히 빠르다. 굉장히 적은 수의 데이터형만을 지원하긴 하지만 그만큼 가볍다. 다양한 프로그램에 쉽게 붙일 수 있는 이유도 용량과 속도의 부담이 적기 때문. 그러면서도 다양한 패러다임을 가지고 있는데, 절차적으로도, 객체지향적으로도, 함수형으로도 이용할 수 있다.

3.2. 문법적 특징[편집]

언어의 문법이 굉장히 단순한 편이다. 다만, C 스타일의 언어들과 비교했을 때 다른 점이 많다는 것이 특징이다.

  • 루아에서는 null이 아닌 nil

  • nilfalse 만 거짓이고 나머지는 true (0도 true다.)

  • 기본적인 자료형은 nil, boolean, number(double), string, function, table

  • ==의 반대 연산자로 보통은 !=<>등을 많이 사용하는데, 루아에서는 ~=

  • 논리연산자도 타 언어에서 !, &&, ||, ^^등을 사용하는데 lua에서는 단어 그대로 not, and, or로 쓰고 xor은 존재하지 않는다.

  • ^ 가 xor 관련이 아닌 pow, 즉 제곱

  • A+=B 같은 꼴은 지원하지 않으며 무조건 A = A + B 처럼 작성해야한다.

  • 문자열 합치기는 +가 아닌 ..

  • self라는 예약어 아닌 예약어가 존재.

  • 반복제어문에 continue가 없다.

  • GOTO가 있다.

  • 함수를 정의하는게 아니라 함수를 만들어 변수에 대입하는 방식으로 작성이 가능. (이는 JavaScript도 동일하다.)

3.3. 테이블[편집]

루아의 가장 큰 특징이자 루아의 상징은 테이블이다. 다른 언어의 배열과는 다르게 다양한 자료형을 키로 사용가능한데, 이것을 가지고 단순한 구조체, 배열 뿐만 아니라 객체, 클래스, 인터페이스 등을 다 구현해 낼 수 있다. 사실 루아의 테이블은 단순히 저장하는 것이 아니라 메타테이블과 같이 써서 테이블에 기능을 붙일 수 있기 때문이다. 그래서 루아를 잘 다룰려면 테이블과 메타테이블을 잘 다룰 수 있어야 한다. 와우 애드온에선 아주 자주 쓴다.

3.4. 함수형 프로그래밍[편집]

루아도 일단은 함수형 프로그래밍이 어느정도 된다는 것인데, 함수를 익명함수로 생성할 수도 있고 전달할 수도 있다.(JavaScript에서 지원하는 정도와 비슷하다.) 그리고 사실 파일로 저장해서 불러오는 스크립트 자체가 함수다. 대신 성능을 위해서 스택의 크기가 고정되어 있기 때문에 어떤 함수든지 지역변수를 200개 이상 만들 수가 없다. 대신 전역범위에 저장하는 _G라는 테이블이 존재한다.

클로저와 익명함수를 지원한다.

3.5. JIT[편집]

LuaJIT[2]는 Lua의 Just-In-Time Compiler인데, 엄청난 장점으로 타 JIT와 비교해도 더 우수한 성능을 보여준다. 주 비교 대상은 V8인데, 자료구조 성능을 제외하면 전반적으로 루아쪽이 성능이 더 좋다. 파이썬, 루비와 비교하면 수십배 정도가 더 빠르다.

자바스크립트와 루아는 문법과 패러다임이 90% 이상 비슷한 사촌언어격이지만 JIT 성능의 구현 측면에 있어서는 자바스크립트가 가진 문법 일부가 성능 향상에 약점으로 작용한다고 한다. [참조] 또한 메모리 사용량에 있어서 LuaJIT 가 더 나은 최적화를 보여주고 있다. 따라서 Node.js 를 LuaJIT 기반으로 다시 작성한 Luvit 이라는 프로젝트가 활성화 되었다.

홈페이지에 따르면 인터프리터를 손수 어셈블리어로 작성했으며, 이미 상당한 수준의 최적화가 되어있다고 한다. 파이썬의 JIT 컴파일러인 PyPy가 자기 자신으로 JIT를 구현하는 것과 대조되는 부분. Lua가 그나마 단순한 언어라 이런 일이 되는 듯하다.

이 때문인지 업데이트가 자주 되는 편은 아닌데, Lua5.3이 나오고 있는 동안에도 LuaJIT는 Lua5.1 문법이 최신이다.

또한, 안그래도 손쉬운 C 와의 인터페이스 작업은 LuaJIT 의 FFI (Foreign Function Interface)를 이용하면 Low-Level C 함수들을 별다른 작업 없이 직접적으로 사용할 수 있다. 이 FFI 방식으로 인해 스크립트 - 네이티브 코드간 호출규약을 맞추기 위한 별도의 작업이 사실상 필요가 없어지고, C 자료형을 직접 사용할 수 있게 되며 호출 성능은 네이티브에 견줄만큼 빨라지기 때문에, 일단 JIT 를 사용하게 되면 기존 루아 바인딩 코드를 사용할 일이 극히 적어진다. 이 FFI 방식은 이후 파이썬의 CFFI 라이브러리에 많은 영감을 주었다. (Node.js 의 node-ffi 도 상당한 영향을 받은 것으로 추정된다.)

네이티브에 견줄만큼 속도가 빠르고, 메모리 사용량이 매우 적기 때문에 최근 Nginx 에 LuaJIT 포함시켜서 커스터마이징을 한 OpenResty 웹서버가 인기를 끌고 있다. CDN 서비스로 유명한 Cloudflare 와 알렉사 Top 13 규모의 세계에서 가장 큰 C2C 상거래 서비스 (지마켓/옥션을 생각하면 된다) 인 TaoBao 에서 주-웹서버로 사용하고 있으며 두 회사의 개발자들이 OpenResty 개발을 주도하고 있다.
(Cloudflare 의 CDN 서비스는 사실 Nginx 에 LuaJIT 로 코드를 올려 커스터마이징한 서비스 들이다. 그래서 타사와 달리 진정한 CDN 서비스가 아니라는 비평도 있다.)

알파고로 유명한 DeepMind 사가 알파고의 기반인 Q-Learning 을 구현할때 사용된 Torch 머신러닝 미들웨어도 LuaJIT 로 작성되어있다. (DeepMind 사의 구인공고는 그래서 C/C++ 과 Lua 스크립트가 필수역량으로 적혀있다.)

3.6. 파이썬과 비교[편집]

비슷한 컨셉의 파이썬과 비교가 많이 되는데, '배터리가 포함된'[3] 파이썬은 어느정도 단독으로 프로그램을 만들 수 있는 환경인 반면, 루아는 기본 기능만을 포함하고 있어 단독으로 응용프로그램을 만들기는 어렵다. 물론 그만큼 가볍다는 이야기이도 하다.


출처 : https://namu.wiki/w/Lua?from=%EB%A3%A8%EC%95%84(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4)

나무위키

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼