| 1 | [[분류:프로그래밍 언어]][[분류:스크립트 언어]] |
|---|
| 2 | [include(틀:프로그래밍 언어)] |
|---|
| 3 | [목차] |
|---|
| 4 | [[파일:external/www.lua.org/lua.gif]] |
|---|
| 1 | 5 | |
|---|
| 6 | ## 편의상 syntax 처리를 자바스크립트로 함 |
|---|
| 7 | {{{#!syntax javascript |
|---|
| 8 | print("Hello, world!") |
|---|
| 9 | }}} |
|---|
| 10 | |
|---|
| 11 | Lua (루아) |
|---|
| 12 | [[http://www.lua.org/]] |
|---|
| 13 | |
|---|
| 14 | == 개요 == |
|---|
| 15 | 1993년에 개발된 [[프로그래밍 언어]]. 브라질 [[리우데자네이루]]의 교황청대학교에서 호베르투 예루잘링스키[* Roberto Ierusalimschy. 1960년생으로 컴퓨터과학자이며 상단의 리우 교황청 대학과 [[스탠포드 대학]]에서 부교수로 역임한 적이 있다. ~~위키백과에선 성씨를 이에루잘림[[스시]](...)라고 표기하고 있다~~] 및 2명이 공동제작했으며 이름도 달을 의미하는 [[포르투갈어]] 단어에서 따왔다. 스크립트 언어를 하나의 목적으로 가지고 있기 때문에 굉장히 작고 가벼운 인터프리터형 언어이다. 현재 안정버전은 5.4이다. |
|---|
| 16 | |
|---|
| 17 | 태생 자체가 [[C(프로그래밍 언어)|C]]/[[C++]] 프로그램 내부에 포함(embed)시키기 매우 쉬운 깔끔한 문법의 가벼운 스크립트 언어를 목표로 개발되었다. 교황청대학교 컴퓨터 그래픽 기술 연구소(Tecgraf)에서 내부적으로 개발해서 사용하던 기존의 데이터 처리용 스크립팅 언어 SOL과 DEL의 한계를 극복할 더 강력한 언어가 요구되었다고 한다.[* The evolution of Lua] |
|---|
| 18 | |
|---|
| 19 | == 언어적 특징 == |
|---|
| 20 | === 가벼움 === |
|---|
| 21 | 인터프리터(또는 후술한 JIT 컴파일러)의 용량이 일백 수십KB[* 상대적으로 덩치가 큰 LuaJIT조차 300KB 정도 된다.] 정도로 작고 굉장히 빠르다. 그 흔한 정수도 없을 정도로[* 5.3버전에 정수가 추가되었다. 이때문에 Lua 커뮤니티 파편화가 진행중이다. 아래 참고.] 굉장히 적은 수의 데이터형만을 지원하긴 하지만 그만큼 가볍다. 다양한 프로그램에 쉽게 붙일 수 있는 이유도 용량과 속도의 부담이 적기 때문. 그러면서도 다양한 패러다임을 가지고 있는데, 절차적으로도, 객체지향적으로도, 함수형으로도 이용할 수 있다. |
|---|
| 22 | |
|---|
| 23 | === 문법적 특징 === |
|---|
| 24 | 언어의 문법이 굉장히 단순한 편이다. 다만, [[C(프로그래밍 언어)|C]] 스타일의 언어들과 비교했을 때 다른 점이 많다는 것이 특징이다. |
|---|
| 25 | |
|---|
| 26 | * Lua에서는 {{{null}}}이 아닌 {{{nil}}} |
|---|
| 27 | * 진리값은 boolean type 이 있어서 {{{true}}} 는 참, {{{false}}} 는 거짓이다. boolean 이 아닐 경우 {{{nil}}}이 거짓이고 나머지는 모두 참이다. 그래서 C 와는 달리 0 도 참이다. 쉽게 말해 {{{false}}}와 {{{nil}}}만 거짓이다.[* 이 점은 [[루비|루비]]언어와 비슷하다] |
|---|
| 28 | * 기본적인 자료형은 {{{nil, boolean, number, string, function, table, userdata, thread}}} |
|---|
| 29 | * {{{==}}}의 반대 연산자로 보통은 {{{!=}}}, {{{<>}}}등을 많이 사용하는데, Lua에서는 {{{~=}}} |
|---|
| 30 | * 논리연산자도 타 언어에서 {{{!, &&, ||}}}등을 사용하는데 lua에서는 단어 그대로 {{{not, and, or}}}로 쓴다.[* 이 점은 파이썬과 비슷하다.] |
|---|
| 31 | * bitwise 연산자는 Lua 5.3에서 추가되었다. {{{&, |, ~(이항 비트 XOR), >>, <<, ~(단항 비트 NOT)}}} |
|---|
| 32 | * {{{^}}} 가 {{{xor}}} 관련이 아닌 {{{pow}}}, 즉 거듭제곱 |
|---|
| 33 | * {{{A+=B}}} 같은 할당 연산자는 지원하지 않으며 무조건 {{{A = A + B}}} 처럼 작성해야한다. |
|---|
| 34 | * 문자열 합치기는 {{{A .. B}}} |
|---|
| 35 | * {{{self}}}라는 예약어 아닌 예약어가 존재.[* 예약어(reserved keywords)로 분류되지는 않지만, 콜론을 사용한 함수 호출시에 self 변수를 다른 OOP 언어에서 제공하는 this나 self 변수처럼 함수 안에서 사용이 가능하다] |
|---|
| 36 | * 반복제어문에 {{{continue}}}가 없다. |
|---|
| 37 | * [[GOTO|{{{goto}}}]]가 있다. |
|---|
| 38 | * 1 based index다. |
|---|
| 39 | * 함수를 정의하는게 아니라 함수를 만들어 변수에 대입하는 방식으로 작성이 가능(이는 [[JavaScript]]도 동일하다). |
|---|
| 40 | * 기본 자료형에 {{{thread}}} 타입이 있으나, 실제로는 {{{coroutine}}}이다. |
|---|
| 41 | * 문자열 패턴 매칭이라는 정규 표현식과 유사한 기능을 지원한다. 다만, 정규 표현식과 다르고 기능도 부족하다. |
|---|
| 42 | * 다른 언어들과는 달리 삼항 조건 연산자 {{{(condition ? exprIfTrue : exprIfFalse)}}} 를 지원하지 않는다. {{{condition and exprIfTrue or exprIfFalse}}} 표현으로 대체 가능하다. |
|---|
| 43 | === 테이블 === |
|---|
| 44 | 다른 언어의 배열과는 다르게 다양한 자료형을 키로 사용가능한데, 이것을 가지고 단순한 구조체, 배열 뿐만 아니라 객체, 클래스, 인터페이스 등을 다 구현해 낼 수 있다. 사실 Lua의 테이블은 단순히 저장하는 것이 아니라 메타테이블과 같이 써서 테이블에 기능을 붙일 수 있기 때문이다. 그래서 Lua를 잘 다루려면 테이블과 메타테이블을 잘 다룰 수 있어야 한다. |
|---|
| 45 | |
|---|
| 46 | === [[함수형 언어|함수형 프로그래밍]] === |
|---|
| 47 | Lua도 일단은 함수형 프로그래밍이 어느정도 된다. 함수를 [[익명함수]]로 생성할 수도 있고 전달할 수도 있다([[JavaScript]]에서 지원하는 정도와 비슷하다). 그리고 사실 파일로 저장해서 불러오는 스크립트 '''자체'''가 함수다. 대신 성능을 위해서 스택의 크기가 고정되어 있기 때문에 어떤 함수든지 지역변수를 255개 이상 만들 수가 없다. 대신 전역범위에 저장하는 _G라는 테이블이 존재한다. |
|---|
| 48 | |
|---|
| 49 | [[클로저#s-8]]와 익명함수를 지원한다.[* 엄밀히 말하면 Lua에는 [[클로저#s-8]]만 존재하고, 나머지는 syntactic sugar.] |
|---|
| 50 | |
|---|
| 51 | === 파편화 === |
|---|
| 52 | 중요한 Lua 커뮤니티 파편화가 시작되었다. Lua 5.3버전이 64비트 부동소수점 타입[* 요즘 [[C(프로그래밍 언어)|C]]/[[C++]]의 double은 대개 IEEE754표준 64비트 부동소수점 타입]을 명확히 지원하기 위해서 정수형 타입을 도입한 것이 기존의 Lua코드와 호환성 문제를 일으키게 된 것이다.[* 기본 숫자 타입은 여전히 number 뿐이다. math.type()을 통해서 서브 타입을 확인해야만 64비트 부동소수점 타입인 경우에는 ~~double이라고 할 것이지 헷갈리게~~ float, 정수형인 경우에는 integer라고 구분되어 표시된다.] 게다가 LuaJIT을 개발하고 사실상 혼자 유지보수하던 Mike Pall이 앞의 정수형 문제와 기타 몇 가지 이유를 더 들어 5.3 버전을 공개적으로 크게 비판하고 LuaJIT은 Lua 5.1까지만 지원하고 자신은 더이상 개발에 관여하지 않겠다고 선언해서 문제가 매우 복잡해졌다.[* 이후에 사람들이 대체 maintainer를 [[https://news.ycombinator.com/item?id=9981802|공개모집]]했으나 적당한 사람을 찾는데 실패했다.] 때문에 LuaJIT에 의존해 성능 향상을 꾀하던 대다수의 Lua 라이브러리가 Lua 5.1까지만 지원하고 후속 개발이 진행되지 않는 사태에 이르렀다. 현재 Lua 커뮤니티는 순정 5.3 인터프리터로도 충분한 상황의 개발자와, LuaJIT과 기타 라이브러리가 꼭 필요한 개발자들로 양분되어버렸다. [[Python|파이썬]]이 파이썬2와 파이썬3로 나뉘어 파편화가 진행되어 10년이 지난 지금까지 해결이 되지 않은 것과 비견된다. |
|---|
| 53 | |
|---|
| 54 | ==== [[http://luajit.org/|LuaJIT]] ==== |
|---|
| 55 | Lua의 [[JIT]] [[컴파일러]]며, 여타 프로그래밍 언어의 [[JIT]]보다 더 우수한 성능을 보여준다. 주로 [[JavaScript|V8]]와 비교되는데, 자료구조 성능을 제외하면 전반적으로 Lua 쪽이 성능이 더 좋다. [[Python]], [[Ruby]]와 비교해도 수십배 정도가 더 빠르다. |
|---|
| 56 | |
|---|
| 57 | [[JavaScript]]와 Lua는 문법과 패러다임이 90% 이상 비슷한 사촌언어격이지만 JIT 성능의 구현 측면에 있어서는 [[JavaScript]]가 가진 문법 일부가 성능 향상에 약점으로 작용한다고 한다. 참조 또한 메모리 사용량에 있어서 LuaJIT이 더 나은 최적화를 보여주고 있다. 따라서 [[Node.js]]를 LuaJIT 기반으로 다시 작성한 Luvit이라는 프로젝트가 활성화되었다. |
|---|
| 58 | |
|---|
| 59 | 홈페이지에 따르면 인터프리터를 손수 [[어셈블리어]]로 작성했으며, 이미 상당한 수준의 최적화가 되어있다고 한다. [[Python]]의 JIT 컴파일러인 [[PyPy]]가 자기 자신으로 JIT을 구현하는 것과 대조되는 부분. Lua가 그나마 단순한 언어라 이런 일이 되는 듯하다. |
|---|
| 60 | |
|---|
| 61 | --이 때문인지 업데이트가 자주 되는 편은 아닌데, Lua 5.3이 나오고 있는 동안에도 LuaJIT은 Lua 5.1 문법이 최신이다--[* 전술한 대로 주요 개발자 Mike Pall이 개발 포기를 선언했다.] |
|---|
| 62 | |
|---|
| 63 | 또한, 안 그래도 손쉬운 [[C언어]]와의 인터페이스 작업은 LuaJIT의 FFI(Foreign Function Interface)를 이용하면 [[로우 레벨#s-3|Low-Level]] [[C언어]] 함수들을 별다른 작업 없이 직접적으로 사용할 수 있다. 이 FFI 방식으로 인해 스크립트 - 네이티브 코드 간 호출규약을 맞추기 위한 별도의 작업이 사실상 필요가 없어지고, [[C(프로그래밍 언어)|C]] 자료형을 직접 사용할 수 있게 되며 호출 성능은 네이티브에 견줄만큼 빨라지기 때문에, 일단 JIT을 사용하게 되면 기존 Lua 바인딩 코드를 사용할 일이 극히 적어진다. 이 FFI 방식은 이후 [[Python]]의 CFFI 라이브러리에 많은 영감을 주었다([[Node.js]]의 node-ffi도 상당한 영향을 받은 것으로 추정된다). |
|---|
| 64 | |
|---|
| 65 | 네이티브에 견줄만큼 속도가 빠르고, 메모리 사용량이 매우 적기 때문에 최근 [[NGINX]]에 LuaJIT을 포함시켜서 커스터마이징을 한 OpenResty 웹 서버가 인기를 끌고 있다. CDN 서비스로 유명한 [[Cloudflare]]와 알렉사 Top 13 규모의 세계에서 가장 큰 C2C 상거래 서비스(지마켓/옥션을 생각하면 된다)인 [[타오바오]]에서 주-웹서버로 사용하고 있으며 두 회사의 개발자들이 OpenResty 개발을 주도하고 있다(단 [[Cloudflare]]의 CDN 서비스는 사실 [[NGINX]]에 LuaJIT으로 코드를 올려 커스터마이징한 서비스들이다. 그래서 타사와 달리 진정한 CDN 서비스가 아니라는 비평도 있다). |
|---|
| 66 | |
|---|
| 67 | 알파고로 유명한 [[구글 딥마인드]]가 알파고의 기반인 Q-Learning을 구현할 때 사용된 Torch 머신러닝 미들웨어도 LuaJIT으로 작성되어 있다(딥마인드 사의 구인공고는 그래서 [[C언어|C]]/[[C++]]와 Lua 스크립트가 필수역량으로 적혀있다). |
|---|
| 68 | |
|---|
| 69 | === [[Python]]과의 비교 === |
|---|
| 70 | [[Python|파이썬]]과 자주 비교가 되는데, 두 언어의 초기 개발 목표의 차이가 현재의 두 언어가 갖는 거의 모든 차이의 원인이라고 볼 수 있다. [[Python|파이썬]]은 깨끗한 문법의 고급(high-level) 범용(general) 프로그래밍언어가 개발 목표였고 부수적으로 다른 언어와의 쉬운 접착(glue) 기능이 제공되는 반면에, Lua는 [[C(프로그래밍 언어)|C]]/[[C++]] 프로그램에 내포(embed)되는 것을 기본 사용례로 가정하고 개발되었고 부수적으로 고급(high-level) 범용(general) 프로그래밍 언어로도 사용할 수 있는 것이다. 즉, 인터프리트형 스크립트 언어라는 공통점을 제외하면 강조하고 있는 점이 거의 정반대이다. 그리고 [[Python|파이썬]]이 접착(gluing)이 쉬운 언어이지 내포(embedding)가 쉬운 언어는 아니라는 점도 주목할 만하다. |
|---|
| 71 | |
|---|
| 72 | 따라서 [[Python|파이썬]] 커뮤니티에서 잘 쓰이는 표현대로 '배터리가 포함된'[* 기본으로 포함된 라이브러리가 기능이 풍부해 다른 외부 모듈이 필요없다는 뜻.] [[Python|파이썬]]은 어느정도 단독으로 프로그램을 만들 수 있는 환경인 반면, Lua는 기본중의 기본 기능만을 포함하고 있어 단독으로 응용프로그램을 만들려면 손에 꼽히는 외부 라이브러리[* 주로 [[https://luarocks.org|LuaRocks]]에서 구할 수 있다.]를 포함하고도 이것저것 직접 구현해야 하는 어려움이 있다. 너무 없어 불편하니 배터리가 포함된 LuaDist나 Lua for Windows같은 프로젝트도 있다. |
|---|
| 73 | |
|---|
| 74 | 물론 관점을 바꾸어서 [[C(프로그래밍 언어)|C]]/[[C++]] 프로그램에 내포할 때를 가정하면, [[Python|파이썬]]은 기본으로 import되는 라이브러리[* embedding 상황에서는 잘 쓰이지 않는 것들도 기본 라이브러리에 많이 들어있다.]가 많아 메모리 사용량이 큰데 비해 사실상 아무것도 없어 극도로 가볍고 빠른 것이 Lua의 장점이라고 하겠다.[* [[Python|파이썬]] 개발자가 작성한 다음의 [[https://eev.ee/blog/2016/04/30/embedding-lua-vs-python/|논의]]를 참고. embedding이라는 분야만 한정했을 때 Lua가 더 직관적임을 설명하고 embedding 목적으로 [[Python|파이썬]]을 꼭 써야 한다면 생각해볼 수 있는 대안을 제안하고 있다.] |
|---|
| 75 | |
|---|
| 76 | 그리고 [[Python|파이썬]] 커뮤니티에서도 Lua와 비교해서 embedding 기능쪽으로 부족함을 인지하고, 최근 영역 확장을 시도하고 있다. [[Python|파이썬]]이 스크립트용으로 내포된 유명한 프로그램으로는 3dx Max, Blender가 있다. ~~둘 다 그 자체로 덩치 큰 프로그램~~[* Lua를 직접 언급하며 [[Python|파이썬]]도 이쪽으로 좀 더 잘 할 수 있지 않을까 논의하는 영상: [[https://youtu.be/d1a4Jbjc-vU?t=1215|The Future of Python]]] |
|---|
| 77 | |
|---|
| 78 | === [[JavaScript]]와의 비교 === |
|---|
| 79 | 굉장히 유사한 면이 많은 두 언어다. 둘 다 JIT도 있다는 것도 유사한 점이다. 그래서 [[JavaScript]]에 있는 것을 Lua로 옮기는 경우도 있는데 예로 [[Node.js]]를 Lua로 옮긴 Luvit이라든가... |
|---|
| 80 | |
|---|
| 81 | == 용도 == |
|---|
| 82 | * Lua를 내포할 경우에 [[C(프로그래밍 언어)|C]]/[[C++]] 프로그램 개발 과정에서 재컴파일이나 리로딩없이 바로 설정 변화를 적용할 수 있게 되는 점 때문에 특히 게임업계에서 많이 쓰인다. |
|---|
| 83 | * 개발의 편의를 위해서 Lua를 내부적으로 활용하는 일 이외에도, 아예 게임 코드를 Lua로 작성하는 경우도 있다. 예를 들면 RPG 게임 등에서 개별 NPC의 AI나 기타 행동 정의를 위한 스크립트로도 쓰이고 있다. |
|---|
| 84 | * API를 유저들에게 공개하여 [[MOD#s-4|MOD]] 제작이나 게임의 커스텀 UI 설정 스크립트 언어로 쓰이기도 한다. |
|---|
| 85 | |
|---|
| 86 | === 실제 사용 예 === |
|---|
| 87 | [[https://en.wikipedia.org/wiki/Category:Lua_(programming_language)-scripted_video_games|Lua가 쓰인 게임 목록]] |
|---|
| 88 | * 고전 게임인 [[원숭이 섬의 비밀]] 시리즈의 개발 언어가 [[SCUMM]]에서 Lua로 변경되면서, 게임 내에 자주 등장하는 술집인 SCUMM bar가 Lua bar로 개명된 것은 유명한 개그다. '''Lua가 프로그래머들(특히 게임 프로그래머들) 사이에서 인기를 끌게된 시작점이다.''' |
|---|
| 89 | * [[월드 오브 워크래프트]]에서 유저들이 UI를 직접 제작할 수 있게 되면서 일반 게이머들에게도 인지도를 얻었다. '''Lua가 국내외의 일반 게이머들에게 널리 알려지게된 시작점이다.''' 월드 오브 워크래프트의 커다란 성공 덕분에, Lua를 월드 오브 워크래프트 전용 스크립트 언어로 [[https://www.quora.com/Whats-the-use-of-Lua-programming-language-other-than-scripting-for-World-of-Warcraft|착각]]한 국내외의 게이머가 매우 많다. 5.1버전을 사용한다. |
|---|
| 90 | * [[라그나로크 온라인]]에서 NPC의 AI와 호문클루스의 AI, 용병의 AI에 Lua가 쓰였으며, 이 가운데 호문클루스와 용병은 유저가 직접 변경이 가능했다. 3차 직업군이 등장할 즈음에 용병의 AI를 변경하여 거의 0프레임 수준의 스킬이 가능하다는게 여기저기 알려져 너도 나도 창용병 무명섬 3층 고고싱을 외친 적이 있다. |
|---|
| 91 | * [[게리 모드]]에서도 Lua를 지원하고, 일부 [[소스 엔진]] 기반 게임(또는 모드)들도 Lua를 사용한다. |
|---|
| 92 | * [[GTA 4]]에도 Lua 스크립트 모드가 있다. [[GTA 산 안드레아스]]의 멀티플레이어의 하나인 MTA: San Andreas의 서버를 작성한 언어다. [[Tool-Assisted Speedrun|TAS]] 영상을 만드는 데에도 일부 사용한다. |
|---|
| 93 | * 한게임에서 제공중인 오픈 마켓형 게임 툴인 아이두게임의 기본 언어. 초보 프로그래머들을 위해서 배려를 해준 것이라고. |
|---|
| 94 | * [[마인크래프트]]의 모드 [[마인크래프트/자바 에디션/모드/기술 계열#s-7.1|컴퓨터크래프트]]의 프로그램을 작성한 언어. |
|---|
| 95 | * [[로블록스]](Roblox)의 모든 게임이 이 루아 기반으로 돌아간다. 여담으로 로블록스의 핵(스크립트)은 게임 내 시스템을 변형시켜야 하기 때문에 이도 루아로 작성된다. --그러니까 개발자들은 핵도 만들 수 있다는 얘기다-- |
|---|
| 96 | * 2015년에는 [[http://coronalabs.com/|Corona sdk]]라는 게 나온 덕분에 Lua만 배워서 게임 하나 뚝딱 만들어 내는 게 가능해졌다. 2015년 12월 기준으로 iOS, 안드로이드 모두 지원된다. |
|---|
| 97 | * [[https://love2d.org/|Love2d]]라는 [[C++]]([[SDL]])에 접착시켜 만든 게임 개발 프레임워크가 Lua를 사용해 코딩한다. [[Not Tetris 2]], [[Not Pacman]], 포탈 마리오 등 꽤나 흥행한 게임들을 탄생시켰지만 인지도가 그닥 높지 않다. ~~한국에는 커뮤니티조차 없다~~ |
|---|
| 98 | * [[피니엔진]]이 cocos 2d-x의 Lua 모듈을 통해 개발되었다. 자체 스크립트인 LNX 스크립트 또한 컴파일 과정을 통해 Lua 코드로 변환한 뒤 사용된다. |
|---|
| 99 | * [[스텝매니아]]에서도 Lua를 사용하여 기믹패턴을 만들 수 있다. 기존의 [[XML]]방식의 스크립트에서 간소화가 된것 [[https://quietly-turning.github.io/Lua-For-SM5/|영문 설명 링크]] |
|---|
| 100 | * 게임 [[크루세이더 킹즈]]에도 쓰였다. |
|---|
| 101 | * 스타크래프트1 유즈맵 편집기인 SCM draft 2의 플러그인 TEP의 기반언어다. |
|---|
| 102 | * [[네코랜드 스튜디오]]의 스크립트로 Lua를 사용한다. |
|---|
| 103 | * 자막 제작용 소프트웨어인 [[Aegisub]]에서도 Lua 스크립트를 응용해 자동화 기능을 사용할 수 있다. |
|---|
| 104 | * Lua를 [[Java]]로 만든 [[http://www.luaj.org/luaj/3.0/README.html|Luaj]]를 이용해 자바에서 직접 Lua 5.1 스크립트를 실행시킬 수 있다! 단점은 관련 정보가 적다는 것. Lua 5.3을 [[Java]]에 심기 위해 만든 [[https://github.com/mjanicek/rembulan|Rembulan]]도 있다. |
|---|
| 105 | * Ti-nSpire 계산기의 프로그래밍 언어다. [[공학용 계산기]]는 복수 프로그래밍 언어를 지원하는 경우가 많은데, [[텍사스 인스트루먼트|Ti사]] 제품의 경우 Lua, [[C언어]], Ti-BASIC 등의 언어를 지원한다. Lua의 경우 컴퓨터로 프로그래밍해서 nSpire으로 보내는 방법으로 프로그래밍한다. |
|---|
| 106 | * [[아이패드]]로 코딩해서 만든 Lua 개발 툴도 있다. 이름은 공개 당시 Codify, 현재 [[http://twolivesleft.com/Codea/|Codea]]이다. 정확히는 Lua를 기반으로 사용하지만 앱내에서 개별적으로 함수나 API 등을 제공한다. |
|---|
| 107 | * [[파우더 토이]]의 스크립트와 MOD는 Lua로 작성된다. |
|---|
| 108 | * [[심시티 4]]의 일부 특수 건물 기능이나 운전 미션은 Lua 스크립트로 작성되어 있다. 그러나 플러그인 dat 파일 안에 저장되어 있어 열거나 편집하려면 별도의 에디터가 필요하다. |
|---|
| 109 | * [[Command: Modern Air / Naval Operations]]에서 시나리오를 제작할 때 여러 방면으로 사용한다. 예를 들면 헬기나 수송기에서 병력을 내리는 것도 수송작전이 정식으로 패치되기 전까지는 정상적인 방법으로 불가능했기 때문에 시나리오 제작자가 Lua 스크립트를 이용해야 했다. |
|---|
| 110 | * [[스타크래프트]] 리마스터 맵 에디터에서 유즈맵 제작시 SCM Draft로 작업할때 트리거의 노가다를 획기적으로 줄여주는 플러그인을 사용할 수 있는데 이것이 Lua언어로 작성된다. |
|---|
| 111 | * [[https://www.wireshark.org/|Wireshark]] 플러그인 제작에 사용된다. |
|---|
| 112 | * [[https://www.cheatengine.org/|Cheat Engine]] 스크립트 제작에 사용된다. |
|---|
| 113 | * [[게임가디언]]의 스크립트 파일로 쓴다. |
|---|
| 114 | * [[https://www.minetest.net/|minetest]]에서 API를 lua로 제공하고 있다. |
|---|
| 115 | * [[메이플스토리]]에서도 [[https://career.nexon.com/user/recruit/notice/noticeView?joinCorp=NX&reNo=20200071|사용한다.]] 다만 정확히 어떻게 사용되는지는 불명이다. |
|---|
| 116 | * [[https://nmap.org/|Nmap]]은 port 스캔에 활용되는 프로그램이며, NSE(Nmap Scripting Engine)로 코드를 작성할 때 Lua가 사용된다. |
|---|
| 117 | * GTA5의 유저 스크립트 제작에도 lua 언어가 사용된다. |
|---|
| 118 | * [[카스온라인]] 에서 스튜디오 맵 제작시 lua가 사용되기도 한다. |
|---|