의 개념 runtime library
, 특히 파이썬 개념을 이해하는 데 문제가 있습니다 . 그래서 저는 hello world python 프로그램을 작성하여 실행하려고합니다 python ./hello_world.py
.
Enter 버튼을 눌렀을 때와 CPU에서 실행되는 파이썬 코드에서 생성 된 기계어 코드 사이에 어떤 단계가 발생합니까? 그리고 이것이 파이썬 런타임 시스템 및 / 또는 라이브러리와 어떤 관련이 있습니까?
의 개념 runtime library
, 특히 파이썬 개념을 이해하는 데 문제가 있습니다 . 그래서 저는 hello world python 프로그램을 작성하여 실행하려고합니다 python ./hello_world.py
.
Enter 버튼을 눌렀을 때와 CPU에서 실행되는 파이썬 코드에서 생성 된 기계어 코드 사이에 어떤 단계가 발생합니까? 그리고 이것이 파이썬 런타임 시스템 및 / 또는 라이브러리와 어떤 관련이 있습니까?
답변:
다양한 현대식 프로그래밍 언어가 공유하는 몇 가지 공통 개념이 있습니다. 그중 두 가지는 위의 질문에 대한 답변의 핵심입니다.
Enter 버튼을 눌렀을 때와 CPU에서 실행되는 파이썬 코드에서 생성 된 기계어 코드 사이에 어떤 단계가 발생합니까?
코드는 파싱, 분석 및 통역사로 제공됩니다. 이것은 컴파일러 이론으로 알려진 컴퓨터 과학의 매우 중요한 영역에 관한 것 입니다. 컴파일러는 한 언어 (소스 코드)에서 다른 언어로 코드를 변환하는 프로그램입니다 (일반적으로 하나의 고급 언어에서 다른 언어로 변환하는 "변환기"는 존재하지만 기계 코드). 이것은 몇 년 동안 연구 할 수있는 매우 방대한 주제이지만 기본 버전은 다음과 같습니다.
컴파일러는 소스 코드를 읽고 언어의 구문 규칙을 적용하여 유효한 Python (귀하의 경우) 코드인지 이해하는 루틴 인 parser로 시작 합니다. 그렇지 않으면 파서에서 오류가 발생하고 컴파일러가 종료되지만 파서가 발생하면 파서가 요약 구문 트리 또는 AST를 간단히 출력합니다. AST는 노드에 각각 구문 요소가 포함 된 트리 데이터 구조입니다. 예를 들어, 당신이 말한다면 x = 5
, 당신은 끝낼 수 BinaryExpression
와 노드 operator
의 값 =
하는 Left
값 ReferenceExpression(x)
과 Right
의 값 IntegerLiteralExpression(5)
. 전체 프로그램은 이와 같은 큰 나무로 표현 될 수 있습니다.
파서가 AST를 생성하면 두 번째 단계는 의미 분석 입니다. 평범한 영어로, 이것은 "이 AST가 무엇을 의미하는지 파악"을 의미합니다. 유효한 구문 분석 (예 : 3 개의 인수로 1 인수 함수 호출)과 같이 불법적 인 일을했는지 확인하기 위해 AST를 확인하고, 그렇지 않으면 오류를 발생시킵니다. 그렇지 않으면 AST를 분석하고 편집을 수행하여 기계가 이해하기 쉽도록합니다.
세 번째 단계는 코드 생성입니다. 완벽하게 분석되고 단순화 된 유효한 AST를 생성 한 후에는 AST를 생성하고 출력 언어로 코드를 생성하는 생성기로 공급합니다. 이것은 완제품입니다.
파이썬에서는 컴파일러가 아닌 인터프리터를 사용합니다. 인터프리터는 컴파일러와 정확히 같은 방식으로 작동하지만 한 가지 차이점이 있습니다. 코드 생성 대신 출력을 메모리 내에서로드하고 시스템에서 직접 실행합니다. (이런 상황에 대한 정확한 세부 사항은 언어와 통역사마다 크게 다를 수 있습니다.)
그리고 이것이 파이썬 런타임 시스템 및 / 또는 라이브러리와 어떤 관련이 있습니까?
가장 단순한 언어를 제외한 모든 언어에는 사전 정의 된 함수 세트가 제공되는데,이 기능은 많은 사용자에게 중요하며 사용자가 어떤 이유로 든 스스로 구현하기가 어려울 수 있습니다. 이들의 코드는 타사 라이브러리가 없어도 이러한 함수를 호출 할 수 있습니다. (예를 들어, 파이썬 print
에서는 출력을 전송합니다 stdout
. 직접 구현하십시오.)이 함수 집합은 일반적으로 코드가 런타임에 호출 할 수있는 공유 라이브러리에 수집되므로 알려진 이유입니다. 언어 런타임 라이브러리 또는 간단히 "런타임"으로