목차
1장 CPython 소스 코드 받기
1.1 소스 코드에 포함된 것들

2장 개발 환경 구성하기
2.1 편집기와 통합 개발 환경
2.2 비주얼 스튜디오 구성하기
2.3 비주얼 스튜디오 코드 구성하기
-2.3.1 설치
-2.3.2 권장되는 확장
-2.3.3 고급 코드 탐색 및 펼치기 사용
-2.3.4 작업과 실행 파일을 설정하기
2.4 젯브레인스 CLion 구성하기
2.5 Vim 구성하기
2.6 요약

3장 CPython 컴파일하기
3.1 macOS에서 CPython 컴파일하기
3.2 리눅스에서 CPython 컴파일하기
3.3 수정된 CPython 설치하기
3.4 make 입문
3.5 CPython make 타깃
-3.5.1 빌드 타깃
-3.5.2 데스트 타깃
-3.5.3 정리 타깃
-3.5.4 기타 타깃
3.6 윈도우에서 CPython 컴파일하기
-3.6.1 의존성 설치하기
-3.6.2 명령 프롬프트에서 컴파일하기
-3.6.3 비주얼 스튜디오에서 컴파일하기
3.7 프로파일 기반 최적화
3.8 요약

4장 파이썬 언어와 문법
4.1 CPython이 파이썬이 아니라 C로 작성된 이유
4.2 파이썬 언어 사양
-4.2.1 파이썬 언어 레퍼런스
-4.2.2 문법 파일
4.3 파서 생성기
4.4 문법 다시 생성하기
-4.4.1 토큰
4.5 요약

5장 구성과 입력
5.1 구성 상태
-5.1.1 딕셔너리 초기화 구성
-5.1.2 연관된 소스 파일 목록
-5.1.3 런타임 구성 구조체
-5.1.4 명령줄로 런타임 구성 설정하기
-5.1.5 런타임 플래그 확인하기
5.2 빌드 구성
5.3 입력에서 모듈 만들기
-5.3.1 연관된 소스 파일 목록
-5.3.2 입력과 파일 읽기
-5.3.3 명령줄 문자열 입력
-5.3.4 로컬 모듈 입력
-5.3.5 표준 입력 또는 스크립트 파일 입력
-5.3.6 컴파일된 바이트코드 입력
5.4 요약

6장 렉싱과 파싱
6.1 CST 생성
6.2 파서-토크나이저
-6.2.1 연관된 소스 파일 목록
-6.2.2 파일 데이터를 파서에 입력하기
-6.2.3 파서-토크나이저의 흐름
6.3 추상 구문 트리
-6.3.1 연관된 소스 파일 목록
-6.3.2 인스타비즈로 AST 시각화하기
-6.3.3 AST 컴파일
6.4 중요한 용어들
6.5 예제: ''거의 같음'' 비교 연산자 추가하기
6.6 요약

7장 컴파일러
7.1 컴파일러 인스턴스 생성
7.2 퓨처 플래그와 컴파일러 플래그
-7.2.1 퓨처 플래그
-7.2.2 파이썬 3.9의 퓨처 플래그 목록
-7.2.3 컴파일러 플래그
7.3 심벌 테이블
-7.3.1 연관된 소스 파일 목록
-7.3.2 심벌 테이블 구조체
-7.3.3 symtable 모듈
-7.3.4 심벌 테이블 구현
7.4 핵심 컴파일 과정
-7.4.1 파이썬에서 컴파일러 사용하기
-7.4.2 컴파일러 C API
-7.4.3 명령
-7.4.4 기본 프레임 블록
-7.4.5 명령어와 인자
7.5 어셈블리
-7.5.1 어셈블러 구조체
-7.5.2 어셈블러의 깊이 우선 탐색 알고리즘
-7.5.3 어셈블러 C API
-7.5.4 깊이 우선 탐색
7.6 코드 객체 생성
7.7 인스타비즈로 코드 객체 시각화하기
7.8 예제: ''거의 같음'' 연산자 구현하기
7.9 요약

8장 평가 루프
8.1 스레드 상태 생성하기
-8.1.1 스레드 상태
-8.1.2 연관된 소스 파일 목록
8.2 프레임 객체 생성하기
-8.2.1 프레임 객체
-8.2.2 연관된 소스 파일 목록
-8.2.3 프레임 객체 초기화 API
8.3 프레임 실행
-8.3.1 프레임 실행 추적
8.4 값 스택
-8.4.1 바이트코드 명령 예제: BINARY_OR
-8.4.2 값 스택 시뮬레이션
-8.4.3 스택 효과
8.5 예제: 리스트에 요소를 추가하기
8.6 요약

9장 메모리 관리
9.1 메모리 할당
-9.1.1 정적 메모리 할당
-9.1.2 자동 메모리 할당
-9.1.3 동적 메모리 할당
9.2 파이썬 메모리 관리 시스템의 설꼐
-9.2.1 할당자 도메인
-9.2.2 메모리 할당자
9.3 CPython 메모리 할당자
-9.3.1 연관된 소스 파일 목록
-9.3.2 중요한 용어들
-9.3.3 블록, 풀, 아레나
-9.3.4 블록 할당 API
-9.3.5 파이썬 디버그 API 사용하기
9.4 객체와 PyMem 메모리 할당자 도메인
-9.4.1 tracemalloc 모듈 사용하기
9.5 저수준 메모리 할당자 도메인
9.6 사용자 지정 도메인 할당자
9.7 사용자 지정 메모리 할당 검사기
-9.7.1 AddressSanitizer
-9.7.2 MemorySanitizer
-9.7.3 UndefinedBehaviorSanitizer
9.8 PyArean 메모리 아레나
-9.8.1 연관된 파일 목록
9.9 참조 카운팅
-9.9.1 파이썬에서 변수 생성 과정
-9.9.2 참조 카운트 증가시키기
-9.9.3 참조 카운트 감소시키기
-9.9.4 바이트코드 연산에서의 참조 카운팅
-9.9.5 CPython 참조 카운터의 장점
9.10 가비지 컬렉션
-9.10.1 연관된 소스 파일 목록
-9.10.2 가비지 컬렉터 설계
-9.10.3 가비지 컬렉션 대상인 컨테이너 타입
-9.10.4 추적에서 제외할 수 있는 객체들과 가변성
-9.10.5 가비지 컬렉션 알고리즘
-9.10.6 세대별 가비지 컬렉션
-9.10.7 파이썬에서가비지 컬렉터 API 사용하기
9.11 요약

10장 병렬성과 동시성
10.1 병렬성과 동시성 모델
10.2 프로세스의 구조
10.3 멀티프로세스를 활용한 병렬 실행
-10.3.1 POSIX에서 프로세스 포크하기
-10.3.2 윈도우에서의 멀티프로세싱
-10.3.3 multiprocessing 패키지
-10.3.4 연관된 소스 파일 목록
-10.3.5 프로세스 스폰과 포크
-10.3.6 큐와 파이프를 사용해 데이터 교환하기
-10.3.7 프로세스 간의 공유 상태
-10.3.8 애플리케이션 예제
-10.3.9 멀티프로세싱 요약
10.4 멀티스레딩
-10.4.1 GIL
-10.4.2 연관된 소스 파일 목록
-10.4.3 파이썬 스레드 시작하기
-10.4.4 스레드 상태
-10.4.5 POSIX 스레드
-10.4.6 윈도우 스레드
-10.4.7 멀티스레딩 요약
10.5 비동기 프로그래밍
10.6 제너레이터
-10.6.1 제너레이터의 구조
-10.6.2 연관된 소스 파일 목록
-10.6.3 제너레이터 생성하기
-10.6.4 제너레이터 실행하기
10.7 코루틴
-10.7.1 연관된 소스 파일 목록
-10.7.2 이벤트 루프
-10.7.3 예제
10.8 비동기 제너레이터
10.9 서브인터프리터
-10.9.1 연관된 소스 파일 목록
-10.9.2 예제
10.10 요약

11장 객체와 타입
11.1 내장 타입들
11.2 객체와 가변 객체 타입
11.3 type 타입
-11.3.1 타입 슬록
-11.3.2 C 타입 사용하기
-11.3.3 타입 프로퍼티 딕셔너리
11.4 bool과 long 타입
-11.4.1 long 타입
-11.4.2 예제
11.5 유니코드 문자열 타입
-11.5.1 연관된 소스 파일 목록
-11.5.2 유니코드 코드 포인트 처리하기
-11.5.3 UTF-8 대 UTF-16
-11.5.4 확장(wide) 문자 타입
-11.5.5 바이트 순서 표식
-11.5.6 encodings 패키지
-11.5.7 코덱 모듈
-11.5.8 코덱 구현
-11.5.9 내부 코덱
-11.5.10 예제
11.6 딕셔너리 타입
-11.6.1 해싱
-11.6.2 연관된 소스 파일 목록
-11.6.3 딕셔너리의 구조
-11.6.4 검색
11.7 요약

12장 표준 라이브러리
12.1 파이썬 모듈
12.2 파이썬과 C가 혼용된 모듈

13장 테스트 스위트
13.1 윈도우에서 테스트 스위트 실행하기
13.2 리눅스와 macOS에서 테스트 스위트 실행하기
13.3 테스트 플래그
13.4 특정 테스트만 실행하기
13.5 테스트 모듈
13.6 테스트 유틸리티
13.7 요약

14장 디버깅
14.1 크래시 핸들러
14.2 디버그 지원 컴파일하기
-14.2.1 윈도우
-14.2.2 macOS 또는 리눅스
14.3 macOS에서 LLDB 사용하기
-14.3.1 중단점 추가하기
-14.3.2 CPython 실행하기
-14.3.3 실행 중인 CPython 인터프리터에 연결하기
-14.3.4 중단점 사용하기
-14.3.5 cpython_lldb 확장
14.4 GDB 사용하기
-14.4.1 중단점 추가하기
-14.4.2 CPython 실행하기
-14.4.3 실행 중인 CPython 인터프리터에 연결하기
-14.4.4 중단점 사용하기
-14.4.5 pthon-gdb 확장
14.5 비주얼 스튜디오 디버거 사용하기
-14.5.1 중단점 추가하기
-14.5.2 디버거 실행하기
-14.5.3 중단점 사용하기
14.6 CLion 디버거 사용하기
-14.6.1 Make 애플리케이션 디버깅
-14.6.2 디버거 연결하기
-14.6.3 중단점 추가하기
-14.6.4 중단점 사용하기
14.7 요약

15장 벤치마킹, 프로파일링, 실행 추적
15.1 timeit으로 마이크로 벤치마크 실행하기
-15.1.1 timeit 예제
15.2 파이썬 벤치마크 스위트로 런타임 벤치마크 실행하기
-15.2.1 벤치마크 실행하기
-15.2.2 벤치마크 비교하기
15.3 cProfile로 파이썬 코드 프로파일링하기
-15.3.1 프로파일 결과 내보내기
15.4 DTrace로 C 코드 프로파일링하기
-15.4.1 연관된 소스 파일 목록
-15.4.2 DTrace 설치
-15.4.3 DTrace 지원 컴파일하기
-1.5.4.4 CLion에서 DTrace 사용하기
-15.4.5 DTrace 예제
15.5 요약

16장 다음 단계
16.1 CPython용 C 확장 작성하기
16.2 파이썬 애플리케이션 개선하기
16.3 CPython 프로젝트에 기여하기
16.3.1 이슈 분류하기
16.3.2 이슈 수정을 위해 풀 리퀘스트 제출하기
16.3.3 다른 방식으로 기여하기

부록 A 파이썬 프로그래머를 위한 C 안내서

부록 B 성능 이슈를 통해 살펴본 CPython의
닫기