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 프레임 객체 초기화 API8.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 UndefinedBehaviorSanitizer9.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의 미래