HOME > Detail View

Detail View

LLVM cookbook : 한 권으로 끝내는 컴파일러와 LLVM

LLVM cookbook : 한 권으로 끝내는 컴파일러와 LLVM (Loan 13 times)

Material type
단행본
Personal Author
Pandey, Mayur Sarda, Suyog, 저 박현재, 역 민재원, 역 서혜영, 역 송은두, 역 제한재, 역
Title Statement
LLVM cookbook : 한 권으로 끝내는 컴파일러와 LLVM / 메이유르 판디, 슈오그 사르다 지음 ; 박현재 [외]옮김
Publication, Distribution, etc
서울 :   에이콘,   2017  
Physical Medium
366 p. : 삽화 ; 24 cm
Series Statement
acorn+PACKT technical book
Varied Title
LLVM cookbook : over 80 engaging recipes that will help you build a compiler frontend, optimizer, and code generator using LLVM
ISBN
9788960779570 9788960772106 (Set)
General Note
공역자: 민재원, 서혜영, 송은두, 제한재  
기술감수: 로건 치엔(Logan Chien), 마이클 하이들(Michael Haidl), 데이브 티안(Dave Jing Tian)  
색인수록  
Subject Added Entry-Topical Term
Compilers (Computer programs) Optimizing compilers Programming software C++ (Computer program language) Virtual computer systems
000 00000nam c2200205 c 4500
001 000045894320
005 20170203174117
007 ta
008 170203s2017 ulka 001c kor
020 ▼a 9788960779570 ▼g 94000
020 1 ▼a 9788960772106 (Set)
040 ▼a 211009 ▼c 211009 ▼d 211009
041 1 ▼a kor ▼h eng
082 0 4 ▼a 005.453 ▼2 23
085 ▼a 005.453 ▼2 DDCK
090 ▼a 005.453 ▼b 2017
100 1 ▼a Pandey, Mayur
245 1 0 ▼a LLVM cookbook : ▼b 한 권으로 끝내는 컴파일러와 LLVM / ▼d 메이유르 판디, ▼e 슈오그 사르다 지음 ; ▼e 박현재 [외]옮김
246 1 9 ▼a LLVM cookbook : ▼b over 80 engaging recipes that will help you build a compiler frontend, optimizer, and code generator using LLVM
260 ▼a 서울 : ▼b 에이콘, ▼c 2017
300 ▼a 366 p. : ▼b 삽화 ; ▼c 24 cm
440 0 0 ▼a acorn+PACKT technical book
500 ▼a 공역자: 민재원, 서혜영, 송은두, 제한재
500 ▼a 기술감수: 로건 치엔(Logan Chien), 마이클 하이들(Michael Haidl), 데이브 티안(Dave Jing Tian)
500 ▼a 색인수록
650 0 ▼a Compilers (Computer programs)
650 0 ▼a Optimizing compilers
650 0 ▼a Programming software
650 0 ▼a C++ (Computer program language)
650 0 ▼a Virtual computer systems
700 1 ▼a Sarda, Suyog, ▼e
700 1 ▼a 박현재, ▼e
700 1 ▼a 민재원, ▼e
700 1 ▼a 서혜영, ▼e
700 1 ▼a 송은두, ▼e
700 1 ▼a 제한재, ▼e
900 1 0 ▼a 판디, 메이유르, ▼e
900 1 0 ▼a 사르다, 슈오그, ▼e
945 ▼a KLPA

Holdings Information

No. Location Call Number Accession No. Availability Due Date Make a Reservation Service
No. 1 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.453 2017 Accession No. 121239039 Availability Available Due Date Make a Reservation Service B M

Contents information

Book Introduction

컴파일러에 익숙하지 않은 독자들을 위해 LLVM 활용 예제로 친절하게 컴파일러 내부 동작 구조 및 관련 도구를 설명하는 책

★ 요약 ★

컴파일러에 익숙하지 않은 독자들을 위해 LLVM 활용 예제로 친절하게 컴파일러 내부 동작 구조 및 관련 도구를 설명한다. GCC 컴파일러를 익숙하게 다루는 독자라면 최신 컴파일러를 이해하기 위해 꼭 보길 권장한다. 코드를 한 줄씩 설명해주기 때문에, 컴파일러 코드를 처음 접하는 독자도 이론이 실제로 적용된 코드를 살펴볼 수 있는 좋은 기회가 될 것이다.

★ 이 책에서 다루는 내용 ★

■ LLVM의 모듈식 디자인과 LLVM 도구 소개
■ 언어에 대한 프론트엔드 작성
■ JIT 기능 추가 및 여러 언어의 프론트엔드 사용
■ LLVM 패스 구조 및 LLVM 패스 매니저 이해
■ 분석 패스 개발 및 최적화 패스 변환
■ TOY 언어로 LLVM 백엔드 구현
■ Selection DAG 단계에서 코드 최적화 및 변수 레지스터 할당

★ 이 책의 대상 독자 ★

컴파일러 개념에 익숙하고 LLVM 기반 구조를 이해하고 탐험하기를 원하며, 업무에 활용하고자 하는 컴파일러 엔지니어를 위한 것이다.
또한 컴파일러와 직접 연관은 없지만 수천 라인의 코드를 작성하는 프로그래머를 위한 책이기도 하다. 컴파일러 동작 방식에 대한 지식을 바탕으로 최적화된 코드를 작성해 고성능의 깔끔한 프로그램을 개발할 수 있다.

★ 지은이의 말 ★

프로그래머라면 프로그래밍하면서 컴파일러를 접해봤을 것이다. 컴파일러란 쉽게 설명하면 사람이 이해할 수 있는 형태의 고수준 코드를 기계가 이해할 수 있는 형태의 저수준 코드로 변환해주는 프로그램이다. 컴파일러가 어떻게 동작하는지 내부 구조에 의문을 가져본 적이 있는가? 컴파일러는 최적화된 기계어 코드를 생성해내기 위해 수많은 작업을 수행하며, 좋은 컴파일러를 구현하려면 복잡한 알고리즘이 많이 필요하다.
이 책은 컴파일 과정인 프론트엔드, 코드 최적화, 코드 생성 등 모든 단계를 다루는데, 단순한 기반 구조를 가진 LLVM이 각 컴파일 단계를 학습하는 데 적합하다. LLVM은 여러 모듈과 계층으로 나눠져 있으며 모든 컴파일러 기능들이 독립적으로 구현돼 있다. 또한 객체지향 언어인 C++로 구현됐으며, 프로그래머에게 단순한 인터페이스와 수많은 API를 제공해 독자적인 컴파일러를 구현하기 쉽게 해준다.
복잡한 솔루션보다는 단순한 솔루션을 여러 번 다루는 것이 나을 것이다. 이 책에서는 모든 컴파일 옵션을 고려하고 단순히 코드를 컴파일하는 것 이상의 것을 이해할 수 있도록 보여줌으로써 독자의 실력 향상에 도움이 되는 다양한 예제를 다룬다.
또한 컴파일러 개발과 관련이 없는 개발자라 할지라도 이 책을 통해 많은 것을 얻을 수 있다고 믿는다. 컴파일러 구현에 대한 이해는 최적화된 코드를 짤 수 있게 도와줄 것이다.
책에서 다루는 예제들이 유익하다고 생각하길 바라며, 이 예제들을 학습한 뒤에는 스스로 컴파일러를 만들 수 있을 것이다.


Information Provided By: : Aladin

Author Introduction

Mayur Pandey(지은이)

컴파일러와 컴파일러 툴 개발에 헌신하는 소프트웨어 엔지니어이자 열렬한 오픈소스 지지자다. LLVM 오픈소스 커뮤니티에서 활동적인 기여자며, 타이젠(Tizen) 프로젝트에서 컴파일러 팀의 일원으로 일하면서 다른 컴파일러 기술과 함께 실천적인 경험을 쌓아왔다. 인도 NIT 알라하바드(Allahabad) 대학에서 정보기술(information technology) 학사학위를 받고 현재 인도 방갈로르에서 살고 있다.

Suyog Sarda(지은이)

컴파일러와 컴파일러 툴 개발에 헌신하는 소프트웨어 엔지니어이자 열렬한 오픈소스 지지자다. LLVM 오픈소스 커뮤니티의 활동적인 기여자며, 타이젠 프로젝트에서 컴파일러 팀의 일원으로 일하면서 ARM과 X86 아키텍처의 코드 성능을 개선했다. 컴파일러 개발에서 관심 분야는 코드 최적화와 벡터화다. 컴파일러뿐만 아니라 Suyog은 리눅스 커널 개발에도 관심이 많고, 두바이 Birla Institute of Technology에서 열린 IEEE Proceedings of the 2012 International Conference on Cloud Computing, Technologies, Applications, and Management에서 ?Secure Co-resident Virtualization in Multicore Systems by VM Pinning and Page Coloring?라는 제목의 기술 논문을 발표했다. 인도 Pune 공과대학(College of Engineering, Pune)에서 학사학위를 받았으며, 현재 인도 방갈로르에서 살고 있다.

박현재(옮긴이)

얕지만 다양한 분야에 관심이 많다. 계산기를 만들다가 컴파일러와 프로그래밍 언어론에 관심을 갖게 됐고, LLVM 스터디를 하게 됐다.

민재원(옮긴이)

한국인터넷진흥원 취약점 분석 팀에서 주임 연구원으로 근무했으며, 현재 NHN 엔터테인먼트에서 보안 엔지니어로 근무 중이다. 취약점, 익스플로잇 기술 등에 관심이 많고, 최근엔 iOS, 안드로이드 커널 취약점을 연구하고 있다.

서혜영(옮긴이)

임베디드 시스템 개발 및 최적화 분야에서 활동했고, 운영체제, 시스템 분석, 최적화 등에 관심이 많다. 새로운 것에 대해 도전하는 것을 좋아하고, 또한 세상에 대한 호기심이 많아 여행도 즐긴다.

송은두(옮긴이)

개발을 사랑하는 소프트웨어 엔지니어다. 현재 임베디드 소프트웨어 개발 분야에 몸담고 있으며 기술을 탐구하고 토론하며 공유하는 것을 좋아한다.

제한재(옮긴이)

알고리즘 콘테스트로 프로그래밍에 입문해 모바일 애플리케이션, 자바 웹 서비스를 개발했다. 산업기능요원으로 사이냅소프트에서 웹 오피스와 문서 처리 솔루션을 개발했다. 프로그래밍 언어론에 관심이 있고, 지속 가능한 개발 방법에 대해 끊임없이 고민하는 개발자다. 현재 산업기능요원을 마치고 고려대학교 컴퓨터 학과에 입학 예정이다.

Information Provided By: : Aladin

Table of Contents

1장. LLVM 설계와 사용법 
__소개 
__모듈 설계 이해 
__Clang/LLVM을 이용한 크로스컴파일링 
__C 소스코드를 LLVM 어셈블리로 변환 
__IR을 LLVM 비트코드로 변환 
__LLVM 비트코드를 타겟 머신 어셈블리로 변환 
__LLVM 비트코드를 LLVM 어셈블리로 역변환 
__LLVM IR 변환 
__LLVM 비트코드 링킹 
__LLVM 비트코드 실행 
__C 프론트엔드 Clang 사용 
__GO 프론트엔드 사용 
__드래곤에그 사용 

2장. 프론트엔드 작성 단계 
__소개 
__TOY 언어 정의 
__렉서 구현 방법 
__추상 구문 트리 정의 
__파서 구현 
__단순 표현식의 파싱 
__이항 표현식의 파싱 
__파싱을 위한 드라이버 적용 
__TOY 언어 대상 렉서 실행 
__각 추상 구문 트리 클래스를 위한 IR 코드 생성 기법 정의 
__표현식을 위한 IR코드 생성 
__함수를 위한 IR 코드 생성 
__IR 코드 최적화 기능 추가 

3장. 프론트엔드 확장과 JIT 컴파일 추가 
__소개 
__조건문 코드 생성: if/then/else 
 __반복문 코드 생성 
__사용자 정의 연산자: 이항 연산자 
__사용자 정의 연산자: 단항 연산자 
__JIT 컴파일 추가 

4장. 최적화 준비 
__소개 
__최적화의 다양한 레벨 
__LLVM 패스 구현 
__opt 툴로 구현한 패스 실행 
__새로운 패스에서 다른 패스 사용 
__패스 매니저에 패스 등록 
__분석 패스 구현 
__에일리어스 분석 패스 구현 
__다른 분석 패스 사용 

5장. 최적화 구현 
__소개 
__죽은 코드 제거 패스 
__인라인 변환 패스 작성 
__메모리 최적화 패스 작성 
__LLVM IR 병합 
__반복문 변환과 최적화 
__표현식 재배치 
__IR 벡터화 
__기타 최적화 패스 

6장. 타겟 독립적 코드 생성기 
__소개 
__LLVM IR의 생명주기 
__GraphViz를 이용한 LLVM IR 제어 흐름 그래프 시각화 
__TableGen을 이용한 타겟 지정 
__명령어 집합 정의 
__머신 코드 디스크립터 추가 
__MachineInstrBuilder 클래스 구현 
__MachineBasicBlock 클래스 구현 
__MachineFunction 클래스 구현 
__명령어 선택자 작성 
__SelectionDAG 교정 
__SelectionDAG 최적화 
__DAG에서 명령어 선택 
__SelectionDAG에서 명령어 스케줄링 

7장. 머신 코드 최적화 
__소개 
__머신 코드의 공통부분 표현식 제거 
__유효 구간 분석 
__레지스터 할당 
__프롤로그-에필로그 코드 삽입 
__코드 생성 
__꼬리 호출 최적화 
__형제 호출 최적화 

8장. LLVM 백엔드 작성 
__소개 
__레지스터와 레지스터 집합 정의 
__호출 규약 정의 
__명령어 집합 정의 
__프레임 저수준화 구현 
__명령어 출력 
__명령어 선택 
__명령어 인코딩 추가 
__보조 타겟 지원 
__다중 명령어로 저수준화 
__타겟 등록 

9장. 다양한 프로젝트에서의 LLVM 활용 
__소개 
__LLVM의 예외 처리 
__Sanitizer 사용 방법 
__LLVM으로 가비지 컬렉터 작성 
__LLVM IR을 자바스크립트로 변환 
__Clang 정적 분석기의 사용 
__bugpoint 사용 
__LLDB 사용 
__LLVM 유틸리티 패스 사용

New Arrivals Books in Related Fields