[Rejected] PEP 3125 - Remove Backslash Continuation
원문 링크: PEP 3125 - Remove Backslash Continuation
상태: Rejected 유형: Standards Track 작성일: 29-Apr-2007
PEP 3125 – Backslash Continuation 제거 제안
- 작성자: Jim J. Jewett
- 상태: Rejected (거부됨)
- 유형: Standards Track
- 생성일: 2007년 4월 29일
거부 고지 (Rejection Notice)
이 PEP는 거부되었습니다. 해당 제안에 대한 충분한 지지가 없었고, 제거될 기능이 그다지 해롭지 않으며, 일부 사용 사례에서 구현이 더 어려워질 수 있다는 점이 고려되었습니다.
요약 (Abstract)
Python은 초기에 C 언어로부터 파싱(parsing) 방식을 계승했습니다. 이는 전반적으로 유용했지만, Python에 덜 유용한 일부 잔재가 남아있으며, 이를 제거해야 한다는 제안입니다. 이 PEP는 논리적 라인(logical line)의 연속을 나타내는 \
(백슬래시) 문자를 제거할 것을 제안했습니다.
동기 (Motivation)
Python 3000(Python 3.x)의 목표 중 하나는 불필요하거나 중복되는 기능을 제거하여 언어를 단순화하는 것이었습니다. 현재 Python에서는 물리적인 다음 줄로 논리적인 줄이 계속됨을 나타내는 여러 방법이 있습니다.
다른 줄 연속 방법들은 제공하는 의미론(semantics)의 논리적 결과로 쉽게 설명될 수 있습니다. 반면 \
는 단순히 기억해야 하는 이스케이프(escape) 문자입니다.
기존 줄 연속 방법 (Existing Line Continuation Methods)
Python에는 여러 가지 줄 연속 방법이 있습니다.
괄호 표현식 - ()
, []
, {}
(Parenthetical Expression)
괄호 표현식(()
, []
, {}
)을 열면, 해당 표현식이 닫히기 전까지는 문장이 끝나지 않는다는 것을 사용자가 즉시 인지합니다.
예시:
def fn(long_argname1,
long_argname2):
settings = {"background": "random noise",
"volume": "barely audible"}
restrictions = ["Warrantee void if used",
"Notice must be received by yesterday",
"Not responsible for sales pitch"]
표현식을 괄호로 묶는 것은 항상 가능하지만, 단순히 줄 바꿈을 위해 괄호가 필요한 경우에는 이상하게 보일 수도 있습니다.
assert val > 4, (
"val is too small")
삼중 따옴표 문자열 (Triple-Quoted Strings)
삼중 따옴표 문자열을 열면, 다음 문장이 시작되기 전에 문자열이 끝나야 한다는 것을 사용자가 인지합니다.
예시:
banner_message = """
Satisfaction Guaranteed, or DOUBLE YOUR MONEY BACK!!!
some minor restrictions apply"""
일반적인 경우의 마지막 \
(Terminal \ in the general case)
줄 끝에 오는 \
는 (공백 문자 이후) 논리적 라인이 다음 물리적 라인으로 이어진다는 것을 나타냅니다. 이 방식과 관련된 특정 의미론은 없습니다. 이 형식은 필수는 아니지만, 어떤 경우에는 (특히 C 언어 배경을 가진 사람들에게) 더 보기 좋을 수 있습니다.
예시:
assert val > 4, \
"val is too small"
\
는 반드시 줄의 마지막 문자여야 합니다. 편집기 설정에 따라 줄 끝에 공백이 추가되면 보이지 않는 변경으로 인해 프로그램의 의미가 바뀔 수 있으며, 다행히도 일반적으로는 런타임 버그(runtime bug)보다는 Syntax Error(문법 오류)를 발생시킵니다.
이 PEP는 이 중복되고 잠재적으로 혼란을 줄 수 있는 대안을 제거할 것을 제안했습니다.
문자열 내부의 마지막 \
(Terminal \ within a string)
단일 따옴표 문자열 내부, 줄 끝에 오는 \
는 논란의 여지가 있지만 유지할 가치가 있는 특별한 경우로 볼 수 있습니다.
예시:
"abd\
def" # 결과: 'abddef'
- 찬성:
\
제거에 대한 많은 반대는 주로 리터럴(literal) 문자열 내에서의 제거에 대한 반대였으며, 여러 사람이 이 리터럴 문자열 사용법은 유지하고 싶지만 일반적인 경우의 제거에는 개의치 않는다고 밝혔습니다. 문자열 내에서\
를 이스케이프 문자로 사용하는 것은 잘 알려져 있습니다. - 반대: 하지만 이 특정 용법은 이스케이프되는 문자(개행 문자)가 보이지 않고, 특별 처리가 해당 문자를 삭제하는 것이기 때문에 이상합니다. 그렇지만
\(newline)
의\
는 여전히 다음 문자의 의미를 변경하는 이스케이프입니다.
대안 제안 (Alternate Proposals)
여러 사람이 줄의 끝을 표시하는 대체 방법을 제안했습니다. 대부분은 실제로는 상황을 단순화하지 않는다는 이유로 거부되었습니다.
유일한 예외는 모든 미완성 표현식이 줄 연속을 나타내도록 허용하는 것이었는데, 이는 괄호 규칙의 일반화라는 점에서 매력적이었습니다. 그러나 이는 공백의 양, 새로운 코드 블록(suite
) 시작과의 혼동 가능성, 그리고 파싱 메커니즘의 복잡성 문제로 인해 Guido van Rossum에 의해 거부되었습니다.
Andrew Koenig는 더 나은 구현 전략을 제시하며, 다른 언어에서는 잘 작동했다고 언급했습니다. 개선된 제안은 (연산자 또는) 열린 괄호나 대괄호 뒤에 오는 공백에 개행 문자(newline character)를 포함할 수 있도록 하는 것이었습니다. 이는 낮은 어휘 수준에서 구현될 수 있습니다.
하지만 이 방법 역시 x = y+ f(x)
와 같은 경우에 버그를 숨길 수 있다는 우려가 있었습니다. 안전성과 복잡성을 동시에 추가하는 방법으로, 연속되는 줄이 초기 줄보다 더 들여쓰기(indent)되도록 요구하는 방안도 논의되었습니다.
미해결 문제 (Open Issues)
\
를 이용한 줄 연속을 문자열 내부에서도 제거해야 하는가?- 줄 연속 마커를
()
,[]
,{}
에서 연산자로 끝나는 줄까지 확장해야 하는가? - 안전 조치로서, 연속되는 줄이 초기 줄보다 더 들여쓰기 되어야 하는가?
⚠️ 알림: 이 문서는 AI를 활용하여 번역되었으며, 기술적 정확성을 보장하지 않습니다. 정확한 내용은 반드시 원문을 확인하시기 바랍니다.
Comments