Звичайно, найкраща людина, яка задає це питання, - це хтось із Виконкому JCP, а не ми. Однак це не завадить мені зайнятися деякими простоюючими спекуляціями.
Відповідь на кожне питання "чому ця функція не була реалізована" завжди є тому, що переваги не перевищували витрат.
Ерік Ліпперт (колишній член команди C #) каже, що для того, щоб продукт мав особливість, ця функція повинна бути:
- думка в першу чергу
- бажаний
- розроблений
- вказано
- здійснено
- перевірений
- задокументовано
- відправляється клієнтам
Іншими словами, має бути багато важливих речей, які повинні відбутися до того, як будь-яка нова функція мови програмування може бути реалізована. Витрати більші, ніж ви думаєте.
У команді C # кожен новий запит на функцію починається з оцінки мінус 100. Потім команда оцінює переваги та витрати, додаючи бали за переваги та віднімаючи бали за витрати. Якщо оцінка не перевищує нуля, запропонована функція стисло відкидається. Іншими словами, нова функція повинна забезпечити переконливу перевагу.
Але Оператор Елвіса перетворив його на C #. То чому він не перетворився на Java?
Незважаючи на свою очевидну схожість, Java та C # мають суттєво різні філософії мови. Про це свідчить той факт, що корпоративні програми Java, як правило, представляють собою великі, структурні колекції архітектури. Стислість та мовна виразність приносяться в жертву на вівтарі церемонії та легкості кодування. Відомі програмні схеми архітектури, які кожен із колективу розробників може розпізнати, надають перевагу над мовними зручностями.
Розглянемо цей обмін Reddit :
Оператор Elvis пропонується для кожної версії Java починаючи з 7 і відхиляється кожного разу. Різні мови потрапляють на різні точки спектру від "чистого" до "прагматичного", а мови, що реалізують оператор Елвіса, як правило, знаходяться далі до прагматичного кінця спектру, ніж Java.
Якщо у вас є команда з 15-річних спеціалістів Java, яка пише дуже розповсюджену, дуже одночасну систему обробки резервних копій, то, напевно, ви хочете отримати велику ступінь архітектурної суворості.
Однак якщо у вас є команда молодшого та середнього рівня, половина з яких перейшла з Visual Basic, і ви їх пишете веб-програмою ASP.NET, яка здебільшого просто виконує операції з CRUD ... з AbstractFactoryFactory
класів абстрагуватися від того факту , що ви не маєте ніякого контролю над якої стовпці обнуляє в дерьмовое успадкованих базах даних, які потрібно використовувати.
Ці глибокі відмінності в мовній філософії поширюються не лише на те, як мови використовуються, але і на спосіб самого дизайну мови. C # - доброзичлива мова диктатора . Щоб отримати нову функцію в C #, вам дійсно потрібно переконати одну людину: Андерса Хейльсберга .
Java застосовує більш консервативний підхід. Щоб отримати нову функцію в Java, вона повинна отримати консенсус від консорціуму великих постачальників, таких як Oracle, IBM, HP, Fujitsu & Red Hat. Очевидно, що цей процес буде протікати повільніше і представлятиме більш високу планку для нових мовних особливостей.
Питання "чому не було реалізовано х функцію ..." завжди неявно включає слова, "... якщо це, очевидно, така гарна ідея?" Як я тут адекватно продемонстрував, вибір ніколи не є таким простим.