为什么在编程语言的变量名中不允许使用特殊字符(下划线除外)?
是否有任何与计算机体系结构或组织有关的原因。
它与计算机历史有关。 即,如果您使用名称中的@创建了一个变量,那么没有@键的人将无法编辑您的代码。 另请参阅:en.wikipedia.org/wiki/Digraphs_and_trigraphs
这随语言而异。 见stackoverflow.com/questions/7656937/
如上所述,这会随语言的变化而变化(例如,Swift允许使用unicode标识符),但是另一个原因(从历史上讲,一定是历史原因)可能是在仅允许使用纯ASCII时使符号表更短(及其操作更简单)。
大多数语言都有悠久的历史,使用ASCII字符集。这些语言往往具有简单的标识符描述(例如,以A-Z开头,然后是A-Z,0-9,也许是下划线; COBOL允许"-"作为名称的一部分)。当您只有029键打孔或电传打字机时,您没有太多其他字符,并且大多数字符都用作运算符或标点符号。
在较旧的计算机上,这样做的好处是您可以将标识符编码为基数37(AZ,0-9,空)[32位6个字符]或基数64(AZ,az,0-9,下划线和空) )数字(用于小型符号表的数字[36位6个字符,在较早的机器中是常见的字长)。结果是:许多较旧的语言在标识符大小上有6个字符限制(例如FORTRAN)。
长期以来,LISP语言已被允许使用。名称可以是LISP特殊含义的字符以外的任何字符,例如()[]'`#,通常可以使用某种转义约定将这些字符插入名称中。我们的PARLANSE语言就像LISP;它使用"?"作为转义符,因此您可以将?(begin +?)end写为单个标识符,其实际拼写为"(begin + end)"。
更现代的语言(Java,C#,Scala等,...,甚至是PARLANSE)在Unicode时代长大,并且倾向于允许标识符中的大多数unicode(实际上,它们倾向于允许将命名的Unicode子集作为Unicode的一部分)身份标识)。由汉字构成的标识符在此类语言中是完全合法的。
在西半球有点像口味问题:大多数标识符名称仍倾向于仅使用字母和数字(有时是西欧字母)。我不知道日语和汉语在具有支持Unicode的字符集时真正用于标识符名称的含义。我所见过的亚洲代码很少遵循西方标识符约定,但注释倾向于使用更多的Unicode字符集。
从根本上讲,这是因为它们通常用作运算符或分隔符,因此会引起歧义。
Is there any reason relate to computer architecture or organization.
否。计算机看不到变量名。只有编译器可以。但是它必须能够将变量名与两个由运算符分隔的变量名区分开,并且大多数语言设计人员都采用了这样的原理,即计算机程序的含义不应受到空格的影响。
我爱堆雪人! (我希望更多的语言将空格视为更相关的分隔符:-/)