Описание тега language-design

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

Ошибка компилятора в зависимости от положения параметра в сигнатуре метода. Использование неназначенной локальной переменной

Допустим, у меня есть этот класс: class Boo { public override string ToString() { return "I am Boo!"; } } И эти методы: static int Foo(out Boo boo) { boo = new Boo(); return 1; } static void Lol(Boo boo, int n) { Console.WriteLine(n); Console.WriteL…
2 ответа

Как получить класс объекта-одиночки во время компиляции?

Рассмотрим что-то вроде этого: object Singleton val cls: Class[Singleton] = ??? Что я должен написать вместо ???? Я старался classOf[Singleton], classOf[Singleton.type], Singleton.type, но ничего не получалось. (Я знаю конечно о getClassДоделанная в…
3 ответа

Почему неявный конструктор копирования вызывает конструктор копирования базового класса, а определенный конструктор копирования - нет?

Рассмотрим иерархию классов, где A это базовый класс и B происходит от A, Если конструктор копирования не определен в B, компилятор будет синтезировать один. При вызове этот конструктор копирования вызовет конструктор копирования базового класса (да…
07 фев '12 в 14:42
2 ответа

Является ли клонирование кода обычной практикой в ​​C,Java и Python?

Клоны кода, также известные как дублирующий код, часто считаются вредными для качества системы. Мне интересно, можно ли увидеть этот дублированный код в стандартных API или других зрелых инструментах. Если это действительно так, то какой язык (напри…
4 ответа

Какое общее название для объявления, определения, выражения и заявления?

Если установленное имя не существует, какое имя вы можете предложить?
5 ответов

Почему / разрешил C неявные объявления функций и переменных без типов?

Почему для языка имеет смысл разрешать неявные объявления функций и переменных без типов? Я получаю, что C старый, но позволяет пропустить объявления и по умолчанию int() (или же int в случае переменных) мне не кажется таким вменяемым даже тогда. Ит…
1 ответ

Имеет ли смысл "тратить" 8 байтов на экземпляр String для смещения / подсчета?

Строки в Java поддерживают структурное совместное использование для некоторых методов, таких как substringЭто означает, что предположительно неизменяемые данные не нужно копировать (что (неожиданно) поддерживает большие массивы символов, которые в п…
4 ответа

Какие уроки можно извлечь из прототипа модели в javascript?

Вопрос с точки зрения языкового дизайна. Я должен немного объяснить ситуацию. Я работаю над вариантом javascript, который не поддерживает прототипы, однако это устаревшая система типов (наиболее важна поддержка instanceof). Спецификация ecmascript н…
09 мар '09 в 03:30
1 ответ

Есть ли язык, который позволяет манипулировать примитивами?

В большинстве случаев языки не позволяют манипулировать ссылками на примитивы. Например.: var a = 0; var b = a; // value is copied b++; // b now represents a new value as this is really b = b + 1; so a != b Хотя манипулирование не примитивами вызове…
15 июн '11 в 16:43
15 ответов

C, C++, Java, что дальше и как это будет выглядеть?

Как вы думаете, как будет выглядеть следующая эволюция языков?
02 окт '08 в 14:50
3 ответа

Зачем использовать фигурные скобки над скобками?

Во многих примерах Scala я вижу, что люди используют фигурные скобки в местах, которые я нахожу совершенно странными, когда одно и то же утверждение можно легко написать с помощью скобок. Пример: lst foreach (x => println(s"the value returned is:…
03 июл '14 в 12:22
2 ответа

Как выглядит вывод C++ PHP-компилятора HipHop?

Достаточно ли чисто, чтобы вы могли отказаться от PHP и оптимизировать вручную код C++?
3 ответа

Хэш-значения Python2 плохо распределены

При использовании встроенного Python hash() Функция на струнах, я просто играл с ней, когда заметил что-то странное. Обычно нормальная хеш-функция должна быть некоррелированной в том смысле, что из hash(A), hash(B) должно быть полностью неузнаваемым…
21 июн '17 в 19:28
4 ответа

В чем разница между классом и типом в Scala (и Java)?

Scala Где в Scala можно наблюдать различия между классом и типом и почему это различие важно? Является ли это только соображением с точки зрения языкового дизайна или имеет "практическое" влияние при программировании на Scala? Или это фундаментально…
17 фев '11 в 16:25
3 ответа

How to make a Side-by-Side Compiler for .NET

Сценарий Никхила Котари #, возможно, является одной из самых удивительных концепций, которые я видел на арене JavaScript в течение достаточно долгого времени. Этот вопрос не о JavaScript, а о компиляции языка во время выполнения.NET. Меня довольно …
16 сен '08 в 18:10
2 ответа

Почему C++11 определяет несуществующее значение как значение по умолчанию?

Ниже приводится выдержка из ссылки 1 cppreference и ссылки 2 cppreference: enum codecvt_mode { consume_header = 4, generate_header = 2, little_endian = 1 }; template < class Elem, unsigned long Maxcode = 0x10ffff, std::codecvt_mode Mode = (std::c…
2 ответа

Почему методы доступа const в std::string возвращают ссылку?

std::string аксессоры (back, front, at, а также operator[]) иметь const и не const перегрузки, как показано ниже: char& x(); const char& x() const; Почему вторая версия возвращает const ссылка, в отличие от простого возврата char по значению…
13 июн '15 в 16:00
2 ответа

Почему в std.parallel нет 'forall'?

Я перебираю новую библиотеку std.parallel. Я не являюсь разработчиком языка или библиотеки, так что прости мое невежество, но разве не было бы полезно, если бы forall утверждение на языке или хотя бы в std.parallel? Например, вместо этого: auto logs…
27 июн '11 в 00:13
6 ответов

Мог ли C++ не избавиться от идиомы pimpl?

Как я понимаю, pimpl идиома существует только потому, что C++ заставляет вас помещать все закрытые члены класса в заголовок. Если бы заголовок содержал только открытый интерфейс, теоретически, любое изменение в реализации класса не требовало бы пере…
5 ответов

Почему шаблон функции не может быть частично специализированным?

Я знаю, что спецификация языка запрещает частичную специализацию шаблона функции. Я хотел бы знать обоснование, почему оно запрещает это? Они не полезны? template<typename T, typename U> void f() {} //allowed! template<> void f<int, c…