Pergunta

Alguém por acaso sabe que o comprimento máximo do nome de um método em sua linguagem de programação de sua escolha?Eu ia fazer isso C# pergunta específica, mas eu acho que seria bom saber que em todo o espectro.

Quais são os fatores envolvidos, bem como:

  • A linguagem de especificação limite isso?
  • O que faz o limite do compilador que?
    • Ele é diferente em 32 bits vs 64bit máquinas?
Foi útil?

Solução

Para C#, não acredito que haja um Especificadas Limite rígido. (Seção 2.4.2 da especificação C# 5 não fornece um limite, por exemplo.) Roslyn v2.2.0.61624 parece ter um limite de 1024 caracteres; Isso está muito além dos limites da legibilidade e até de um nome sensato gerado por máquina.

Para Java, Seção 3.8 da especificação estados:

Um identificador é uma sequência ilimitada de letras java e dígitos Java, o primeiro dos quais deve ser uma letra Java.

Outras dicas

O PHP parece ser limitado apenas pelo limite de memória do script.

Com 128 MB, pude criar uma classe (e método) com 4 milhões de caracteres.

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

?>

Acabei de fazer um teste no C# Visual Studio 2010 (x64): fiz um identificador:

int a123456789a123...;

E repetido. Com 512 caracteres, o VS me dá o erro "Identificador por muito tempo". 511 está bem. (Contagem de caracteres verificada na palavra.)

Outro exemplo:

int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;

A implementação C# da Microsoft é 511, a implementação do VB.NET é 1023.

O Visual Studio apenas colorizará os primeiros 511 (1023 para VB) do identificador e manterá o resto preto.

Em C# tem 511 caracteres de comprimento.

Os nomes comuns dos símbolos Lisp são strings; Strings têm um limite de comprimento de array-dimension-limit

O valor de array-dimension-limit é um número inteiro positivo que é o limite exclusivo superior em cada dimensão individual de uma matriz. Esse limite depende da implementação, mas não será menor que 1024. (Os implementadores são incentivados a tornar esse limite tão grande quanto possível sem sacrificar o desempenho.)

Na prática, isso pode ser bastante grande

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
? 

Esta resposta ignora o nome do pacote do nome do método; Isso pode dobrar o lengh.

Em andamento (OpenEdge), o limite é 32 char.

Em Di, não sei se esse é o caso, mas suspeito que seja algo insano como> 100 MB. Pode ser uma coisa fora da memória. Isso se baseia em saber que eu e outras pessoas encontramos a limitação de formato de arquivo de objeto de cerca de 11kb para nomes de símbolos e que isso foi corrigido.

Em Java, eu acredito que um comprimento limite não é dado. Ver isto a partir do on Sun Java Tutorial:

Nomes de variáveis são sensíveis a maiúsculas e minúsculas.O nome de uma variável pode ser qualquer legais identificador — ilimitado-comprimento da seqüência de Unicode letras e dígitos, começando com uma letra...

Como os outros acima, eu acho que o comprimento depende da memória disponível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top