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
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 문서는 Python 2.8의 미개발 및 미출시 일정을 설명합니다.
미출시 관리자 및 담당자
| 직책 | 이름 |
|---|---|
| 2.8 미출시 관리자 | Cardinal Biggles |
미출시 일정
현재의 미출시 일정은 다음과 같습니다.
- 2.8 최종 릴리스 없음
공식 발표
제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와 커뮤니티는 그동안 많은 것을 배웠습니다. Guido가 처음 구상한 Python 3은 주로 이전 버전에서 자라난 결함을 제거하기 위해 언어를 변경하는 것이었습니다. 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에는 전용 바이트 타입이 추가되었지만, 중요한 점은 바이트와 유니코드 문자열 간의 자동 강제 변환이 제공되지 않는다는 것입니다. 언어가 암시적 강제 변환에 가장 근접하는 경우는 인코딩이 명시적으로 지정되지 않았을 때 기본 인코딩(대개 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에서는 이제 이터레이터 또는 경량 뷰를 반환합니다.
Copyright
This document has been placed in the public domain.