Máximo Método De Comprimento De Nome De
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?
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.