Максимальная длина имени метода - PullRequest
41 голосов
/ 09 января 2009

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

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

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

Ответы [ 9 ]

33 голосов
/ 09 января 2009

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

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

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

20 голосов
/ 09 января 2009

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

?>
17 голосов
/ 28 марта 2011

Я только что провел тест в C # Visual Studio 2010 (x64): сделал идентификатор:

int a123456789a123...;

И повторяется. VS на 512 символов выдает ошибку «Идентификатор слишком длинный». 511 хорошо, хотя. (Проверено количество символов в Word.)

Другой пример:

int whyintheworldwouldyoueverhaveanidenfifierthislongitsreallyjustquiteridiculousimeancmonyoucouldatleasthavethecommoncourtesyofmakingitcamelcasesoitsnotsohardtoreadcmonjuststopnowyourereallyreachingtomakethisaslongaspossiblearentyou123412341234alrightwellthatsenoughnowisntitwelliguessnotbecauseimstillgoingthisisofficallytheworstidentifiereverಠ_ಠokaynowthatithasunicodeitsofficialbutseriouslythisthingissolongthatihadtogetupinthemiddleofittotakeabreakbeforesittingdowntofinishtoppingitofftothemaxcharlimitof___511;
12 голосов
/ 16 апреля 2010

Microsoft C # реализация 511, VB.NET реализация 1023.

Visual Studio раскрасит только первые 511 (1023 для VB) символов идентификатора и оставит остальные черными.

4 голосов
/ 19 ноября 2009

в C # имеет длину 511 символов.

3 голосов
/ 09 января 2009

Имена общих символов 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 голосов
/ 28 марта 2012

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

0 голосов
/ 30 января 2009

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

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

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

0 голосов
/ 09 января 2009

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

...