Cpython 5

CPython 메모리 관리

CPU와 메모리는 컴퓨터에서 가장 중요한 부분이다. CPU와 메모리는 모두 혼자서는 동작할 수 없다. 프로그래밍 언어를 설계할때는 메모리를 관리할 방법을 정해야하는데 언어 설계자는 단순한 인터페이스를 원하는지, 이기종 호환성 대응을 원하는지 안정성보다는 성능에 중점을 둘 것인지에 따라 다양한 메모리 관리 방법중 어떤 방식을 사용할지 성택한다. C메모리 할당 C는 세가지 메모리 관리방식을 제공한다. 정적 메모리할당: 필요한 메모리는 컴파일 시간에 계산되고 실행파일이 실행될때 할당된다. 자동 메모리할당: 스코프에 필요한 메모리는 프레임에 진입할 때 콜스택내에 할당되고 프레임이 끝남ㄴ 해제된다. 동적 메모리 할당: 메모리 할당 API를 호출해 런타임에 메모리를 동적으로 요청하고 할당한다. 정적 메모리 할당 C..

CPython 2023.01.25

CPython/컴파일러 (2) '거의 같음' 연산자 구현하기(2)

컴파일러 C API AST 모듈 컴파일의 진입점인 compiler_mod()는 모듈타입에 따라 다른컴파일러함수를 사용한다. mod가 Module일 경우 모듈은 컴파일러 유닛으로 컴파일되어 c_stack 프로퍼티에 저장된다. 이후 컴파일러 유닛 스택에서 PyCodeObject를 생성하기 위해 assemble()을 실행한다. compiler_body()는 모듈의 각 문을 순회하며 방문한다. AST노드 타입을 확인하는 asdl_seq_GET() 호출을 통해 이 문의 타입이 결정된다. VISIT 매크로는 각 문 타입에 해당하는 compile.c의 함수를 호출한다. 모든 문을 포괄하는 stmt타입의 경우 컴파일러는 compiler_bisit_stmt()를 호출해 Python/Python.asdl에 정의된 하위 문..

CPython 2023.01.08

CPython/렉싱과 파싱/ '거의 같음'연산자 구현(1)

다양한 방식으로 입력된 텍스트 형태의 파있너 코드는 파싱 단계를 거쳐 컴파일러에서 사용할 수 있는 구조로 변환된다. 이번장에서는 텍스트 형태의소스 코드를 컴파일 가능한 논리적 구조로 파싱하는 방법에 대해 알아볼것이다. Cpython은 코드를 파싱하기 위해 CST와 AST두 가지 구조를 사용한다. 리더 -> 렉서 -> 파서 -> 컴파일러 파싱과정은 다음과 같다. 1. 파서.토크나이저 또는 렉서가 CST를 생성한다. 2. 파서가 CST로부터 AST를 생성한다. 이 두단계는 다른 프로그래밍 언어에서도 흔하기 사용되는 패러다임이다. CST CST는 문맥 자유 문법에서 코드를 표현하는 루트와 순서가 있는 트리다. 토크나이저와 파서가 CST를 생성한다. 파서 생성기는 문맥 자유 문법이 가질 수 있는 상태에 대한 결..

CPython 2022.12.10

CPython 구성과 입력

Cpython에서는 다양한 방식으로 파이썬 코드를 실행할 수 있다. 1. python -c : 파이썬 문자열 실행 2. python -m :으로 모듈 실행 3. python : 파이썬 코드가 들어있는 파일 실행 4. cat | python 처럼 파이썬 코드를 stidn으로 python에 파이프 하기 5. REPL에서 한번에 하나씩 명령 실행하기 6. C API를 사용해파이썬을 임베디드 환경으로 사용 인터프리터가 파이썬 코드를 실행하려면 세 가지 요소가 필요하다. 1. 실행할 모듈 2. 변수 등을 저장할 상태 3. 활성화된 옵션 등의 구성 이 세가지 요소가 있어야 인터프리터가 코드를 실행하고 출력을 제공할 수 있다. 구성 상태 파이썬 코드를 실행하기 전에 Cpython 런타임은 먼저 사용자 옵션과 구성을 ..

CPython 2022.12.10

CPython 3.9 환경 설정 (macos)

cpython CPython은 C로 작성된 컴파일러를 사용하는 python 인터프리터 언어 c 로 작성된 이유 셀프호스팅 컴파일러는 고 컴파일러척럼 자기 자신으로 작성한 컴파일러이다. 셀프 호스팅 컴파일러는 부트스트래핑이라는 단계를 통해서 만들어진다. 소스대 소스 컴파일러는 컴파일러를 이미 가지고 있는 다른 언어로 작성한 컴팡일러이다. cpython 배포된 소스코드 클론해서 들고오기 git clone --branch 3.9 https://github.com/python/cpython cd pythonmac은 기본적으로 xcode에서 기본적인 툴킷을 제공하기때문에 xcode툴킷만 다운로드 하ㅕㅁㄴ 대부분의 준비가 끝난다. xcode-select --install다음 의존성 brew로 설치 brew inst..

CPython 2022.12.10