TL;DR
- LangZoo.js는 Janet, Java, Lua, PHP, Python, Ruby, Tcl의 런타임을 휴대용 실행 파일(APE)로 각 패키지에 포함해 Node.js에서 실행하는 APEBind 데모임.
- 일곱 언어 모두 각자의 번들 런타임으로 실행되며, JavaScript로 언어를 재구현한 방식이 아님.
- 데모는 게시된 패키지를 기다리지 않고 저장소에 포함된 로컬 패키지 아카이브를 설치해 실행 가능함.
- Java는 컴파일러가 아닌 런타임을 포함하므로 애플리케이션 클래스를 빌드 과정에서 컴파일한 뒤 클래스 경로와 메인 클래스를 전달해야 함.
- 이 프로젝트는 패키징 및 바인딩 데모이며, 신뢰할 수 없는 코드의 샌드박스나 모든 서드파티 언어 패키지의 번들을 보장하지 않음.
LangZoo.js
- LangZoo.js는 별도의 Janet, Java, Lua, PHP, Python, Ruby, Tcl 런타임 설치 없이 Node.js에서 일곱 언어를 실행하는 작은 데모임.
- APEBind로 생성한 JavaScript 패키지 일곱 개가 각 언어의 런타임을 실제 휴대용 실행 파일(Actually Portable Executable, APE)로 번들링함.
일곱 언어 모두 실행하기
demo디렉터리에서npm install --ignore-scripts --no-audit --no-fund를 실행해 의존성을 설치한 다음node run-all.mjs를 실행하면 됨.- 예상 출력은 Janet, Java, Lua, PHP, Python, Ruby, Tcl 모두
'42'임. - 각 언어는 자체 번들 런타임을 통해 실행되며, JavaScript 패키지는 해당 런타임에 연결하는 바인딩이지 JavaScript로 작성한 언어 재구현이 아님.
런타임 호출 방식
- Python 패키지의
run함수에code: 'print(6 * 7)'과isolated: true를 전달하고, 반환 결과의 표준 출력에서 공백을 제거하면42가 출력됨. - 데모는 저장소에 포함된 로컬 패키지 아카이브를 설치하므로 npm 레지스트리에 패키지가 게시될 때까지 기다리지 않고 실행 가능함.
- 개별 패키지가 게시된 뒤에는
npm install python-ape와 같은 일반적인 방식으로 설치 가능함.
일곱 패키지
- Janet:
janet-ape, 생성 API는run({ code })임. - Java:
java-ape, 생성 API는run({ classPath, mainClass })임. - Lua:
lua-ape, 생성 API는run({ code })임. - PHP:
php-ape, 생성 API는run({ code })임. - Python:
python-ape, 생성 API는run({ code })임. - Ruby:
ruby-ape, 생성 API는run({ code })임. - Tcl:
tcl-ape, 생성 API는run({ file })임. - Java에 번들된 APE는 컴파일러가 아닌 런타임이므로, 애플리케이션 클래스를 빌드 과정에서 컴파일한 뒤 클래스 경로와 메인 클래스를
java-ape에 전달해야 함. - Tcl 데모는 인라인 코드가 아니라 스크립트 파일을 실행함.
이 데모가 보여주는 것
- APEBind는 이식 가능한 명령줄 프로그램을 위한 JavaScript 바인딩을 생성함.
- LangZoo.js는 APEBind를 사용해 서로 다른 일곱 언어 런타임을 익숙한 Node.js API로 패키징하며, 각 패키지는 호출할 실행 파일을 포함함.
- 검토된 YAML 스키마와 독립 실행형 런타임 예제는 APEBind의 언어 예제에 있으며, 이 저장소에는 생성된 패키지 아카이브와 일곱 언어 통합 데모가 포함됨.
- 범위는 패키징 및 바인딩 데모이며, 신뢰할 수 없는 코드를 위한 샌드박스가 아니고 모든 서드파티 언어 패키지가 번들된다는 보장도 아님.
- 플랫폼 호환성은 번들 런타임과 대상 환경에 따라 달라짐.
- LangZoo.js는 컬렉션의 표시 이름이며, 저장소 슬러그와 개별 npm 패키지 이름은 소문자 케밥 표기법을 사용함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요