選択したプログラミング言語でのメソッド名の最大長を知っている人はいますか?これをC#固有の質問にするつもりでしたが、スペクトル全体で知っておくとよいと思います。
同様に関係する要因は何ですか:
- 言語仕様はこれを制限していますか?
- コンパイラはそれを何に制限しますか?
- 32ビットマシンと64ビットマシンでは違いがありますか?
選択したプログラミング言語でのメソッド名の最大長を知っている人はいますか?これをC#固有の質問にするつもりでしたが、スペクトル全体で知っておくとよいと思います。
同様に関係する要因は何ですか:
C# については、ハード リミットが指定されているとは思えません。(たとえば、C# 5 仕様のセクション 2.4.2 には制限がありません。) Roslyn v2.2.0.61624 には 1024 文字の制限があるようです。これは可読性の限界をはるかに超えており、マシンが生成した賢明な名前ですらありません。
Javaの場合、仕様のセクション 3.8 には次のように記載されています。
識別子は、Java 文字と Java 数字の無制限の長さのシーケンスであり、最初の文字は Java 文字でなければなりません。
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;
}
?>
C# Visual Studio 2010 (x64) でテストを行いました: 識別子を作成しました:
int a123456789a123...;
と繰り返した。512 文字で、VS から「識別子が長すぎます」というエラーが表示されます。511でも大丈夫です。(Wordで文字数を確認しました。)
もう一つの例:
int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;
MicrosoftのC#実装は511、VB.NET実装は1023です。
Visual Studioは、識別子の最初の511文字(VBの場合は1023文字)のみを色付けし、残りは黒のままにします。
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
?
この回答では、メソッド名のパッケージ名は無視されます。これにより、長さが2倍になる可能性があります。
進行中 (OpenEdge) の制限は 32 文字です。
Java では、長さの制限はないと思います。 オンラインの Sun Java チュートリアルからこれを参照してください。
変数名は大文字と小文字が区別されます。変数の名前は、任意の正当な識別子にすることができます — 文字で始まる Unicode 文字と数字の無制限の長さのシーケンス...
上記の他のものと同様に、長さは使用可能なメモリに依存すると思います。
DI では、これが事実であるかどうかはわかりませんが、100MB を超えるような非常識なものであると思われます。メモリ不足の可能性があります。これは、私や他の人々が、シンボル名のオブジェクト ファイル形式の制限が約 11kB に達し、これが修正されたことを知っていることに基づいています。