代码之家  ›  专栏  ›  技术社区  ›  Josh

最大方法名长度

  •  40
  • Josh  · 技术社区  · 16 年前

    有没有人知道您选择的编程语言中方法名的最大长度是多少?我本想把这个问题变成一个C#特定的问题,但我想如果能了解整个范围,那就太好了。

    • 语言规范对此有限制吗?
    • 编译器将其限制为什么?
      • 32位机器和64位机器上有什么不同吗?
    10 回复  |  直到 15 年前
        1
  •  37
  •   Jon Skeet    7 年前

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

    section 3.8 of the spec 国家:

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

        2
  •  20
  •   Greg    16 年前

    使用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;
    }
    
    ?>
    
        3
  •  18
  •   DLeh    11 年前

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

    int a123456789a123...;
    

    重复着。在512个字符处,VS给了我一个错误“标识符太长”。不过511还可以。(已选中Word中的字符计数。)

    另一个例子:

    int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;
    
        4
  •  13
  •   Kirill Osenkov    15 年前

        5
  •  5
  •   Doug Currie    16 年前

    公共Lisp符号的名称是字符串;字符串的长度限制为 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
  •  5
  •   shinji14    15 年前

    在C中,长度为511个字符。

        7
  •  2
  •   vince    13 年前

    正在进行(OpenEdge)限制为32个字符。

        8
  •  0
  •   BCS    16 年前

    在D中,我不知道会是这种情况,但我怀疑这是一种疯狂的行为,比如>100MB。这可能是一件记忆犹新的事情。这是因为我和其他人知道,对于符号名,对象文件格式的限制大约为11kB,并且这一限制已被修复。

        9
  •  0
  •   Bill    16 年前

    See this from the online Sun Java Tutorial :

    像上面的其他人一样,我猜长度取决于可用内存。