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

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

161
Являются ли нулевые ссылки действительно плохой вещью?

Я слышал, что включение нулевых ссылок в языки программирования является «ошибкой в ​​миллиард долларов». Но почему? Конечно, они могут вызывать NullReferenceExceptions, но что с того? Любой элемент языка может быть источником ошибок при неправильном использовании. И какая альтернатива? Я полагаю,...

118
Почему большинство языков программирования поддерживают возврат только одного значения из функции? [закрыто]

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

115
Почему 0 ложно?

Этот вопрос может показаться глупым, но почему 0оценки falseи любое другое [целочисленное] значение для trueбольшинства языков программирования составляют? Сравнение строк Поскольку вопрос кажется немного слишком простым, я объясню немного подробнее: во-первых, это может показаться очевидным любому...

105
Почему именно XML называют «языком»?

Мне было интересно, почему в названии XML есть буква L. Сам по себе XML ничего не «делает». Это просто формат хранения данных, а не язык! Языки "делают" вещи. Чтобы заставить XML «делать» что-то, превращать его в язык, нужно добавить xmlnsатрибуты к его корневому элементу. Только тогда он сообщает...

99
Мне сказали, что исключения должны использоваться только в исключительных случаях. Как я узнаю, является ли мой случай исключительным?

Мой конкретный случай здесь заключается в том, что пользователь может передать строку в приложение, приложение анализирует ее и назначает ее структурированным объектам. Иногда пользователь может ввести что-то недопустимое. Например, их вклад может описать человека, но они могут сказать, что их...

88
Какие функции вы хотели бы иметь в PHP? [закрыто]

Так как сейчас сезон отпусков и все загадывают желания, мне интересно, какие языковые функции вы бы хотели добавить в PHP? Я заинтересован в некоторых практических предложениях / пожеланиях для языка. Под практическим я подразумеваю: Что-то, что можно сделать практически (не: «Я бы хотел, чтобы PHP...

82
Разработчики Java сознательно отказались от RAII?

Как давний программист на C #, я недавно узнал больше о преимуществах Resource Acquisition Is Initialization (RAII). В частности, я обнаружил, что идиома C #: using (var dbConn = new DbConnection(connStr)) { // do stuff with dbConn } имеет эквивалент C ++: { DbConnection dbConn(connStr); // do...

82
Если ноль плох, почему современные языки реализуют его? [закрыто]

Я уверен, что разработчики языков, таких как Java или C #, знали проблемы, связанные с существованием нулевых ссылок (см. Действительно ли нулевые ссылки - это плохо? ). Также реализация типа параметра не намного сложнее, чем нулевые ссылки. Почему они решили включить его в любом случае? Я уверен,...

81
Должен ли я использовать генератор синтаксического анализатора или я должен свернуть свой собственный код лексера и анализатора?

Какие конкретные преимущества и недостатки каждого способа работы над грамматикой языка программирования? Почему / Когда я должен катиться самостоятельно? Почему / Когда я должен использовать...

78
Почему String неизменяем в Java?

Я не мог понять причину этого. Я всегда использую класс String, как и другие разработчики, но когда я изменяю его значение, создается новый экземпляр String. В чем может быть причина неизменности класса String в Java? Я знаю, что есть некоторые альтернативы, такие как StringBuffer или...

76
Почему арифметическое переполнение игнорируется?

Вы когда-нибудь пытались суммировать все числа от 1 до 2 000 000 на вашем любимом языке программирования? Результат легко вычислить вручную: 2 000 001 000 000, что примерно в 900 раз превышает максимальное значение 32-разрядного целого числа без знака. C # распечатывает -1453759936- отрицательное...

72
Зачем использовать частичные классы?

В моем понимании partialключевое слово делает только то, что позволяет разделить класс между несколькими исходными файлами. Есть ли причина для этого, кроме как для организации кода? Я видел, как это используется в сгенерированных классах пользовательского интерфейса. Кажется, плохая причина для...

67
Как некоторые языковые сообщества (например, Ruby и Python) смогли предотвратить фрагментацию, в то время как другие (например, Lisp или ML) не смогли этого сделать?

Термин «Лисп» (или «Лисп-подобный») является зонтиком для множества разных языков, таких как Common Lisp, Scheme и Arc. В других языковых сообществах, как и в ML, наблюдается аналогичная фрагментация Тем не менее, и Ruby, и Python сумели избежать этой участи, когда инновации происходили чаще в...

65
Синтаксический дизайн. Зачем использовать круглые скобки, если аргументы не передаются?

Во многих языках синтаксис function_name(arg1, arg2, ...)используется для вызова функции. Когда мы хотим вызвать функцию без каких-либо аргументов, мы должны это сделать function_name(). Я нахожу странным, что компилятор или интерпретатор сценариев потребовал ()бы успешного обнаружения его как...

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

Может ли кто-нибудь объяснить обоснование, почему в группе самых популярных языков (см. Примечание ниже) операторы сравнения (==,! =, <,>, <=,> =) Имеют более высокий приоритет, чем побитовые операторы (&, |, ^ ~) Я не думаю, что я когда-либо сталкивался с использованием, где этот...

61
Почему C # был создан с ключевыми словами «new» и «virtual + override» в отличие от Java?

В Java есть нет virtual, new, overrideключевые слова для определения метода. Таким образом, работа метода легко понять. Потому что, если DerivedClass расширяет BaseClass и имеет метод с таким же именем и тем же подписью BaseClass тогда наиважнейшим будет проходить время выполнения полиморфизма (...

60
Почему языки не включают импликацию как логический оператор?

Это может быть странный вопрос, но почему во многих языках нет смысла в качестве логического оператора (Java, C, C ++, Python Haskell - хотя, как и в прошлом, пользовательские операторы добавили его тривиально, чтобы добавить его)? Я считаю, что логическое значение гораздо яснее писать (особенно в...

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

Почему почти во всех современных языках программирования (Go, Rust, Kotlin, Swift, Scala, Nim, даже последняя версия Python) типы всегда идут после имени переменной в объявлении переменной, а не раньше? Почему x: int = 42и нет int x = 42? Разве последнее не более читабельно, чем первое? Это просто...

53
Почему void не разрешен как универсальный тип в C #

Каковы были дизайнерские решения, которые приводили доводы в пользу того, что они voidне конструируемы и не допускаются в качестве универсального типа? В конце концов, это просто специальная пустая ячейка, structкоторая позволила бы избежать общего PITA, состоящего из отдельных участников Funcи...