什么算作 Raku *source* 文件的换行符?
What counts as a newline for Raku *source* files?
我有点惊讶地发现下面的代码
# comment
say 1;
# comment
say 2;
# comment say 3;
# comment say 4;
打印 1
、2
、3
和 4
。
这里是“#comment”后的相关字符:
say "
".uninames.raku;
# OUTPUT: «("PARAGRAPH SEPARATOR", "LINE SEPARATOR", "<control-000B>", "<control-000C>").Seq»
请注意,其中 many/all 个字符在大多数字体中是不可见的。至少对于我的编辑器,none 导致以下文本在新行上打印。并且至少有一个(<control-000C>
,又名 Form Feed
,有时打印为 ^L
)在 Vim/Emacs 中被广泛用作部分分隔符。
这提出了几个问题:
- 这是故意的还是错误?
- 如果是故意的,用例是什么(除了赢得混淆代码竞赛!)
- 是只有这4个字,还是还有其他的? (我找到这些是因为它们共享 mandatory break Unicode 属性。是否 属性(或其他一些 Unicode 属性?)管理 Raku 认为的换行符?)
- 只是,真的,哇。
(我意识到 #4 在技术上 不是一个问题,但我觉得有必要说一下)。
Raku 的语法定义为 Raku 文法。解析这样一条评论的规则是:
token comment:sym<#> {
'#' {} \N*
}
也就是说,它吃掉 #
之后不是换行符的所有内容。与 Raku 中的所有内置字符 类 一样,\n
及其否定是 Unicode 识别的。 language design docs 状态:
\n matches a logical (platform independent) newline, not just \x0a. See TR18 section 1.6 for a list of logical newlines.
这是对Unicode standard for regular expressions的引用。
我有点怀疑是否有过类似“让我们在 Unicode 中启用所有类型的换行符,这会很酷!”这样的特定语言设计讨论。相反,决定是 Raku 应该遵循 Unicode 正则表达式技术报告,并且 Raku 语法将根据 Raku 语法定义,从而使用 Unicode 识别字符 类。支持一系列不同的换行符是始终遵循这些原则的结果。
我有点惊讶地发现下面的代码
# comment
say 1;
# comment
say 2;
# comment say 3;
# comment say 4;
打印 1
、2
、3
和 4
。
这里是“#comment”后的相关字符:
say "
".uninames.raku;
# OUTPUT: «("PARAGRAPH SEPARATOR", "LINE SEPARATOR", "<control-000B>", "<control-000C>").Seq»
请注意,其中 many/all 个字符在大多数字体中是不可见的。至少对于我的编辑器,none 导致以下文本在新行上打印。并且至少有一个(<control-000C>
,又名 Form Feed
,有时打印为 ^L
)在 Vim/Emacs 中被广泛用作部分分隔符。
这提出了几个问题:
- 这是故意的还是错误?
- 如果是故意的,用例是什么(除了赢得混淆代码竞赛!)
- 是只有这4个字,还是还有其他的? (我找到这些是因为它们共享 mandatory break Unicode 属性。是否 属性(或其他一些 Unicode 属性?)管理 Raku 认为的换行符?)
- 只是,真的,哇。
(我意识到 #4 在技术上 不是一个问题,但我觉得有必要说一下)。
Raku 的语法定义为 Raku 文法。解析这样一条评论的规则是:
token comment:sym<#> {
'#' {} \N*
}
也就是说,它吃掉 #
之后不是换行符的所有内容。与 Raku 中的所有内置字符 类 一样,\n
及其否定是 Unicode 识别的。 language design docs 状态:
\n matches a logical (platform independent) newline, not just \x0a. See TR18 section 1.6 for a list of logical newlines.
这是对Unicode standard for regular expressions的引用。
我有点怀疑是否有过类似“让我们在 Unicode 中启用所有类型的换行符,这会很酷!”这样的特定语言设计讨论。相反,决定是 Raku 应该遵循 Unicode 正则表达式技术报告,并且 Raku 语法将根据 Raku 语法定义,从而使用 Unicode 识别字符 类。支持一系列不同的换行符是始终遵循这些原则的结果。