Вопрос

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

Какие факторы также влияют на это:

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

Решение

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

Для Явы, раздел 3.8 спецификации состояния:

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

Другие советы

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

Имея 128 МБ, я смог создать класс (и метод) с 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;

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top