Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 404 – Python 2.8 언릴리스 일정

Author:
Barry Warsaw <barry at python.org>
Status:
Final
Type:
Informational
Topic:
Release
Created:
09-Nov-2011
Python-Version:
2.8

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

이 문서는 Python 2.8의 언개발 및 언릴리스 일정을 설명합니다.

언릴리스 관리자 및 팀원

역할 이름
2.8 언릴리스 관리자 비글스 추기경

언릴리스 일정

현재의 비일정은 다음과 같습니다.

  • 2.8 final 절대 없음

공식 선언

규칙 6번: 공식 Python 2.8 릴리스는 없습니다. 공식 Python 2.8 릴리스는 앞으로도 절대 없을 것입니다. 이것은 이미 죽은 릴리스입니다. Python 2.7은 Python 2 개발 계열의 마지막 버전입니다.

업그레이드 경로

Python 2.7의 공식 업그레이드 경로는 Python 3입니다.

그리고 이제 완전히 다른 이야기

진지하게 말하자면, 공식 Python 2.8 릴리스가 나오지 않을 중요한 이유와, 그 대신 Python 3으로의 이전을 계획해야 하는 중요한 이유가 있습니다.

Python은 (이 글을 쓰는 시점에서) 20년이 넘었으며, Guido와 커뮤니티는 그 사이 수년 동안 많은 것을 배웠습니다. Python 3에 대한 Guido의 원래 구상은 주로 이전 버전들에서 생겨난 결점을 제거하기 위해 언어를 변경하는 것이었습니다. Python 3은 완전한 재설계가 아니라 언어의 진화가 될 예정이었으며, Python 2와의 완전한 하위 호환성 유지는 명시적으로 고려 대상에서 제외되었지만, 그렇다고 해서 문법이나 의미론의 불필요한 변경이 허용되지도 않았습니다. 대부분의 경우 Python 2 코드는 Python 3으로 꽤 쉽게 변환할 수 있으며, 때로는 2to3 같은 도구로 완전히 기계적으로 변환할 수도 있습니다(2.7과 3.x 양쪽에서 수정 없이 실행되는, 결코 작지 않은 언어의 부분 집합도 있습니다).

여러 버전의 Python을 유지 관리하는 것은 Python 개발자들의 자원에 상당한 부담이 되고, Python 3에 담긴 언어와 라이브러리의 개선 사항이 매우 중요하기 때문에, Python 2 계보를 Python 2.7로 끝내기로 결정했습니다. 따라서 모든 새로운 개발은 Python 3 개발 계열에서 이루어지며, 공식 Python 2.8 릴리스는 앞으로도 절대 없을 것입니다. 다만 Python 2.7은 통상적인 기간보다 더 오래 유지 관리될 것입니다.

다음은 Python 3의 중요한 개선 사항 중 몇 가지 주요 내용입니다. Python 2와 Python 3 사이의 differences에 대해 더 자세히 읽어 보실 수 있습니다. Python 2에서 Python 3으로의 porting에 관한 좋은 안내서도 많이 있습니다.

문자열과 바이트

Python 2의 원래 기본 문자열은 8비트 문자열이라고 하며, Python 2에서 ASCII 텍스트와 바이트 시퀀스라는 두 가지 역할을 함께 합니다. Python 2에도 유니코드 문자열 타입이 있지만, 핵심 문자열 타입의 근본적인 모호함에 더해 두 가지를 결합하면 8비트 문자열을 유니코드 객체로 자동 강제 변환하는 Python 2의 기본 동작 때문에 UnicodeError가 자주 발생합니다. Python 3의 표준 문자열 타입은 유니코드 기반이고 Python 3에는 전용 bytes 타입이 추가되었지만, 결정적으로 bytes와 유니코드 문자열 사이의 자동 강제 변환은 제공되지 않습니다. 언어에서 암묵적 강제 변환에 가장 가까운 것은 인코딩을 명시적으로 지정하지 않으면 기본 인코딩(보통 UTF-8)을 가정하는 몇몇 텍스트 기반 API입니다. 따라서 핵심 인터프리터, 그 I/O 라이브러리, 모듈 이름 등은 유니코드 문자열과 바이트를 명확하게 구분합니다. Python 3의 유니코드 지원은 파일 시스템에까지 확장되어, ASCII가 아닌 파일 이름도 기본적으로 지원됩니다.

이러한 문자열/바이트의 명확한 구분은 기존 코드를 Python 3으로 이전할 때 종종 어려움의 원인이 되는데, 많은 서드파티 라이브러리와 애플리케이션 자체가 이 구분에 있어 모호하기 때문입니다. 하지만 일단 이전하고 나면 대부분의 UnicodeError를 없앨 수 있습니다.

숫자

Python 2에는 두 가지 기본 정수 타입, 즉 기계 고유 크기의 int 타입과 임의 길이의 long 타입이 있습니다. Python 3에서는 이 둘이 Python 2의 long 타입과 유사한 단일 int 타입으로 통합되었습니다.

또한 이제 정수 나눗셈은 결과가 정수가 아닌 경우 부동 소수점 수를 만들어 냅니다.

클래스

Python 2에는 흔히 고전 클래스와 새 스타일 클래스라고 부르는 두 가지 핵심 클래스 계층 구조가 있습니다. 후자는 내장 기본 타입을 상속하는 것 같은 일을 가능하게 하고, property 내장 함수 같은 디스크립터 기반 도구를 지원하며, 다중 상속을 다루기 위한 전반적으로 더 합리적이고 일관된 체계를 제공합니다. Python 3은 고전 클래스 지원을 완전히 없앨 기회가 되었으므로, Python 3의 모든 클래스는 자동으로 새 스타일 의미 체계를 사용합니다(이제는 걸맞지 않은 이름이지만). 이를 사용하기 위해 object를 명시적으로 상속하거나 기본 메타타입을 설정할 필요가 없습니다(실제로 모듈 수준에서 기본 메타타입을 설정하는 것은 더 이상 지원되지 않으며, 기본 메타타입은 항상 object입니다).

메타클래스를 명시적으로 지정하는 메커니즘도 클래스 본문의 __metaclass__ 매직 속성 대신 클래스 헤더 줄의 metaclass 키워드 인자를 사용하도록 바뀌었습니다.

여러 가지 표기법

Python 2에는 repr()과 백틱, 또는 두 가지 부등 연산자 !=와 <>처럼 일부 구문에 여러 표기법이 존재하는 경우가 많습니다. 모든 경우에 Python 3은 정확히 하나의 표기법만 선택하고 나머지는 제거했습니다(예를 들어 repr()과 !=가 유지되었습니다).

임포트

Python 3에서는 패키지 내부의 암묵적 상대 임포트를 더 이상 사용할 수 없으며, 절대 임포트와 명시적 상대 임포트만 지원됩니다. 또한 스타 임포트(예: from x import *)는 모듈 수준 코드에서만 허용됩니다.

또한 표준 라이브러리의 일부 영역은 이름 체계를 더 직관적으로 만들기 위해 재구성되었습니다. 거의 사용되지 않는 일부 내장 기능은 표준 라이브러리 모듈로 옮겨졌습니다.

이터레이터와 뷰

Python 2에서 구체적인 리스트를 반환하던 많은 API가 Python 3에서는 이제 이터레이터나 가벼운 뷰를 반환합니다.