Skip to content

Commit

Permalink
deploy: d12dedc
Browse files Browse the repository at this point in the history
  • Loading branch information
heehehe committed Mar 26, 2024
1 parent 47f7691 commit d346230
Show file tree
Hide file tree
Showing 50 changed files with 5,387 additions and 534 deletions.
Binary file added _images/00_pgo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
Binary file added _images/01_train_diagram_coffee.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added _images/02_train_diagram_while.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added _images/03_train_diagram_try.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed _images/code_tokenized.png
Binary file not shown.
Binary file removed _images/small_stmt.png
Binary file not shown.
Binary file removed _images/tokens.png
Binary file not shown.
2 changes: 1 addition & 1 deletion _sources/docs/10_0_parallel_and_concurrent.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# 병렬성과 동시성
# 10. 병렬성과 동시성
2 changes: 1 addition & 1 deletion _sources/docs/11_0_object_and_type.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# 객체와 타입
# 11. 객체와 타입
2 changes: 1 addition & 1 deletion _sources/docs/12_0_standard_library.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# 표준 라이브러리
# 12. 표준 라이브러리
2 changes: 1 addition & 1 deletion _sources/docs/13_0_test_suite.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# 테스트 스위트
# 13. 테스트 스위트
79 changes: 79 additions & 0 deletions _sources/docs/1_0_welcome_to_cpython.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# 1. CPython 살펴보기

> 앞으로 저희는 CPython에 대해 아래 내용을 다루게 됩니다 🚀
> - **CPython 소스 코드 읽고 탐색 / 컴파일**하기
> - Python 문법 수정하고 컴파일해서 자신만의 CPython 버전 만들기
> - list, dictionary, generator 등의 **내부 작동 방식 이해**하기
> - CPython **메모리 관리 기능** 이해하기
> - **병렬성과 동시성**을 통해 Python 코드 확장하기
> - 코어 타입에 새로운 기능 추가하기
> - **테스트 스위트** 실행하기
> - Python **코드와 런타임 성능을 프로파일하고 벤치마크**하기
> - C 코드와 Python 코드를 전문가처럼 **디버깅**하기
> - CPython 라이브러리의 구성 요소를 수정하거나 개선해서 **향후 CPython에 기여**하기
## 1.1 CPython이란?

- Python 구현체 중 하나로, 일반적으로 이용하는 [python.org](http://python.org) 에서 제공하는 공식 파이썬 구현체입니다.
- 이름에서 알 수 있듯이, CPython은 C로 구현되어 있습니다.
- 다른 python 구현체
- Jython
- Java로 작성된 파이썬 구현체
- JVM(Java Virtual Machine)에서 실행
- IronPython
- C#로 작성된 파이썬 구현체
- .NET 프레임워크 사용
- PyPy
- Python 정적 타입으로 작성된 파이썬 구현체
<br>(정적 타입: 실행하기 전에 변수의 type을 미리 결정하고, 그 이후에는 type을 변경하지 않는 방식)
- JIT(Just-In-Time: 프로그램을 실행하는 동안 실시간으로 기계어로 변환) 컴파일러 방식으로 구현되어 기존 interpreter 방식보다 빠르고 효율적

## 1.2 CPython 배포판 구성 요소

- **언어 사양(Language Specification)**: 파이썬 언어의 문법, 구문, 의미론
- ex) `[]`: 인덱싱, 슬라이싱, 빈 리스트 생성을 위해 사용
- **컴파일러(Interpreter)**: C 언어로 작성된 컴파일러
- 파이썬 소스 코드 → 실행 가능한 기계어로 변환하는 역할
- **표준 라이브러리 모듈(Standard Library Modules)**: 기본적으로 포함되어 있는 패키지
- ex) 파일 입출력, 네트워킹, 문자열 처리, 데이터 구조, GUI 프로그래밍 등
- **코어 타입(Core Types)**: 내장 데이터 type
- ex) 숫자, 문자열, list, tuple, dictionary
- **테스트 스위트(Test Suite)**: 개발 및 유지 보수에 사용되는 테스트 모음
- ex) 유닛 테스트, 통합 테스트, 성능 테스트

## 1.3 소스 코드 들여다보기

- 소스 코드 다운로드 (3.9 버전을 기준으로 살펴볼 예정입니다.)
```bash
git clone --branch 3.9 https://github.com/python/cpython
```
- 소스 코드 구성
```bash
cpython
├── CODE_OF_CONDUCT.md
├── Doc # 문서 소스 파일
├── Grammar # 컴퓨터가 읽을 수 있는 언어 정의
├── Include # C 헤더 파일
├── LICENSE
├── Lib # 파이썬으로 작성된 표준 라이브러리 모듈
├── Mac # macOS를 위한 파일
├── Makefile.pre.in
├── Misc # 기타 파일
├── Modules # C로 작성된 표준 라이브러리 모듈
├── Objects # 코어 타입과 객체 모델
├── PC # 이전 버전의 윈도우를 위한 윈도우 빌드 지원 파일
├── PCbuild # 윈도우 빌드 지원 파일
├── Parser # 파이썬 파서 소스 코드
├── Programs # python 실행 파일과 기타 바이너리를 위한 소스 코드
├── Python # CPython 인터프리터 소스 코드
├── README.rst
├── Tools # CPython 빌드하거나 확장하는 데 유용한 독립 실행형 도구
├── aclocal.m4
├── config.guess
├── config.sub
├── configure
├── configure.ac
├── install-sh
├── pyconfig.h.in
└── setup.py
```
91 changes: 91 additions & 0 deletions _sources/docs/2_0_settings.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# 2. 개발 환경 세팅

CPython-Guide는 CPython 파헤치기 책과 동일한 Python 3.9 버전을 기반으로 진행됩니다.

## Visual Studio Code 개발 환경 세팅

### 플러그인 설치
아래와 같은 플러그인들을 설치해줍니다.
![VSCode 설치 플러그인](../images/2_settings/00_vscode_plugin.png)

### .vscode/task.json 작성
프로젝트 실행 명령에 대한 json 파일 `.vscode/task.json`을 아래와 같이 생성해줍니다.

```json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
},
"windows": {
"command": "PCBuild/build.bat",
"args": ["-p", "x64", "-c", "Debug"]
},
"linux": {
"command": "make -j2 -s"
},
"osx": {
"command": "make -j2 -s"
}
}
]
}
```

위와 같이 파일 작성을 완료하면 TASK EXPLORER의 vscode 하위에 작성한 build task가 추가된 것을 볼 수 있습니다.
![태스크 세팅 결과](../images/2_settings/01_tasks_explorer_result.png)


### .vscode/launch.json 작성
디버거를 위한 json 파일 `.vscode/launch.json`을 아래와 같이 생성해줍니다.

- macOS
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug C Code",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/python.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb"
}
]
}
```
- Windows
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "msvc cl.exe debug cpython",
"type": "cppvsdbg",
"request": "launch",
"program": "PCBuild/amd64/python_d.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"preLaunchTask": "build"
}
]
}
```

이제 F5를 누르면 CPython 빌드 진행 및 디버깅을 할 수 있습니다.
CPython의 진입점이 되는 Programs/python.c의 9번 라인에 디버그 브레이크를 걸고 실행해보면,
아래와 같이 디버깅이 잡힌 것을 확인할 수 있습니다.
![CPyhton 디버깅](../images/2_settings/02_cpython_debugging.png)
Loading

0 comments on commit d346230

Please sign in to comment.