2012-04-21 2 views
4

루아는 작고 쉽게 임베딩 될 수 있습니다. 현재의 JavaScript VM은 기존 응용 프로그램에 통합하기가 상당히 어렵고 어렵습니다.
JavaScript를 루아 또는 루아 바이트 코드로 컴파일하는 것이 가능하지 않습니까?
특히 모바일 응용 프로그램의 제약 사항에 대해서는 적합하다고 생각됩니다. 가장 인기있는 스크립팅 언어 중 하나를 iPhone 또는 Android 앱에 쉽게 통합 할 수 있다는 점이 좋습니다.Lua VM에서 JavaScript를 실행하는 것이 맞습니까?

저는 이것이 기술적으로 가능할 지 모르겠으므로 루아에 익숙하지 않습니다.
Luvit에는 Node.js 아키텍처를 Lua로 이식하려는 활성 프로젝트가 있습니다. 그래서 이벤트 자바 스크립트 세계는 루아에서 가능한 것에서 너무 멀리 떨어져있을 수 없습니다.

+0

확실히 V8은 Node.js가 될 수 있으며 C 라이브러리로 사용됩니다. – Pointy

+0

나는 내 질문을 업데이트했다. 당신이 맞다. V8을 라이브러리로 사용할 수있다.그러나 복잡성으로 인해 개발자가 단일 앱 프로젝트를 위해 할 일이 아닙니다. iOS의 기본 코드 생성과 관련된 제약 사항도 있습니다. Lua를 퍼가기가 훨씬 쉽고 게임 중에도 많이 사용됩니다. – mirkokiefer

+0

Node.js -'luvit'에 관한 논평은 Node.js를 Lua로 포팅하는 유일한 프로젝트가 아니며 [LuaNode] (https://github.com/ignacio/LuaNode)도 있습니다. 'libuv' 대신'boost.asio'를 사용합니다. –

답변

5

Javascript를 Lua로 컴파일하는 것이 처음에는 상상할 수 없을 정도입니다. Javascript의 의미는 Lua와 매우 다르다. (LuaJIT 저자는 Lua의 디자인이 LuaJIT가 Javascript JIT 컴파일러와 호의적으로 경쟁 할 수있는 주요 이유 중 하나라고 언급했다).

이 코드를 가지고 :

if("1" == 1) 
{ 
    print("Yes"); 
} 

이 인쇄물을 "예"자바 스크립트. 루아의 같은 코드는 그렇지 않습니다. 문자열은 루아의 숫자와 결코 같지 않습니다. 이것은 작은 점처럼 보일지 모르지만 근본적인 결과가 있습니다. 루아의 내장 평등 테스트를 더 이상 사용할 수 없습니다.

우리가 취할 수있는 해결책은 두 가지가 있습니다. 1 == "1"javascript_equals(1, "1")으로 다시 쓸 수 있습니다. 또는 루아의 모든 자바 스크립트 값을 래핑하고 루아의 메타 테이블을 사용하여 == 연산자의 동작을 오버라이드 할 수 있습니다.

그래서 우리는 이미 Javascript를 매핑하여 Lua에서 효율성을 잃어 버렸습니다. 이것은 간단한 예이지만이 모든 과정을 계속 진행합니다. 예를 들어 모든 연산자 규칙은 Javascript와 Lua에서 다릅니다.

Lua 테이블과 동일하지 않기 때문에 Javascript 개체를 래핑해야합니다. 예를 들어 자바 스크립트는 지원 문자열 키를 객체, 문자열에 어떤 인덱스를 강요 :

> a = {} 
{} 
> a[1] = "Hello" 
'Hello' 
> a["1"] 
'Hello' 

또한 등등 자바 스크립트의 범위 지정 규칙, 가변 인자 함수에 대한 조심해야합니다.

누군가가 전체 컴파일러에 노력을 기울이는 경우이 모든 것들이 극복 할 수 있습니다. 그러나 어떠한 효율성 향상도 곧 없어 질 것입니다. 근본적으로 루아에서 자바 통역사를 만들게 될 것입니다. 대부분의 자바 스크립트 인터프리터는 C로 작성되었으며 이미 자바 스크립트의 의미에 맞게 최적화되어 있습니다.

효율성을 높이기 위해 그렇게하는 것이 손실 된 원인입니다. 루아 전용 환경에서 자바 스크립트를 지원하는 것과 같은 다른 이유가있을 수 있습니다. 가능하다면 루아 바인딩을 기존 자바 스크립트 인터프리터에 쓰는 것만으로는 더 적은 작업 일 것입니다.

Javascript-> Lua 소스 - 소스 변환기로 게임을하고 싶다면을 보시기 바랍니다.이 프로젝트는 제가 얼마 전에 만든 장난감 프로젝트입니다. 어느 곳에서나 끝나지는 않지만 그걸 가지고 노는 것은 확실히 생각을위한 음식을 줄 것입니다. 이미 자바 스크립트 렉서가 포함되어 있으므로 열심히 노력해야합니다.

관련 문제