Python

Sokcuri (토론 | 기여)님의 2015년 4월 17일 (금) 17:20 판 (PyPy)

Python(발음은 파이썬)은 귀도 반 로섬(Guido van Rossum)이 개발한 객체지향 스크립트 프로그래밍 언어이다

특징

  • 인터프리터를 사용한 스크립트 언어

컴파일 언어가 아닌 스크립트 언어로서 현재 다양한 운영체제에서 지원을 하고 있고 우분투 배포판에서는 2.7.x버전이 기본으로 포함되어 있다.

  • 객체지향 프로그래밍 언어
  • 동적 타이핑 대화 지원
  • 다양한 라이브러리 포함
    • 네트워크 통신 라이브러리
    • XML파싱 라이브러리
    • GUI 라이브러리
    • 정규 표현식

Battery Included란 개념에 충실하여 기본 설치 프로그램에 다양한 라이브러리가 포함되어 있다

  • 들여쓰기를 통한 스코프 범위 구분

C/C++을 비롯한 다른 언어의 경우 중괄호를 이용하여 스코프 범위를 구분하는데, 보통적으로 들여쓰기를 하여 스코프 범위를 명확히 알 수 있게하지만, 프로그래머의 귀차니즘(...)으로 들여쓰기를 안할 수 있다그렇게 그 코드를 본 다른 프로그래머들은 멘붕을 하고... 그러나 파이썬은 다른 프로그래밍 언어와 가장 차이나는 부분으로서 들여쓰기를 강제하고 있다.

3버전 VS 2버전

파이썬이 언어가 발전하면서 많은 부분에서 더이상 사용되지 않지만 하위 호환성(옛 버전의 코드가 최신 버전의 프로그램에서도 동작하는 것)을 위하여 남겨져 찌꺼기가 쌓이게 되었다. 그러자 귀도 반 로섬은 이러한 하위 호환성을 퍼기하고 찌꺼기를 제거하면서 내부적으로 코드를 정리하게 되는데 이것이 파이썬 3.X버전이다. 이러한 파이썬 3.X버전은 2.X버전과의 하위호환성을 보장하지 않으며, 파이썬 2.X버전은 2.7버전에서 3.X버전에 새로 추가된 기능을 몇가지 추가한 뒤 버그 수정만을 하고 있다.

GIL 지옥

파이썬은 메모리 관리를 위하여 레퍼런스 카운트(Reference Count)기법을 이용하여 객체를 관리해 왔다. 이러한 레퍼런스 카운트의 동기화를 위하여 전역 인터프리터 록GIL(Global Interpreter Lock)을 사용하였다 초기 파이썬의 동작 환경은 멀티코어의 시대가 아니여서 이에 대한 문제가 없었으며(멀티코어여도 다수의 스레드는 쓰지 않았다), GIL은 구현하기 쉬웠으며 관리하기도 편했다.

하지만 환경이 변하여 멀티코어가 대중에게 보급되면서 다수의 스레드를 써야 하는 시대가 오자 GIL이 문제가 되었다. 다수의 스레드에서 객체에게 접근하려 할 시, GIL이 이를 막아 스레드가 동시에 실행되지 못하고 거기다 객체에 접근하기 위해 스레드끼리 싸움으로서 시간지연까지 생겨 한 개의 스레드를 사용했을 때보다 속도가 느리게 나왔다

이에 현재 파이썬 개발팀에서는 이에 대한 해결책으로 스레드가 아닌 자식 프로세스를 생성하여 GIL 문제를 우회하도록하고 있다.

Python 인터프리터

파이썬은 인터프리터 위에서 실행되는데 이 기본 인터프리터를 C로 구현하였다 하여 CPython이라고 한다.

파이썬을 다른 인터프리터/가상머신 위에 올린 프로젝트도 있으며 다른 가상머신에 올림으로써 GIL이나 C스택문제등을 해결한 경우도 있다.

CPython

파이썬의 기본 인터프리터이며 가장 안정적이고 모든 파이썬 버전의 인터프리터가 존재한다당연하지... 아래의 Jython이나 IronPython보다 빠르다고 하더라.

Jython

파이썬을 바이트코드로 번역하여 JVM(자바 가상 머신)에서 실행하는 인터프리터이다. GIL이나 C스택문제등이 없으며, JVM에 포함되어 있는 자바 라이브러리를 사용할 수 있다. 현재(2015년 4월)까지 업데이트가 되고 있으며 파이썬 2.5버전과 2.7버전을 지원한다 홈페이지

IronPython

파이썬을 닷넷 VM에서 실행하는 인터프리터이다 Jython과 같이 CPython에서 일어나는 GIL이나 C스택문제가 없으며 닷넷라이브러리를 사용할 수 있다 파이썬 2.7버전을 지원한다. 홈페이지

StacklessPython

CPython이 함수스택을 C언어의 것에 올려놓음으로써 오버플로우 문제가 일어나자 함수스택을 독자 구현하여 만들어진 Python 2.7버전과 3.X버전을 지원하는데, 이상하게 메인 페이지에 다운로드 페이지의 링크가 없다... 홈페이지 다운로드 페이지

PyPy

PyPy항목 참조