最大方法名称长度

时间:2009-01-08 21:15:33

标签: compiler-construction programming-languages specifications name-length

有没有人碰巧知道您选择的编程语言中方法名称的最大长度是多少?我打算将这个问题作为一个特定的C#问题,但我认为在整个频谱范围内了解它会很好。

还涉及哪些因素:

  • 语言规范是否限制了这个?
  • 编译器将其限制为什么?
    • 32位与64位计算机有什么不同吗?

10 个答案:

答案 0 :(得分:33)

对于C#,我不相信有指定的硬限制。 (例如,C#5规范的第2.4.2节没有给出限制。)Roslyn v2.2.0.61624似乎有1024个字符的限制;这超出了可读性的范围,甚至是一个合理的机器生成的名称。

对于Java,section 3.8 of the spec表示:

  

标识符是无限长度的   Java字母和Java的序列   数字,第一个必须是a   Java信。

答案 1 :(得分:20)

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;
}

?>

答案 2 :(得分:16)

我刚刚在C#Visual Studio 2010(x64)中进行了测试:制作了一个标识符:

int a123456789a123...;

重复一遍。在512个字符处,VS给出了错误“标识符太长”。 511虽然很好。 (在Word中检查字符数。)

另一个例子:

int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;

答案 3 :(得分:12)

微软的C#实现是511,VB.NET的实现是1023。

Visual Studio将只标记标识符的前511(VB3103)字符并将其余字符保持黑色。

答案 4 :(得分:4)

C#中的

长度为511个字符。

答案 5 :(得分:3)

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
? 

这个答案忽略了方法名称的包名;这可以使长度加倍。

答案 6 :(得分:2)

进行中(OpenEdge)的限制是32个字符。

答案 7 :(得分:0)

在D中,我不知道情况如此,但我怀疑它是疯狂的,如> 100MB。这可能是一个不记忆的事情。这是基于我知道我和其他人已经遇到符号名称大约11kB的目标文件格式限制,并且已经修复了。

答案 8 :(得分:0)

在Java中,我认为没有给出长度限制。 See this from the online Sun Java Tutorial

  

变量名称区分大小写。变量的名称可以是任何合法的标识符 - 一个无限长度的Unicode字母和数字序列,以字母开头......

与上述其他人一样,我猜测长度取决于可用内存。

答案 9 :(得分:0)

有趣!在Java中,正如其他人所说,没有限制(我从未想过长度!)但我认为你想避免使用长方法名称,因为这可能会影响可读性甚至心理映射(任何其他开发人员看着代码可能会忘记或想忘记方法名!)。

我相信“clean code”简单地谈论使用描述性的可说出名字。你也可以争辩一个长描述性的名称比短的更好,我想是一个完美的平衡。 这是我的拙见。