청구할인 안내(인터파크 제휴카드) | 안내
삼성카드 5% (3만원 이상 결제/최대 1만원 할인)
북피니언 롯데카드 30% (최대할인 3만원 / 3만원 이상 결제)
하나SK 북&카드 30% (최대할인 3만원 / 3만원 이상 결제)
EBS 롯데카드 20% (최대할인 3만원 / 3만원 이상 결제)
인터파크 NEW 우리V카드 10% (최대할인 3만원 / 3만원 이상 결제)
인터파크 현대카드 7% (최대할인 3만원 / 3만원 이상 결제)
Close

2013년 9월 9일 이후 누적수치입니다.

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

판매지수 214
?
판매지수란?
사이트의 판매량에 기반하여 판매량 추이를 반영한 인터파크 도서에서의 독립적인 판매 지수입니다. 현재 가장 잘 팔리는 상품에 가중치를 두었기 때문에 실제 누적 판매량과는 다소 차이가 있을 수 있습니다. 판매량 외에도 다양한 가중치로 구성되어 최근의 이슈도서 확인시 유용할 수 있습니다. 해당 지수는 매일 갱신됩니다.
Close
정가

30,000원

  • 27,000 (10%할인)

    1,500P (5%적립)

  • (3건)

    26,970원 ~(10%할인)

    [특급]

  • 중고판매

    이 책을 인터파크에
    판매하세요

  • 이벤트/기획전

  • 연관도서(301)

  • 사은품(3)

책소개

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

출판사 서평

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

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

[이 책의 구성]
1장, 'LLVM 설계와 사용법'에서는 LLVM과 Clang를 다운로드해 설치하는 방법과 LLVM 내부 동작과 관련된 여러 예제를 통해 LLVM의 모듈 구조에 대해 설명한다. 또한 프론트엔드에 관련된 다양한 예제를 다룬다.
2장, '프론트엔드 작성 단계'에서는 프로그래밍 언어의 프론트엔드 구현 방법을 설명한다. TOY 언어를 위해 하위 단계부터 간단한 컴파일러 프론트엔드를 만들며, 이를 통해 프론트엔드 언어가 LLVM IR로 변환되는 과정을 눈으로 확인해본다.
3장, '프론트엔드 확장과 JIT 컴파일 추가'에서는 TOY 언어의 고급 기능을 살펴보고 프론트엔드에 JIT 컴파일 기능을 추가한다. 대부분의 현대 프로그래밍 언어에서 찾을 수 있는 강력한 기능을 구현한다.
4장, '최적화 준비'에서는 LLVM IR의 패스 기반 구조를 다룬다. 다양한 최적화 단계를 탐험하고, 각 단계에서 어떤 최적화 기술이 적용되는지 살펴본다. LLVM 패스를 스스로 작성할 수 있게 단계별로 설명한다.
5장, '최적화 구현'에서는 흔히 사용되는 LLVM IR에 대한 다양한 최적화 패스 구현 방법을 설명한다. 또한 아직 LLVM 오픈소스 코드에 공개되지 않은 벡터화 기술 관련 내용도 살펴본다.
6장, '타겟 독립적 코드 생성기'에서는 타겟 독립적 코드 생성기의 추상적인 기반 구조에 대해 설명한다. LLVM IR이 최종적으로 기계 코드를 생성하기 위해 사용하는 Selection DAG로 어떻게 변환되는지도 살펴본다.
7장, '머신 코드 최적화'에서는 Selection DAG가 어떻게 최적화되고 타겟 레지스터가 어떻게 변수에 할당되는지 살펴본다. 또한 Selection DAG의 최적화와 여타 레지스터 할당 기술에 대해서도 설명한다.
8장, 'LLVM 백엔드 작성'에서는 레지스터와 명령어 집합, 호출 규약, 인코딩, 보조 타겟 기능 등 타겟 아키텍처를 표현하는 방법을 설명한다.
9장, '다양한 프로젝트에서의 LLVM 활용'에서는 LLVM IR 기반 구조를 사용할 수 있는 다양한 프로젝트를 살펴본다. LLVM은 단순한 컴파일러가 아니라 컴파일러 기반 구조다. 코드 조각들에 적용할 수 있는 다양한 프로젝트를 살펴보고 유용한 정보를 얻는 것이 9장의 목표다.

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

[옮긴이의 말]
컴파일러는 소프트웨어 개발자라면 누구나 매일 사용하는 도구지만, 실제 내부가 어떻게 동작하는지 아는 개발자는 그리 많지 않다. 과거엔 오픈소스 컴파일러인 GCC, 마이크로소프트에서 개발하는 MSVC를 많이 사용했지만, 최근에는 LLVM이 관심을 많이 받고 있고 특히 엑스코드(XCode)가 LLVM을 기본 컴파일러로 채택하면서 LLVM으로 빌드하는 상용 애플리케이션이 많아졌다. LLVM은 더 나아가 FreeBSD 운영체제를 빌드할 때도 쓰인다. 이렇듯 LLVM의 인기가 높아지면서 LLVM을 제외하고는 컴파일러를 논할 수 없게 됐다.
일리노이 대학의 연구 주제로 시작한 LLVM은 재사용이 가능한 코어 라이브러리, 프론트엔드, 링커 등 컴파일러 및 툴체인의 집합이다. 컴파일러의 구성 요소들이 모두 모듈화돼 있다는 특징 때문에 LLVM 모듈들을 사용한 다양한 프로젝트들이 활발하게 개발되고 있다. C/C++, 오브젝티브 C(Objective-C) 등 셀 수 없는 프로그래밍 언어들을 지원할 뿐만 아니라 디스어셈블러, 에뮬레이터의 코어 역할을 하기도 한다.
이 책은 LLVM 컴파일러 사용 기초부터 중간 언어, 최적화 과정까지 빠짐없이 다룬다. 관련 컴파일러 이론도 충분히 설명함으로써 컴파일러 이론에 대한 이해가 부족한 독자들도 내용을 소화할 수 있도록 책을 구성했다. 컴파일러를 공부함으로써 독자적인 컴파일러를 만들겠다는 거창한 목표를 이루지 못하더라도, 평소에 작성하는 코드를 컴파일러는 내부적으로 어떻게 해석하고 최적화하는지 감을 잡을 수 있는 좋은 기회가 될 것이다.

목차

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 유틸리티 패스 사용

저자소개

메이유르 판디(Mayur Pandey) [저] 신작알림 SMS신청 작가DB보기
생년월일 -
출생지 -
출간도서 0종
판매수 0권

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

슈오그 사르다(Suyog Sarda) [저] 신작알림 SMS신청 작가DB보기
생년월일 -
출생지 -
출간도서 0종
판매수 0권

컴파일러와 컴파일러 툴 개발에 헌신하는 소프트웨어 엔지니어이자 열렬한 오픈소스 지지자다. 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 V

펼쳐보기
생년월일 -
출생지 -
출간도서 0종
판매수 0권

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

생년월일 -
출생지 -
출간도서 0종
판매수 0권

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

생년월일 -
출생지 -
출간도서 0종
판매수 0권

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

생년월일 -
출생지 -
출간도서 0종
판매수 0권

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

생년월일 -
출생지 -
출간도서 0종
판매수 0권

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

이 상품의 시리즈

acorn+PACKT 시리즈(총 324권 / 현재구매 가능도서 302권)

펼쳐보기

리뷰

0.0 (총 0건)

기대평

작성시 유의사항

평점
0/200자
등록하기

기대평

0.0

교환/환불

교환/환불 방법

‘마이페이지 > 취소/반품/교환/환불’ 에서 신청함, 1:1 문의 게시판 또는 고객센터(1577-2555) 이용 가능

교환/환불 가능 기간

고객변심은 출고완료 다음날부터 14일 까지만 교환/환불이 가능함

교환/환불 비용

고객변심 또는 구매착오의 경우에만 2,500원 택배비를 고객님이 부담함

교환/환불 불가사유

반품접수 없이 반송하거나, 우편으로 보낼 경우 상품 확인이 어려워 환불이 불가할 수 있음
배송된 상품의 분실, 상품포장이 훼손된 경우, 비닐랩핑된 상품의 비닐 개봉시 교환/반품이 불가능함

소비자 피해보상

소비자 피해보상의 분쟁처리 등에 관한 사항은 소비자분쟁해결기준(공정거래위원회 고시)에 따라 비해 보상 받을 수 있음
교환/반품/보증조건 및 품질보증 기준은 소비자기본법에 따른 소비자 분쟁 해결 기준에 따라 피해를 보상 받을 수 있음

기타

도매상 및 제작사 사정에 따라 품절/절판 등의 사유로 주문이 취소될 수 있음(이 경우 인터파크도서에서 고객님께 별도로 연락하여 고지함)

배송안내

  • 인터파크 도서 상품은 택배로 배송되며, 출고완료 1~2일내 상품을 받아 보실 수 있습니다

  • 출고가능 시간이 서로 다른 상품을 함께 주문할 경우 출고가능 시간이 가장 긴 상품을 기준으로 배송됩니다.

  • 군부대, 교도소 등 특정기관은 우체국 택배만 배송가능하여, 인터파크 외 타업체 배송상품인 경우 발송되지 않을 수 있습니다.

  • 배송비

도서(중고도서 포함) 구매

2,000원 (1만원이상 구매 시 무료배송)

음반/DVD/잡지/만화 구매

2,000원 (2만원이상 구매 시 무료배송)

도서와 음반/DVD/잡지/만화/
중고직배송상품을 함께 구매

2,000원 (1만원이상 구매 시 무료배송)

업체직접배송상품 구매

업체별 상이한 배송비 적용