모든 보간에서 새 줄 허용
메모
이 문서는 기능 사양입니다. 사양은 기능의 디자인 문서 역할을 합니다. 여기에는 기능 디자인 및 개발 중에 필요한 정보와 함께 제안된 사양 변경 내용이 포함됩니다. 이러한 문서는 제안된 사양 변경이 완료되고 현재 ECMA 사양에 통합될 때까지 게시됩니다.
기능 사양과 완료된 구현 간에 약간의 불일치가 있을 수 있습니다. 이러한 차이는 언어 디자인 모임(LDM) 관련노트에 포함되어 있습니다.
사양문서에서 기능 사양서를 C# 언어 표준으로 채택하는 프로세스에 대해 자세히 알아볼 수 있습니다.
- [x] 제안됨
- [x] 구현: https://github.com/dotnet/roslyn/pull/56853
- [x] 사양: 이 파일입니다.
요약
현재 언어는 원문이 아닌 보간 문자열과 원문 보간 문자열(각각$""
및 $@""
)을 다르게 처리합니다. 기본 합리적인 차이점은 축자가 아닌 보간된 문자열이 일반 문자열처럼 작동하고 텍스트 세그먼트에 줄 바꿈을 포함할 수 없으며 대신 이스케이프(예: \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
C# feature specifications