LLVM Low Level은 어떤 방법입니까?


12

LLVM (Low Level Virtual Machine) 은 어떤 방식으로 저수준입니까? (저는 글을 쓰는 시점에서 웹 사이트에서 "LLVM"이라는 약어가 확대되지는 않았지만 Wikipedia 에서는 찾을 수 없었습니다 .)

"컴파일러 인프라 스트럭처"용으로 설계되었거나 다른 툴보다 "낮은 레벨"에서 작동하기 때문에 "로우 레벨"이라고합니까?

이것의 일종의 "일러스트"로서, LLVM이 JVMCLR 보다 하위 레벨입니까 , 아니면 "더 낮은 레벨"용도 로만 설계 되었습니까?

답변:


16

LLVM은 JVM 및 CLR과 같은 일반적인 VM보다 낮은 수준입니다. 예를 들어 가비지 수집기에 대한 후크 가 있지만 가비지 수집기 자체는 제공하지 않습니다.

마찬가지로, JVM에는 내장 JIT 컴파일러가 있습니다 (실제로 고대 버전 제외). LLVM에는 LLVM IR을위한 일부 JIT 컴파일러가 있지만, 문제를 함께 연결하고 실제로 코드를 JIT하는 것은 개발자의 몫입니다.

JVM이 해결되지 않은 외부를 만나면 나갈 때이를 만족시킬 올바른 클래스를 찾고 파일 시스템과 .jar 파일에서 직접 .class 파일을 찾는 방법을 알고 있습니다 1 . LLVM의 JIT 컴파일러에는 이와 같은 것들을 처리하는 방법을 결정할 수있는 후크가 있습니다. 예상대로, 어떤 사람들은, 그래서 몇 가지 기본 버전을 작성했습니다 JVM이 같은 순서에 거의 일을 할 수있다 - 그러나 당신은 또한 사람들을 무시하고 당신이 선택하면 다른 일을 할 무료입니다.

간단히 말해서, 컴파일러 (또는 그 순서대로)를 개발하는 경우 인생을 쉽게 할 수있는 많은 도구가 있습니다. 최적화에 대해 크게 걱정하는 대신 소스 코드에서 LLVM IR로 관리 할 수있는 가장 간단한 변환을 수행 한 다음 LLVM 라이브러리를 사용하여 최적화, JITing, 링크 등을 관리 할 수 ​​있습니다. 그럼에도 불구하고 라이브러리입니다. 정말 유용한 함수이므로 모든 세부 사항을 다룰 필요는 없지만 여전히 함수이며 호출하기 위해 코드를 작성하고 있습니다. 완제품이 아니며 비교적 빠르고 쉽게 제품을 제작하는 데 유용한 도구입니다.


1 기술적으로이 모든 것이 JVM에 내장되어있는 것은 아닙니다. 일반적으로 JVM의 일부로 기본 클래스 로더라고하는 것을 지정하고 java.util.ClassLoader에 다른 것을 처리하는 사용자 클래스 로더가 있습니다. 일부 클래스 로더는 기본적으로 포함되어 있으며, 충분하지 않은 경우 자신을 정의하여 보충 할 수 있습니다.


12

이다 낮은 수준의 기존 또는 미래의 가상 머신 (JVM을) 구현의 핵심으로 사용할 수 있도록 설계되어 있기 때문이다.

Java와 Python의 가상 머신은 표준 C로 작성되었으며 자체 라이브러리에 의존하기 때문에 이식성이 뛰어납니다. LLVM의 목적은 모든 가상 머신을 LLVM을 이미 지원하는 플랫폼으로 쉽게 포팅 할 수 있도록 인프라를 제공하는 것입니다.

LLVM은 정적 및 JIT 컴파일을 지원하며 신뢰할 수있는 운영 체제 공간에서 실행될 수 있도록 설계되었습니다. 이론적으로 LLVM 위에서 가상 머신을 실행하면 훨씬 적은 작업을 의미하고 훨씬 빠르고 효율적인 것을 생성해야합니다. 이론에 의하면.

그런 다음 하위 레벨 인 LLVM은 다른 OS 및 하드웨어 아키텍처로 쉽게 포팅 할 수 있어야합니다.

언어 구현자가 단일의 포트하기 쉬운 저수준 플랫폼에 쓸 수 있다면 크게 절약 할 수 있습니다. 가장 잘 알려진 VM은 서비스 언어와 운영 체제 사이의 중간에 있으며 자체 중간 표현과 JITC를 구현해야합니다.


5

LLVM 이름의 "낮은 수준"부분은 사용 된 가상 명령어 세트의 수준을 나타냅니다. LLVM이 사용하는 중급 언어 (IR)는 아키텍처에 구애받지 않고 일반적이지만 머신 코드 수준에 가깝습니다.

반면에 JVM과 CLR의 바이트 코드는 상위 추상화 계층에 명령어가 있다는 점에서 상당히 높은 수준입니다. 둘 다 객체 지향 스택 기반 어셈블리 언어입니다. 예를 들어, JVM에는 invokevirtual 명령이 있으며 이는 Java 언어의 특정 오브젝트 모델에 대해 알아야하는 명령입니다.


3

언어 별 VM 및 JVM 및 CLR과 같은 통합 VM보다 확실히 낮은 수준입니다. 이 디자인은 GCC (GIMPLE) 및 유사한 컴파일러의 저수준 중간 표현에 가깝습니다. 기본 GC가 없으며 특정 고수준 유형 시스템이 시행되지 않으며 정렬이 가정되지 않으며 (명시 적으로 지정되어야 함) 정수 및 부동 소수점 데이터 유형이 명시 적 (및 플랫폼에 따라 다름)이며 가장 낮은 수준 인 알맞은 포인터 산술이 가능합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.