Максимальная Длина Имени Метода

кто-нибудь знает, какова максимальная длина имени метода в вашем языке программирования? Я собирался сделать этот вопрос специфичным для C#, но я думаю, было бы неплохо узнать по всему спектру.

какие факторы также участвуют:

  • ограничивает ли это спецификация языка?
  • чем компилятор ограничивает его?
    • это отличается от 32bit против 64bit машины?

10 ответов


для C# я не верю, что есть указано жесткий лимит. (Например, раздел 2.4.2 спецификации C# 5 не дает предела.) Roslyn v2.2.0.61624, по-видимому, имеет предел 1024 символов; это выходит за рамки читаемости и даже разумного машинного имени.

Для Java, раздел 3.8 спецификации гласит:

идентификатор имеет неограниченную длину последовательность букв Java и Java цифры, первые из который должен быть Буква Java.


PHP, похоже, ограничен только ограничением памяти скрипта.

С 128Mb я смог создать класс (и метод) с 4 миллионами символов.

<?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 (1023 для VB) символов идентификатора и сохранять остальные черные.


в C# длина 511 символов.


имена символов 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
? 

этот ответ игнорирует имя пакета имени метода; это может удвоить длину.


в процессе (OpenEdge) ограничение составляет 32 символа.


В D Я не знаю, что это так, но я подозреваю, что это что-то безумное, как >100MB. Это может быть что-то из области памяти. Это основано на том, что я и другие люди столкнулись с ограничением формата объектного файла около 11 КБ для имен символов и что это было исправлено.


в Java я считаю, что ограничение длины не задано. см. это из онлайн-учебника Sun Java:

имена переменных чувствительны к регистру. Имя переменной может быть любым юридическим идентификатором-бесконечной последовательностью букв и цифр Юникода, начинающейся с буквы...

Как и другие выше, я предполагаю, что длина зависит от доступной памяти.


интересные! В Java, как говорили другие, нет предела (я никогда не думал о длине!) но я думаю, что вы хотите избежать длинного имени метода, поскольку это может повлиять на читаемость и даже ментальное отображение (любой другой разработчик, глядя на код, может забыть или захотеть забыть имя метода!).

Я считаю, что "код" в двух словах говорит об использовании описательных произносимых имен. Вы также можете утверждать, что длинное описательное имя лучше, чем короткое, я угадайте звуковой баланс. таково мое скромное мнение.