language-design- все статьи тега


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

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

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

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

Почему в Haskell есть "data" и "newtype"? [дубликат]

этот вопрос уже есть ответ здесь: разница между 'data' и 'newtype' в Haskell 1 ответ кажется, что a newtype определение-это просто data определение, которое подчиняется некоторым ограничениям (например, только один конструктор), и что из-за этих ограничений система выполнения может справиться newtypes более эффективно. И обработка сопоставления шаблонов для неопределенных значений немного отличается. н ...

Почему массивы ковариантны, а обобщения инвариантны?

от эффективного Java Джошуа Блоха, массивы отличаются от универсального типа двумя важными способами. Первые массивы являются ковариантными. Дженерики являются инвариантными. Ковариант просто означает, что если X является подтипом Y, то X[] также будет подтипом Y[]. Массивы ковариантны, так как строка является подтипом объекта So String[] is subtype of Object[] инвариант просто означает, независимо от того, является ли X подтипом Y или нет , List<X> will not be subType of List<Y& ...

Почему имена переменных не могут начинаться с чисел?

Я работал с новым разработчиком c++ некоторое время назад, когда он задал вопрос: "Почему имена переменных начинаются с цифры?" Я не мог придумать ответ, за исключением того, что некоторые числа могут иметь текст в них (123456L, 123456U), и это было бы невозможно, если бы компиляторы думали, что все с некоторым количеством Альфа-символов было именем переменной. это правильный ответ? Есть еще какие-то причины? string 2BeOrNot2Be = "that is the question"; // Why won't this compile? ...

Почему не переменные, объявленные в "попробовать" сфера применения "поймать" или "наконец"?

в C# и Java (и, возможно, других языках) переменные, объявленные в блоке "try", не находятся в области действия в соответствующих блоках "catch" или "finally". Например, следующий код не компилируется: try { String s = "test"; // (more code...) } catch { Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead } в этом коде ошибка времени компиляции возникает при ссылке на s в блоке catch, потому что s находится только в области действия в блоке try. (В Java оши ...

Почему оператор string switch не поддерживает нулевой случай?

мне просто интересно, почему Java 7 switch оператор не поддерживает a null дело и вместо этого бросает NullPointerException? См. комментируемую строку ниже (пример взят из статья Java Tutorials о switch): { String month = null; switch (month) { case "january": monthNumber = 1; break; case "february": monthNumber = 2; break; case "march": monthNumber = 3; break; //case null: de ...

Почему множественное наследование не допускается в Java или C#?

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

Факторы в R: больше, чем раздражение?

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

Почему встроенные функции C++ в заголовке?

NB это не вопрос о том, как использовать встроенные функции и как они работают, почему они сделали так, как они. объявление функции-члена класса не нужно определять функцию как inline, это только фактическая реализация функции. Например, в заголовочном файле: struct foo{ void bar(); // no need to define this as inline } так почему же встроенная реализация класса function есть чтобы быть в заголовочном файле? Почему я не могу поставить встроенную функцию ? Если я где попробовать поставит ...

Каковы точки строгости Хаскелла?

мы все знаем (или должны знать), что Haskell ленив по умолчанию. Ничто не оценивается, пока оно не должно быть оценено. Так когда же нужно что-то оценивать? Есть моменты, где Хаскелл должен быть строгим. Я называю это "точками строгости", хотя этот конкретный термин не так широко распространен, как я думал. По моим словам: сокращение (или оценка) в Haskell только происходит в точках строгости. Итак, вопрос: что, точно, являются ли точки строгости Хаскелла? моя интуиция говорит, что main,se ...

Почему параметры const не разрешены в C#?

Это выглядит странно, особенно для разработчиков C++. В C++ мы использовали для обозначения параметра как const для того чтобы быть уверенным, что его состояние не будет изменено в методе. Есть и другие конкретные причины C++, такие как передача const ref для того, чтобы пройти мимо ref и быть уверенным, что состояние не будет изменено. Но почему мы не можем отметить как параметры метода const в C#? почему я не могу объявить свой метод следующим образом? .... static void TestMethod1(co ...

Почему Java имеет ошибку компилятора "недостижимый оператор"?

Я часто нахожу, что при отладке программы удобно (хотя, возможно, плохая практика) вставлять оператор return внутри блока кода. Я мог бы попробовать что-то подобное в Java .... class Test { public static void main(String args[]) { System.out.println("hello world"); return; System.out.println("i think this line might cause a problem"); } } конечно, это приведет к ошибке компилятора. ...

Почему Ruby имеет TrueClass и FalseClass вместо одного логического класса?

Я работал над сериализацией значений, когда узнал об этом. У Руби есть TrueClass класс, а FalseClass класс, но у него нет Boolean класса. Я хотел бы знать, почему это. Я вижу некоторые преимущества в использовании Boolean; например, разбор строк может быть централизован на нем. разработчики Ruby умнее меня, поэтому должно быть много веских причин, которые я просто не вижу. Но сейчас мне кажется, что у меня есть OneClass и TwoClass вместо Fixnum. ...

Python: в чем разница между builtin и builtins?

Я кодировал сегодня и заметил кое-что. Если я открою новый сеанс интерпретатора (IDLE) и проверю, что определено с помощью ...

Почему не поддерживаются методы расширения статического класса C#?

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

Производительность" прямого " виртуального вызова по сравнению с вызовом интерфейса в C#

этот тест показывает, что вызов виртуального метода непосредственно по ссылке на объект выполняется быстрее, чем вызов его по ссылке на интерфейс, реализуемый этим объектом. другими словами: interface IFoo { void Bar(); } class Foo : IFoo { public virtual void Bar() {} } void Benchmark() { Foo f = new Foo(); IFoo f2 = f; f.Bar(); // This is faster. f2.Bar(); } исходя из мира C++, я ожидал бы, что оба этих вызова будут реализованы одинаково (как простой поиск вир ...