MoarVM(Metamodel On A Runtime Virtual Machine의 약어)은 6model 개체 시스템용으로 구축된 런타임입니다. 이는 주로 NQP 및 Rakudo를 실행하는 것을 목표로 하지만 NQP 컴파일러 툴체인을 사용하여 구축된 모든 컴파일러에 대한 백엔드 역할을 할 수 있어야 합니다.
MoarVM 사이트에서 다운로드하거나 GitHub에서 복제하세요.
git clone https://github.com/MoarVM/MoarVM.git
자동으로 생성된 릴리스 tarball 또는 zip 파일을 사용하는 경우 MoarVM을 성공적으로 빌드하는 데 필요한 타사 라이브러리가 포함되어 있지 않다는 점에 유의하세요.
VM 자체를 빌드하고 설치하는 데는 다음이 필요합니다.
perl Configure.pl
make install
(또는 Windows에서는 nmake
/ gmake
). 현재 MSVC 및 gcc를 사용하여 Windows에서 빌드하고 Linux 및 MacOS X에서는 gcc
및 clang
사용하여 빌드하는 것으로 알려져 있습니다. 시간이 지남에 따라 이를 확장하고 있습니다.
perl Configure.pl --help
입력하면 구성 시간 옵션과 make-time 옵션/대상에 대한 일부 설명을 볼 수 있습니다.
MoarVM을 설치한 후 NQP 저장소를 복제하거나 소스 tarball을 가져와서 다음과 같이 Configure.pl 스크립트를 사용할 수 있습니다.
perl Configure.pl --backend=moar --prefix=where_your_moarvm_install_lives
또는 --gen-moar
플래그를 제공하면 NQP의 동일한 Configure.pl 스크립트가 자체적으로 MoarVM의 복사본을 복제, 빌드 및 설치할 수 있습니다.
이는
moar
실행 파일과 기타 파일이 설치될/bin
,/lib
및 기타 디렉토리의 접두사가 된다는 점을 명심하십시오. 따라서moar
복사하려면/usr
사용해야 합니다./usr/bin
.
nqp-m
설치된 rakudo 저장소의 --prefix
에 있는 Configure.pl
스크립트를 가리키면 MoarVM 백엔드가 자동으로 감지되고 구성됩니다. 또는 --backend=moar,jvm
사용하여 예를 들어 MoarVM 및 JVM 백엔드를 강제로 빌드할 수 있습니다. NQP Configure.pl
스크립트와 마찬가지로 nqp-m
생성을 포함하여 모든 작업을 수행하는 --gen-moar
플래그를 제공할 수 있는 옵션이 있습니다.
MoarVM은 현재 개발 중입니다. 모든 NQP 테스트 스위트, 모든 Rakudo 온전성 테스트를 실행할 수 있으며 다른 Rakudo 백엔드보다 더 많은 스펙테스트를 통과합니다.
NQP의 JVM 또는 JS 백엔드와 달리 MoarVM 저장소는 NQP 소스 저장소에 통합되지 않지만 대신 NQP 저장소에서 Configure.pl --gen-moar
구성 스크립트를 실행하여 가져올 수 있습니다.
MoarVM이 제공하는 주요 기능은 다음과 같습니다.
풀 요청을 통한 기여가 허용됩니다. 양질의 작업에 기여한 사람들에게 커밋 비트가 제공됩니다. 기여하고 싶다면 libera.chat의 #moarvm
채널을 방문하세요.
MoarVM 저장소의 소스 코드 라이선스에 대한 정보는 루트 디렉터리의 LICENSE 파일을 참조하세요.
MoarVM이 빌드되지 않고 오류가 다음과 같은 경우:
ld: x86_64 아키텍처에 대한 기호를 찾을 수 없습니다.
빌드 유틸리티와 bin 유틸리티가 호환되지 않는 혼합이 있을 가능성이 높습니다.
macOS의 타사 리포지토리에서 툴체인을 설치하는 것이 일반적이지만 모두 호환되는 것은 아닙니다. 이 문제가 발생하는 경우 다음 단계를 시도해 보세요.
brew unlink binutils
GNU 툴체인을 사용 하려고 하는데 이 파일을 확인하라는 오류가 발생하는 경우 --toolchain=gnu
플래그를 제공하기만 하면 이 패키지가 GNU 툴체인으로 구성 및 빌드됩니다.
참고: Xcode 도구와 Xcode가 아닌 도구를 혼합하여 사용하는 경우 문제가 발생할 수 있습니다. 따라서 이 구성은 지원되지 않습니다.
gcc
와 clang
에 대해 다른 코드가 필요합니다. 두 컴파일러 모두 __GNUC__
매크로를 정의하므로 두 가지를 명확하게 하기 위해 먼저 __clang__
매크로를 테스트해야 합니다.