최근 편집
최근 토론
게시판 메인
도구
투표
무작위 문서
스킨 설정
파일 올리기
기타 도구
216.73.216.27
IP
사용자 도구
사용자 설정
로그인
회원 가입
최근 편집
최근 토론
돌아가기
삭제
이동
파일 올리기
LLVM
(편집) (3)
(편집 필터 규칙)
2402,3702
== 특성 == LLVM은 GCC와 유사하게 다양한 플랫폼을 지원하는 크로스 플랫폼 프로그래밍 도구이며, 자바, C샵 등과 같은 상위 개념의 가상머신(High-Level Virtual Machine)이 아니라 저레벨의 가상화 하드웨어를 타겟으로 코드를 작성하여 해당 플랫폼에서 작성된 코드를 기반으로 여러 플랫폼으로 이식할 수 있도록 하는 개념을 가진다. LLVM은 정적/동적 컴파일러와 그와 관련된 여러 도구를 만들고 조작할 수 있는 오픈소스 프로젝트로서, 모듈화된 구조로 인해서 프론트엔드 및 백엔드를 자유자재로 조작할 수 있다는 점은 LLVM의 최대 장점이며, 전체 개발을 Cpp로 통일하여 모듈화가 철저하게 이루어저 개발 시 분석에도 매우 용이하다는 장점이 있다. 일반적인 정적(static) 컴파일러는 프론트엔드(혹은 파서)가 소스코드를 해석해 중간언어(IR, Intermediate Representation)로 만든다. 이 IR은 컴파일러 백엔드(혹은 미들엔드를 두는 컴파일러도 있음)로 보내 각종 최적화를 거친 후 최종적으로 특정 아키텍처의 기계어로 코드를 생성해낸다. 동적 컴파일러 혹은 인터프리터라면 코드 생성기가 인터프리터와 간단한 가상 머신으로 대체된다. 성능 향상을 위해 순수 인터프리터를 쓰기 보다는 JIT를 사용하는 경우도 있다. LLVM은 자신만의 IR 언어를 정의하고, 이 IR를 조작하고 코드를 생성/수행하는 일을 한다. LLVM 자체는 프런트엔드를 포함하지는 않고 있다. 각 언어의 프론트엔드는 독립적으로 분리되어있다. 즉, C, Cpp, 포트란 등의 LLVM용 프론트엔드 파서가 소스코드를 분석해 LLVM IR로 만들면 비로소 LLVM 프레임웍을 쓸 수 있다. LLVM IR로 변환된 언어는 플랫폼에서 독립적이며 백엔드를 통해 링킹과정을 통해 기계화 언어로 번역되거나 JIT 형식으로 변환되어 컴파일된다. 즉 LLVM IR로 변환되는 타겟이 바로 특정 하드웨어에 종속되지 않는 독립된 LLVM의 가상화 플랫폼이며, 이 중간과정의 결과물에서 어디로 어떻게 빌드하느냐는 개발자의 선택사항이 된다. 그러나 아직 프로젝트가 진행중인 탓인지 완전하게 플랫폼 독립적인 형태로운영이 되지는 못하고 있다. 소속사에서 주력으로 밀고 있는 맥OS X와 iOS용으로 오브젝티브C 프로젝트를 운용하는 것은 개발에 상당한 중점을 두고 있어 잘돌아가는 듯 하지만, 그 외에는 프로그램이 컴파일은 되는데 프로그램이 돌아가지 않는 등 오류가 적지 않게 보이고 있다. 지속적으로 개선이 되면서 3.02버전에서는 Clang을 이용해서 FreeBSD의 코어가 LLVM기반으로 완전 컴파일 및 작동이 확인되었다.
(임시 저장)
(임시 저장 불러오기)
기본값
모나코 에디터
normal
namumark
namumark_beta
macromark
markdown
custom
raw
(↪️)
(💎)
(🛠️)
(추가)
== 특성 == LLVM은 GCC와 유사하게 다양한 플랫폼을 지원하는 크로스 플랫폼 프로그래밍 도구이며, 자바, C샵 등과 같은 상위 개념의 가상머신(High-Level Virtual Machine)이 아니라 저레벨의 가상화 하드웨어를 타겟으로 코드를 작성하여 해당 플랫폼에서 작성된 코드를 기반으로 여러 플랫폼으로 이식할 수 있도록 하는 개념을 가진다. LLVM은 정적/동적 컴파일러와 그와 관련된 여러 도구를 만들고 조작할 수 있는 오픈소스 프로젝트로서, 모듈화된 구조로 인해서 프론트엔드 및 백엔드를 자유자재로 조작할 수 있다는 점은 LLVM의 최대 장점이며, 전체 개발을 Cpp로 통일하여 모듈화가 철저하게 이루어저 개발 시 분석에도 매우 용이하다는 장점이 있다. 일반적인 정적(static) 컴파일러는 프론트엔드(혹은 파서)가 소스코드를 해석해 중간언어(IR, Intermediate Representation)로 만든다. 이 IR은 컴파일러 백엔드(혹은 미들엔드를 두는 컴파일러도 있음)로 보내 각종 최적화를 거친 후 최종적으로 특정 아키텍처의 기계어로 코드를 생성해낸다. 동적 컴파일러 혹은 인터프리터라면 코드 생성기가 인터프리터와 간단한 가상 머신으로 대체된다. 성능 향상을 위해 순수 인터프리터를 쓰기 보다는 JIT를 사용하는 경우도 있다. LLVM은 자신만의 IR 언어를 정의하고, 이 IR를 조작하고 코드를 생성/수행하는 일을 한다. LLVM 자체는 프런트엔드를 포함하지는 않고 있다. 각 언어의 프론트엔드는 독립적으로 분리되어있다. 즉, C, Cpp, 포트란 등의 LLVM용 프론트엔드 파서가 소스코드를 분석해 LLVM IR로 만들면 비로소 LLVM 프레임웍을 쓸 수 있다. LLVM IR로 변환된 언어는 플랫폼에서 독립적이며 백엔드를 통해 링킹과정을 통해 기계화 언어로 번역되거나 JIT 형식으로 변환되어 컴파일된다. 즉 LLVM IR로 변환되는 타겟이 바로 특정 하드웨어에 종속되지 않는 독립된 LLVM의 가상화 플랫폼이며, 이 중간과정의 결과물에서 어디로 어떻게 빌드하느냐는 개발자의 선택사항이 된다. 그러나 아직 프로젝트가 진행중인 탓인지 완전하게 플랫폼 독립적인 형태로운영이 되지는 못하고 있다. 소속사에서 주력으로 밀고 있는 맥OS X와 iOS용으로 오브젝티브C 프로젝트를 운용하는 것은 개발에 상당한 중점을 두고 있어 잘돌아가는 듯 하지만, 그 외에는 프로그램이 컴파일은 되는데 프로그램이 돌아가지 않는 등 오류가 적지 않게 보이고 있다. 지속적으로 개선이 되면서 3.02버전에서는 Clang을 이용해서 FreeBSD의 코어가 LLVM기반으로 완전 컴파일 및 작동이 확인되었다.
비로그인 상태입니다. 편집한 내용을 저장하면 지금 접속한 IP가 기록됩니다.
편집을 전송하면 당신은 이 문서의 기여자로서 본인이 작성한 내용이
CC BY 4.0
에 따라 배포되고, 기여한 문서의 하이퍼링크나 URL로 저작자 표시가 충분하다는 것에 동의하는 것입니다.
전송
미리보기