最大方法名称长度

Jos*_*osh 41 compiler-construction programming-languages specifications name-length

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

涉及的因素有哪些:

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

Jon*_*eet 35

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

对于Java,规范的3.8节说明:

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


Gre*_*reg 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;
}

?>
Run Code Online (Sandbox Code Playgroud)


DLe*_*Leh 17

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

int a123456789a123...;
Run Code Online (Sandbox Code Playgroud)

并重复.在512个字符处,VS给出了错误"标识符太长".511虽然很好.(在Word中检查字符数.)

另一个例子:

int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifierever?_?okaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;
Run Code Online (Sandbox Code Playgroud)

  • 我其实读完了.对我的雇主感觉不好. (2认同)

Kir*_*kov 12

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

Visual Studio将仅标记标识符的前511个(1024个VB)字符,并将其余字符保持为黑色.


Dou*_*rie 5

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
? 
Run Code Online (Sandbox Code Playgroud)

这个答案忽略了方法名的包名。这可能会使长度加倍。


shi*_*i14 5

在 C# 中是 511 个字符的长度。

  • 编译器,而不是 IDE。不过,IDE 将仅对名称的前 511 个字符进行着色,并将其余字符保持为黑色。 (3认同)
  • IDE 可能会对行施加一些限制,但 C# 规范没有施加任何限制。 (2认同)