PEP 3002 – 하위 호환성이 없는 변경 절차
- Author:
- Steven Bethard <steven.bethard at gmail.com>
- Status:
- Final
- Type:
- Process
- Created:
- 27-Mar-2006
- Post-History:
- 27-Mar-2006, 13-Apr-2006
Table of Contents
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 PEP는 Python 2.X 계열과 Python 3000 사이에서 하위 호환성이 없는 Python 변경의 절차를 설명합니다. 이러한 모든 변경은 적절한 Python 3000 PEP에 문서화되어야 하며, Python 2.X 코드의 일부가 Python 3000에서 문제가 될 수 있는 경우를 식별할 수 있는 코드가 함께 제공되어야 합니다.
근거
Python 3000은 주로 언어를 간소화하고 이전의 일부 설계 오류를 제거하기 위해 Python에 여러 하위 호환성이 없는 변경을 도입합니다. 그러나 Python 3000은 Python 2.X 계열과 완전히 다른 새로운 언어를 만들려는 것이 아니며, Python 사용자 커뮤니티의 상당수가 Python 3000을 사용할 수 있게 되면 Python 3000으로 전환할 것으로 예상합니다.
이러한 전환을 장려하려면 Python 2.X 코드를 Python 3000 코드로 업그레이드하는 방법에 대한 명확하고 완전한 지침을 제공하는 것이 매우 중요합니다. 따라서 하위 호환성이 없는 변경에는 다음 두 가지가 필요합니다.
- 공식 Python 개선 제안(PEP)
- Python 2.X 코드 중 Python 3000에서 문제가 될 수 있는 부분을 식별할 수 있는 코드
Python 개선 제안
하위 호환성이 없는 모든 변경에는 PEP가 함께 제공되어야 합니다. 이 PEP는 일반적인 PEP 지침을 따르고 하위 호환성이 없는 변경의 목적과 근거를 설명해야 합니다. 일반적인 PEP 섹션에 더해 하위 호환성이 없는 변경을 제안하는 모든 PEP에는 추가 섹션인 호환성 문제를 포함해야 합니다. 이 섹션에서는 제안된 Python 변경이 어떤 점에서 하위 호환성이 없는지와 예상되는 주요 종류의 손상을 설명해야 합니다.
PEP는 여전히 개별적으로 평가되어야 하지만, 호환성 문제 섹션이 다음 중 하나라도 암시한다면 해당 PEP는 Python 3000에 부적절할 수 있습니다.
- Python 2.X 구문의 대부분 또는 전부가 Python 3000에서 올바르지 않고, Python 3000 구문의 대부분 또는 전부가 Python 2.X에서 올바르지 않습니다.
예를 들어 for 루프의 else 절 의미를 “루프가 중단되지 않았을 때 실행됨”에서 “루프의 반복 횟수가 0일 때 실행됨”으로 변경하면 모든 Python 2.X for 루프 else 절이 손상되고, for 루프 else 절을 Python 3000에 적합한 방식으로 사용할 방법이 없어집니다. 따라서 이러한 아이디어에 대한 PEP는 거부될 가능성이 높습니다.
- Python 2.X 구문의 많은 사례가 Python 3000에서 올바르지 않고, PEP가 해당 변경에 대한 실제 사용 사례를 입증하지 못합니다.
Python 3000에서는 하위 호환성이 없는 변경이 허용되지만, 과도해서는 안 됩니다. 하위 호환성이 없는 변경을 제안하는 PEP는 해당 변경으로 코드가 눈에 띄게 이점을 얻는 좋은 예제를 제공해야 합니다.
PEP 작성에는 시간이 많이 걸리므로, 여러 하위 호환성이 없는 변경이 밀접하게 관련되어 있다면 동일한 PEP에서 제안해야 합니다. 그러나 이러한 PEP는 이제 제안된 변경 모두에서 예상되는 손상의 종류를 설명해야 하므로 호환성 문제 섹션이 더 길어질 가능성이 높습니다.
문제가 되는 코드 식별
PEP 요구 사항에 더해 Python의 하위 호환성이 없는 변경에는 Python 2.X 코드 중 Python 3000에서 다르게 동작할 부분에 경고를 발생시키는 코드도 함께 제공되어야 합니다. 이러한 경고는 새로운 명령줄 스위치인 -3을 사용하여 Python 2.X에서 활성화됩니다. 모든 하위 호환성이 없는 변경에는 Python 2.X용 패치가 함께 제공되어야 하며, -3이 지정되면 변경되는 각 구문에 대해 경고를 발생시켜야 합니다.
예를 들어 Python 3000에서 dict.keys()가 이터레이터를 반환한다면 Python 2.X 브랜치에 대한 패치는 다음과 비슷하게 동작해야 합니다.
-3이 지정되면dict.keys()를list의 서브클래스를 반환하도록 변경하고,__iter__()이외의 메서드를 사용할 때마다 경고를 발생시킵니다.
이러한 패치는 Python 3000에 존재하지 않을 기능을 사용할 때만 경고가 발생하고 기존 코드의 거의 전부가 계속 작동한다는 것을 의미합니다. (dict.keys()가 항상 서브클래스가 아닌 list를 반환한다고 의존하는 코드는 사실상 존재하지 않아야 합니다.)
참고 자료
TBD
Copyright
This document has been placed in the public domain.