我承认这个问题可能无法回答,或者极难回答。
此外,尽管我希望这些观众熟悉脚本语言中的转义序列,但为了清楚起见,您将在本文后面看到,我将回顾一下这个概念:
“转义”是指例如可打印的字符,这些字符被解释为“不要像往常一样使用下一个字符;在另一个上下文中解释它”。上下文包括不被解释为代码的字符,而是作为文字打印字符,或者相反,通常可以被解释为我们想要解释为代码的文字字符的字符。我的例子(更令人困惑,我现在意识到)使用后一种情况。
具体示例:与 'nix sed 一起使用的正则表达式,当不为 sed 转义时,是这样的:
([^0-9]*)(20[0-9]{2})([^0-9]{1,2})([0-9]{1,2})
但是,当 shell 转义以将正则表达式传递给 sed 时,sed 知道将字符解释为不是文字字符,而是作为正则表达式代码,整个字符串变得更加丑陋(并且更不可读):
\([^0-9]*\)\(20[0-9]\{2\}\)\([^0-9]\{1,2\}\)\([0-9]\{1,2}\)
转义字符(或序列)是编程的祸根之一。对于长字符串(或代码行)尤其如此,在这种情况下,只有特别注意和/或使用创建和删除转义序列的工具才实用。
我环顾四周并没有遇到像我将提出的解决方案,但不知道如果它存在可能会被命名为什么,并且不是专家,搜索是徒劳的。
在我说诸如“控制代码页分配”之类的东西的地方,我指的是计算机用来呈现和控制文本布局等的可打印(和不可打印)字符表的代码页,正如解释的那样在“代码页”的维基百科文章中。如果你愿意的话,你可以(松散地)称这些“计算机字母”。我所说的“代码页分配”是指计算机“字母表”中的一个条目,它被解释为呈现的字形(可打印字符)或未打印的控制代码(不可打印的字符)。
这个想法是指定一个特定的、未打印的控制代码页分配来表示“将下一个字符解释为已转义”,文本渲染器可以“读取”并通过更改例如转义字符的颜色和/或亮度来向程序员指示遵循控制代码。和/或控制代码页分配可以是可打印的字形,例如是标准化的、非侵入性的重音字形,它不与与罗马字母相关的任何字母中的任何其他重音相冲突。
解释器和编译器也可以类似地读取此未打印的代码页分配。
假设一个比我上面给出的更长的正则表达式的渲染版本:
如果我们有一个未打印的代码页分配意味着“下一个字符被转义”,那么转义字符可以例如简单地渲染得更亮,以表明它们被转义:
对于人类来说,这比下面的解释要容易得多(尽管这很难从正则表达式开始),而是使用打印字符作为转义序列:
在我写这篇文章时,如果不是普遍情况,主要的情况是在转义序列中使用打印的字符,而不是未打印的代码页分配。
所提出的解决方案的附带问题将是确保程序员使用的许多工具与转义代码页分配的一致性。程序员还必须知道哪些实用程序支持转义代码页分配,哪些不支持。此外,任何采用这种代码页分配的工具最好明确说明它们是否向后兼容(它们是否可以同时使用打印字符和未打印的代码页分配用于转义序列)。
除了转义控制代码页分配之外,我不喜欢通过任何方式完成此任务的任何编程语言或工具。尽管如此,我对任何可以做到这一点的工具都非常好奇。
因此,在所有这些之后,我的问题是:存在哪些编程语言可以做到这一点,和/或是否已经有代码页分配可以做到这一点?