字符文字中尾随撇号的好处是什么
What's the benefit of the trailing apostrophe in character literals
我正在编写自己的编程语言,现在正在重新考虑语法的许多方面。在 许多 大多数语言中困扰我的是字符文字中的尾随 撇号。
例子
带尾部斜杠:'n'
没有尾部斜杠:'n
为什么新语言(如 rust f.e.)继续使用尾随 撇号?
看到这些语言解决了我们在旧语言中遇到的问题(好吧,尾随的撇号并不是真正的问题)让我想到保留尾随 撇号 一定有好处。如果它支持可读性,我会同意保留它,但我不认为它支持。
这里有一些更奇特的例子:
'\n
对比 '\n'
'\r
对比 '\r'
'\t
对比 '\t'
'\
对比 '\'
'\'
对比 '\''
'\"
对比 '\"'
我们是因为历史原因保留了这个语法,还是还有其他我还不明白的地方?
请注意,字符串文字中的尾随 引号 是必需的。
这是我的想法:
- 看到两个匹配的引号(或撇号)更直观
而不是只有一个。
- 两个匹配的引号可能更容易一些
词法分析和解析,尤其是在小型工具(如编辑器插件、荧光笔)和网络应用程序中。
- 像
'\'
这样的文字可能看起来很混乱——许多人可能认为这代表 \
(反斜杠)。
- 类似语言的某些高亮器(例如 C/C++/C#,如果它是类 C 语言)对字符文字使用与字符串文字相同的规则,因此它们可能 突出显示第一个引号后的所有内容 直到找到另一个字符文字(可能突出显示多行)。对于没有自己的流行代码编辑器荧光笔的新语言来说,这可能是个问题。
示例:(the same as image; another similar issue)
// Normally looks like this:
var a = '\n'; // comment
var s2 = 'r'.Repeat(5).Replace('r', 'R'); // comment
// Only one 'single quote' with some highlighters:
var a = '\n; // comment
var b = '\'; // comment
var s1 = 'a + 'b + 'c // comment
因为
您不希望字符文字中的错误改变整个程序其余部分的含义。例如,有二合字母和三字母字母,因此有相当多的 space 可能的字符文字和很多指定无效字符的方法。您不希望无效字符之后的部分成为程序其余部分的一部分以进行扫描或解析。你想知道在哪里停下来。
您真的不希望合法字符文字规则成为语言词汇规范的一部分,它必须非常稳定。您希望能够添加新的二字母、三字母等,而无需重新指定语言的词汇规则,也无需更改现有程序的含义。
有趣的想法,但似乎不能用这个表示 space 字符。
我正在编写自己的编程语言,现在正在重新考虑语法的许多方面。在 许多 大多数语言中困扰我的是字符文字中的尾随 撇号。
例子
带尾部斜杠:'n'
没有尾部斜杠:'n
为什么新语言(如 rust f.e.)继续使用尾随 撇号?
看到这些语言解决了我们在旧语言中遇到的问题(好吧,尾随的撇号并不是真正的问题)让我想到保留尾随 撇号 一定有好处。如果它支持可读性,我会同意保留它,但我不认为它支持。
这里有一些更奇特的例子:
'\n
对比'\n'
'\r
对比'\r'
'\t
对比'\t'
'\
对比'\'
'\'
对比'\''
'\"
对比'\"'
我们是因为历史原因保留了这个语法,还是还有其他我还不明白的地方?
请注意,字符串文字中的尾随 引号 是必需的。
这是我的想法:
- 看到两个匹配的引号(或撇号)更直观 而不是只有一个。
- 两个匹配的引号可能更容易一些 词法分析和解析,尤其是在小型工具(如编辑器插件、荧光笔)和网络应用程序中。
- 像
'\'
这样的文字可能看起来很混乱——许多人可能认为这代表\
(反斜杠)。 - 类似语言的某些高亮器(例如 C/C++/C#,如果它是类 C 语言)对字符文字使用与字符串文字相同的规则,因此它们可能 突出显示第一个引号后的所有内容 直到找到另一个字符文字(可能突出显示多行)。对于没有自己的流行代码编辑器荧光笔的新语言来说,这可能是个问题。
示例:(the same as image; another similar issue)
// Normally looks like this:
var a = '\n'; // comment
var s2 = 'r'.Repeat(5).Replace('r', 'R'); // comment
// Only one 'single quote' with some highlighters:
var a = '\n; // comment
var b = '\'; // comment
var s1 = 'a + 'b + 'c // comment
因为
您不希望字符文字中的错误改变整个程序其余部分的含义。例如,有二合字母和三字母字母,因此有相当多的 space 可能的字符文字和很多指定无效字符的方法。您不希望无效字符之后的部分成为程序其余部分的一部分以进行扫描或解析。你想知道在哪里停下来。
您真的不希望合法字符文字规则成为语言词汇规范的一部分,它必须非常稳定。您希望能够添加新的二字母、三字母等,而无需重新指定语言的词汇规则,也无需更改现有程序的含义。
有趣的想法,但似乎不能用这个表示 space 字符。