有没有人碰巧知道在您选择的编程语言中方法名称的最大长度是多少?我打算把它作为一个 C# 特定的问题,但我认为很高兴了解整个范围。
还涉及哪些因素:
- 语言规范是否限制了这一点?
- 编译器将其限制在什么范围内?
- 32位和64位机器有区别吗?
有没有人碰巧知道在您选择的编程语言中方法名称的最大长度是多少?我打算把它作为一个 C# 特定的问题,但我认为很高兴了解整个范围。
还涉及哪些因素:
对于 C#,我不相信有指定的硬限制。(例如,C# 5 规范的第 2.4.2 节没有给出限制。)Roslyn v2.2.0.61624 似乎有 1024 个字符的限制;这远远超出了可读性的范围,甚至是一个合理的机器生成名称。
对于 Java,规范的第 3.8 节规定:
标识符是 Java 字母和 Java 数字的无限长度序列,其中第一个必须是 Java 字母。
PHP 似乎只受脚本内存限制的限制。
使用 128Mb,我能够创建一个包含 400 万个字符的类(和方法)。
<?php
ini_set('memory_limit', '128M');
$i = 1024 * 1024;
while ($i < 10000000)
{
$className = str_repeat('i', $i);
eval("class $className { public function $className() { echo '$i<br>'; } }");
new $className();
$i *= 2;
}
?>
我刚刚在 C# Visual Studio 2010 (x64) 中做了一个测试:做了一个标识符:
int a123456789a123...;
并重复。在 512 个字符处,VS 给了我错误“标识符太长”。不过511还不错。(检查 Word 中的字符数。)
另一个例子:
int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;
微软的 C# 实现是 511,VB.NET 实现是 1023。
Visual Studio 只会对标识符的前 511 个(对于 VB 为 1023 个)字符进行着色,并将其余字符保持黑色。
Common Lisp 符号的名称是字符串;字符串的长度限制为array-dimension-limit
的值array-dimension-limit
是一个正整数,它是数组每个单独维度的上界。这个界限取决于实现,但不会小于 1024。(鼓励实现者在不牺牲性能的情况下使这个限制尽可能大。)
在实践中,这可能非常大
Welcome to Clozure Common Lisp Version 1.3-dev-r11583M-trunk (DarwinX8664)!
? array-dimension-limit
72057594037927936
?
Welcome to Clozure Common Lisp Version 1.3-dev-r11583M-trunk (DarwinX8632)!
? array-dimension-limit
16777216
?
这个答案忽略了方法名的包名;这可以加倍长度。
进行中 (OpenEdge) 限制为 32 个字符。
在 DI 中不知道是这种情况,但我怀疑它是像 >100MB 这样的疯狂的东西。这可能是内存不足的事情。这是基于知道我和其他人已经遇到了符号名称的目标文件格式限制约为 11kB,并且该问题已得到修复。
在 Java 中,我相信没有给出长度限制。 请参阅在线 Sun Java 教程:
变量名区分大小写。变量的名称可以是任何合法标识符——无限长度的 Unicode 字母和数字序列,以字母开头......
像上面的其他人一样,我猜长度取决于可用内存。