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에는 호환성 문제(Compatibility Issues)라는 추가 섹션이 반드시 포함되어야 합니다. 이 섹션에서는 제안된 Python 변경의 어떤 점이 하위 호환성을 깨뜨리는지, 그리고 예상되는 주요 손상 유형이 무엇인지 설명해야 합니다.
PEP는 여전히 사안별로 평가되어야 하지만, 호환성 문제 섹션이 다음 중 하나에 해당함을 시사한다면 그 PEP는 Python 3000에 적합하지 않을 수 있습니다:
- Python 2.X 구문의 사용 사례 대부분 또는 전부가 Python 3000에서 올바르지 않고, Python 3000 구문의 사용 사례 대부분 또는 전부가 Python 2.X에서 올바르지 않은 경우.
예를 들어, for 루프 else 절의 의미를 “루프가 break로 빠져나오지 않았을 때 실행됨”에서 “루프가 한 번도 반복되지 않았을 때 실행됨”으로 바꾸면, 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 3000에서 다르게 동작할 Python 2.X 코드 부분에 대해 경고를 발생시키는 코드가 함께 제공되어야 합니다. 이러한 경고는 Python 2.X에서 새로운 명령줄 스위치인 -3을 사용하여 활성화됩니다. 하위 호환성을 깨뜨리는 모든 변경에는, -3이 지정되었을 때 변경되는 각 구문에 대해 경고를 발생시키는 Python 2.X용 패치가 함께 제공되어야 합니다.
예를 들어, Python 3000에서 dict.keys()가 이터레이터를 반환한다면, Python 2.X 브랜치에 대한 패치는 다음과 같은 작업을 수행해야 합니다:
-3이 지정된 경우,dict.keys()가__iter__()이외의 메서드를 사용할 때마다 경고를 발생시키는list서브클래스를 반환하도록 변경합니다.
이러한 패치를 적용하면 Python 3000에 존재하지 않을 기능이 사용될 때에만 경고가 발생하며, 기존 코드는 거의 모두 계속 동작할 것입니다. (dict.keys()가 서브클래스가 아닌 list를 항상 반환한다는 점에 의존하는 코드는 사실상 존재하지 않을 것입니다.)
참고 문헌
미정
Copyright
This document has been placed in the public domain.