5

저는 학습 목적으로 애완 동물 프로그래밍 언어로 일하고 있으며 지난 한 해 동안 많은 연구를 해왔습니다. 그러한 언어의 개념을 모델링합니다. 우선 JVM 또는 .NET 바이트 코드와 같은 중간 형식으로 컴파일해야합니다. 목표는 멀티 플랫폼/아키텍처입니다. 둘째로, 나는 그것을 빠르게하고 싶다. (나는 또한 많은 다른 것들을 염두에두고 있지만, 그것들을 토론하기위한이 주제의 목적이 아니다.) 컴파일 JVM 바이트 코드와 컴파일 .NET 바이트 코드를 런타임 환경으로 오픈 JDK를 사용하고 컴파일 LLVM IR로 런타임 환경으로 모노를 사용하여 런타임 환경으로 LLVM을 사용 : 내 마음에 온LLVM을 가상 머신으로 사용 - 멀티 플랫폼 및 멀티 아키텍처 코딩

가장 좋은 옵션이었다 .

내가 상상 한 것처럼, 저는 LLVM을 선택했습니다. 왜? 그것의 타오르는 빠른 때문에. 나는 C++ N-Body 코드를 사용하여 벤치마킹을 해본 결과 IR이있는 컴퓨터에서 7 초가 걸렸습니다. clang 원시 컴파일 된 코드가있는 27 개와는 대조적이었습니다.

그럼, 여기 내 질문이다 : 사용할 수있는 LLVM 기본 도구 세트 (필자는 단지 lli가 필요함)의 재배포 가능 버전이 있습니까? 아니면 내 자신을 컴파일해야합니까? 후자의 경우, 어떻게 할 지에 대한 힌트를 제게 제공 할 수 있습니까? 내가 정말로해야만한다면, 내 컴퓨터 (인텔 맥)에서 그들을 크로스 컴파일하고 (윈도우즈 용 .msi, 인기있는 리눅스 배포판 용 .rpm, .pkg와 같은) 인스톨러를 생성한다고 생각하고있다. 맥). LLVM의 최소 부분 집합 만 필요하므로이 하위 집합은 "lli"를 사용하여 VM처럼 작동 할 수 있습니다. 진짜 질문은 전형적인 가상 머신으로 LLVM을 사용하는 방법입니다.

+0

LLVM 프로젝트에는 허가 된 라이센스가 있습니다. ** 핵심 라이브러리 **를 배포해야하는 것처럼 들립니다. –

+0

@RobertHarvey 내가 생각했던 것, 구입할 곳이 어디인지 알지 못합니다. – Salvia

+0

어쨌든 당신이 문서를 읽을 필요가있을 것입니다. 그리고 이미 결정을했기 때문에 ... 저는 LLVM과 함께 일하게되어 기쁩니다. 아아, 아직 설명서를 읽지 않았습니다. –

답변

4

먼저 LLVM IR + LLVM, Java 바이트 코드 + OpenJDK 및 .NET CIL + Mono의 3 가지 옵션이 모두 탁월한 옵션이라고 생각합니다.

LLVM을 사용하고 lli 만 사용하려는 경우 LLVM을 대상 플랫폼으로 컴파일하고 결과로 lli 실행 파일을 배포 파일로 압축하면 작동합니다.

LLVM을 통해 JIT 컴파일러를 작성하는 또 다른 방법은 실행 엔진 (see the handy examples in the Kaleidoscope tutorial)을 사용하는 것입니다. 즉, 자신의 언어를 JIT 컴파일하고, 원하는 플랫폼으로 컴파일하고, 정적으로 LLVM과 링크 한 다음 배포합니다.

JIT 컴파일러는 클라이언트 측에 LLVM 바이너리를 복사해야하기 때문에 배포본에 저작권 표시를 첨부해야합니다 (배포판을 열어 볼 필요는 없습니다).

+0

감사합니다. 연결된 문서가 매우 도움이되었으므로이를 출발점으로 사용할 수 있습니다. – Salvia

+0

링크가 끊어졌습니다. – rraallvv

+0

@rraallvv fixed, thanks! – Oak