다음을 통해 공유


모든 보간에서 새 줄 허용

메모

이 문서는 기능 사양입니다. 사양은 기능의 디자인 문서 역할을 합니다. 여기에는 기능 디자인 및 개발 중에 필요한 정보와 함께 제안된 사양 변경 내용이 포함됩니다. 이러한 문서는 제안된 사양 변경이 완료되고 현재 ECMA 사양에 통합될 때까지 게시됩니다.

기능 사양과 완료된 구현 간에 약간의 불일치가 있을 수 있습니다. 이러한 차이는 언어 디자인 모임(LDM) 관련노트에 포함되어 있습니다.

사양문서에서 기능 사양서를 C# 언어 표준으로 채택하는 프로세스에 대해 자세히 알아볼 수 있습니다.

요약

현재 언어는 원문이 아닌 보간 문자열과 원문 보간 문자열(각각$""$@"")을 다르게 처리합니다. 기본 합리적인 차이점은 축자가 아닌 보간된 문자열이 일반 문자열처럼 작동하고 텍스트 세그먼트에 줄 바꿈을 포함할 수 없으며 대신 이스케이프(예: \r\n)를 사용해야 한다는 것입니다. 반대로, 있는 그대로의 보간된 문자열은 텍스트 세그먼트 내에 (있는 그대로의 문자열과 같이) 줄 바꿈을 포함할 수 있으며, 줄 바꿈이나 다른 문자를 이스케이프하지 않습니다. 다만, 따옴표 자체를 이스케이프하려면 ""이 필요합니다.

이것은 모두 합리적이며이 제안으로 변경되지 않습니다.

오늘날 불합리한 것은 텍스트 세그먼트를 보간 넘어 축자 보간되지 않은 문자열 '줄 바꿈 없음'에 대한 제한을 확장한다는 것입니다. 예를 들어 다음을 작성할 수 없음을 의미합니다.

var v = $"Count is\t: { this.Is.A.Really(long(expr))
                            .That.I.Should(
                                be + able)[
                                    to.Wrap()] }.";

결국에는 '보간은 단일 줄 자체에 있어야 합니다.'라는 규칙은 현재 시스템 구현에 대한 제한일 뿐입니다. 해당 제한은 실제로 필요하지 않으며 성가신 일이 될 수 있으며 제거하는 것은 매우 사소한 일입니다 (방법을 보여 주는 작업 https://github.com/dotnet/roslyn/pull/54875 참조). 결과적으로 이는 개발자가 항목을 한 줄로 배치하거나 축자 보간 문자열로 강제하게 할 뿐이며, 둘 다 마음에 들지 않을 수 있습니다.

보간 식 자체는 텍스트가 아니며, 이에 해당하는 이스케이프/줄 바꿈 규칙에 종속되지 않아야 합니다.

사양 변경

single_regular_balanced_text_character
-    : '<Any character except / (U+002F), @ (U+0040), \" (U+0022), $ (U+0024), ( (U+0028), ) (U+0029), [ (U+005B), ] (U+005D), { (U+007B), } (U+007D) and new_line_character>'
-    | '</ (U+002F), if not directly followed by / (U+002F) or * (U+002A)>'
+    : <Any character except @ (U+0040), \" (U+0022), $ (U+0024), ( (U+0028), ) (U+0029), [ (U+005B), ] (U+005D), { (U+007B), } (U+007D)>
+    | comment
    ;

LDM 토론

https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-20.md