Вопросы с тегом «language-design»

Тег для вопросов, связанных с дизайном любого аспекта языков программирования.

2597
«Наименьшее удивление» и изменчивый аргумент по умолчанию

Любой, кто возился с Python достаточно долго, был укушен (или разорван на части) следующей проблемой: def foo(a=[]): a.append(5) return a Python послушники бы ожидать эта функция всегда возвращает список только с одним элементом: [5]. Результат вместо этого очень отличается, и очень удивительно...

374
Почему Java не поддерживает целые числа без знака?

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

346
Почему мы должны определять оба == и! = В C #?

Компилятор C # требует, чтобы всякий раз, когда пользовательский тип определял оператор ==, он также должен определять !=(см. Здесь ). Зачем? Мне любопытно узнать, почему дизайнеры сочли это необходимым и почему компилятор не может по умолчанию использовать разумную реализацию для одного из...

335
Почему «final» не допускается в интерфейсных методах Java 8?

Одной из наиболее полезных функций Java 8 являются новые defaultметоды интерфейсов. По сути, есть две причины (могут быть и другие), почему они были введены: Предоставление фактических реализаций по умолчанию. Пример:Iterator.remove() С учетом эволюции JDK API. Пример:Iterable.forEach() С точки...

271
Преимущества наследования прототипа перед классическим?

Так что все эти годы я, наконец, перестал тянуть ноги и решил «правильно» выучить JavaScript. Одним из самых головокружительных элементов дизайна языков является реализация наследования. Имея опыт работы с Ruby, я был очень рад видеть замыкания и динамическую типизацию; но за всю жизнь я не могу...

261
Что блокирует Ruby, Python для получения скорости Javascript V8? [закрыто]

Закрыто . Этот вопрос должен быть более сфокусированным . В настоящее время он не принимает ответы. Закрыто 5 лет назад . Locked . Этот вопрос и его ответы заблокированы, потому что вопрос не по теме, но имеет историческое значение. В настоящее время он не принимает новые ответы или...

252
Перегрузка функции по типу возврата?

Почему более распространенные статически типизированные языки не поддерживают перегрузку функций / методов по типу возвращаемого значения? Я не могу думать ни о чем, что делает. Это кажется не менее полезным или разумным, чем поддержка перегрузки по типу параметра. Почему это так менее...

248
Как работает ключевое слово «this» внутри функции?

Я только что натолкнулся на интересную ситуацию в JavaScript. У меня есть класс с методом, который определяет несколько объектов, используя объектно-буквенную нотацию. Внутри этих объектов thisуказатель используется. Из поведения программы я сделал вывод, что thisуказатель ссылается на класс, для...

241
Почему в Python нет функции знака?

Я не могу понять, почему у Python нет signфункции. Он имеет absвстроенную функцию (которую я считаю signсестрой), но нет sign. В Python 2.6 есть даже copysignфункция (по математике ), но без знака. Зачем писать, copysign(x,y)когда вы можете просто написать, signа затем получить...

186
Почему массив нельзя присвоить Iterable?

с Java5 мы можем написать: Foo[] foos = ... for (Foo foo : foos) или просто используя Iterable в цикле for. Это очень удобно. Однако вы не можете написать универсальный метод для повторяемого, как это: public void bar(Iterable<Foo> foos) { .. } и вызывая его с массивом, поскольку он не...

182
Почему я не могу иметь абстрактные статические методы в C #?

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

170
Что значит void в C, C ++ и C #?

Ищите основы того, откуда взялся термин « пустота », и почему он называется пустым. Цель этого вопроса - помочь кому-то, у кого нет опыта работы с C, и он вдруг смотрит на кодовую базу на основе...

169
Почему было утверждение (j ++); запрещено?

Следующий код неверен (см. Его на ideone ): public class Test { public static void Main() { int j = 5; (j++); // if we remove the "(" and ")" then this compiles fine. } } Ошибка CS0201: в качестве оператора могут использоваться только выражения присваивания, вызова, приращения, уменьшения, ожидания...

162
Когда кто-то пишет новый язык программирования, что они пишут на IN?

Пожалуйста, извините за мое невежество. Я зацикливаюсь на PHP и начинаю ходить по SO, и чувствую себя обязанным задать вопрос, который меня интересовал годами: Когда вы пишете совершенно новый язык программирования, на чем вы его пишете ? Это, наверное, звучит очень глупо для всех вас,...

160
Почему массивы ковариантны, а дженерики инвариантны?

От эффективной Явы Джошуа Блох, Массивы отличаются от универсального типа двумя важными способами. Первые массивы ковариантны. Обобщения являются инвариантами. Ковариант просто означает, что если X является подтипом Y, то X [] также будет подтипом Y []. Массивы являются ковариантными, так как...

153
Почему закрытые поля закрыты для типа, а не для экземпляра?

В C # (и многих других языках) совершенно законно обращаться к закрытым полям других экземпляров того же типа. Например: public class Foo { private bool aBool; public void DoBar(Foo anotherFoo) { if (anotherFoo.aBool) ... } } Как указано в спецификации C # (разделы 3.5.1, 3.5.2), доступ к закрытым...

152
Почему в Lua нет оператора continue?

Я много работал с Lua в последние несколько месяцев, и мне действительно нравится большинство функций, но я все еще упускаю кое-что из них: Почему нет continue? Какие есть обходные пути для этого?...

146
Почему Java не допускает общие подклассы Throwable?

Согласно спецификации языка Java , 3-е издание: Это ошибка времени компиляции, если универсальный класс является прямым или косвенным подклассом Throwable. Я хочу понять, почему это решение было принято. Что не так с общими исключениями? (Насколько я знаю, дженерики - это просто синтаксический...