Естественно, лучше всего задавать этот вопрос кому-то из Исполнительного комитета JCP, а не нам. Однако это не помешает мне заняться пустыми спекуляциями.
Ответ на каждый вопрос «почему не была реализована эта функция» всегда заключается в том, что выгоды не превышают затрат.
Эрик Липперт (бывший член команды C #) говорит, что для того, чтобы продукт имел функцию, эта функция должна быть:
- мысль в первую очередь
- желательно
- предназначенный
- указанный
- реализованы
- проверенный
- документированный
- отправлено клиентам
Другими словами, должно быть много важных вещей, которые должны произойти, прежде чем любая новая функция языка программирования может быть реализована. Затраты больше, чем вы думаете.
В команде C # каждый новый запрос функции начинается с оценки минус 100. Затем команда оценивает выгоды и затраты, прибавляя баллы за выгоды и вычитая баллы за затраты. Если оценка не становится выше нуля, предложенная функция суммируется. Другими словами, новая функция должна обеспечивать убедительные преимущества.
Но Оператор Элвиса сделал это в C #. Так почему же он не превратился в Java?
Несмотря на их очевидное сходство, Java и C # имеют существенно различную философию языка. Об этом свидетельствует тот факт, что корпоративные программы на Java, как правило, представляют собой большие структурные коллекции архитектуры. Краткость и выразительность языка приносятся в жертву на алтаре церемонии и простоте кодирования. Хорошо известные шаблоны архитектуры программного обеспечения, которые могут распознавать все члены группы разработчиков, предпочтительнее языковых удобств.
Рассмотрим этот обмен Reddit :
Оператор Элвиса был предложен для каждой версии Java начиная с 7 и каждый раз отклонялся. Разные языки попадают в разные точки по всему спектру от «чистого» до «прагматического», и языки, реализующие оператор Элвиса, имеют тенденцию быть ближе к прагматическому концу спектра, чем Java.
Если у вас есть команда из более чем 15-летних Java-профессионалов, которые пишут высокораспределенную, высококонкурентную систему обработки бэкэнда какого-то рода, то вам, вероятно, нужна большая степень архитектурной строгости.
Однако, если у вас есть команда младшего или среднего звена, половина из которой мигрировала из Visual Basic, и у вас есть они, пишущие веб-приложение ASP.NET, которое в основном просто выполняет операции CRUD ... тогда, возможно, было бы излишним проектировать группу из AbstractFactoryFactory
классов абстрагироваться от того факта , что вы не имеете никакого контроля над которой столбцы обнуляемые в дерьмовом унаследованных базах данных, которую необходимо использовать.
Эти глубокие различия в философии языка распространяются не только на то, как используются языки, но и на сам процесс разработки языка. C # - доброжелательный диктаторский язык. Чтобы получить новую функцию в C #, вам действительно нужно убедить только одного человека: Андерса Хейлсберга .
Java использует более консервативный подход. Чтобы получить новую функцию в Java, она должна получить консенсус от консорциума крупных поставщиков, таких как Oracle, IBM, HP, Fujitsu & Red Hat. Очевидно, что этот процесс будет медленнее и станет более высокой планкой для новых языковых функций.
Вопрос «почему не реализована функция x ...» всегда неявно включает слова «... если это, очевидно, такая хорошая идея?» Как я уже продемонстрировал здесь, выбор никогда не бывает таким простым.