Коли Java була вперше розроблена, вважалося доцільним залишити анонімні функції. Я можу придумати дві причини (але вони можуть бути різними від офіційних):
- Java була розроблена як об'єктно-орієнтована мова без функцій, тому не дуже природно мати анонімні функції мовою без функцій. Або, принаймні, це дуже вплинуло б на дизайн мови.
- Анонімні функції не користувались популярністю у спільнотах програмістів, які Java мала залучати (C, C ++, Pascal?). Навіть зараз багато Java-програмістів, здається, вважають ці функції досить екзотичними (але це, мабуть, дуже швидко зміниться з Java 8).
У наступні роки, як пояснив Роберт Харві, політика Sun завжди повинна була підтримувати Java назад сумісною та дуже стабільною.
З іншого боку, з'явилися інші конкуруючі мови (найважливішим є C #, який народився як клон Java, а потім прийняв власний напрям розвитку).
Мови, які змагаються, піддавали Яві тиск з двох причин:
Виразна сила
Нові функції можуть полегшити запис певних ідіом програмування, зробивши мову привабливішою для програмістів. Зазвичай набір функцій, що надаються мовою, є компромісом між виразною силою, складністю мови, узгодженістю дизайну: додавання більшої кількості функцій робить мову більш виразною, але також більш складною і важкою для оволодіння.
Так чи інакше, за останні кілька років конкуренти Java додали багато нових функцій, яких у Java не було, і це можна вважати перевагою.
Хайп
Так, на жаль, це фактор вибору технології, принаймні з того, що я бачу в своєму щоденному досвіді як програміста: інструмент повинен мати певну особливість, навіть якщо більшість членів команди не знають, як ним користуватися і тим, хто міг би ним скористатися, він не потребує більшості випадків.
Хайп може бути ще важливішим для не технічних людей, таких як менеджери, які можуть бути тими, хто вирішує платформу для певного проекту. Менеджери іноді запам'ятовують лише деякі ключові слова, такі як лямбда, паралелізм, багатоядерність, функціональне програмування, хмарні обчислення, ... Якщо наша технологія вибору має зелену позначку на кожному пункті списку, ми готові до цього.
Тож IMO деякий час Java потрапила між ними
- оригінальна політика стабільності мови та простота дизайну, величезна база коду та спільнота розробників з одного боку, та
- тиск конкуруючих мов, який міг би залучити програмістів Java, спочатку C #, а потім Scala, Clojure, F # (я називаю тих, кого мені відомо, можуть бути й інші).
Врешті Oracle вирішив оновити Java, щоб зробити її більш конкурентоспроможною. На мою думку, нові функції стосуються особливо програмістів Java, які можуть спокусити перейти на C # і які бачать інші мови, такі як Scala та Clojure, як занадто різні від Java. З іншого боку, розробники, які мають певний досвід функціонального програмування і все ще хочуть використовувати JVM, ймовірно, вже перейшли на Scala, Clojure або іншу мову.
Таким чином, нові можливості Java 8 дозволять зробити Java більш потужною як мова, і декларований фокус є паралельним та паралельним програмуванням, але оновлення, схоже, стосується також маркетингових аспектів (Марк Райнхолд, головний архітектор Java в Oracle, сказав: "Деякі скажімо, додавання лямбдаських виразів полягає лише в тому, щоб не відставати від крутих дітей, і в цьому є деяка правда, але справжня причина - багатоядерні процесори; найкращий спосіб впоратися з ними - це за допомогою Lambda ", див. цю статтю ).
Так, так, багато (всі) функції Java 8 вже були добре відомі, але чому і коли функція додається до мови, залежить від багатьох факторів: цільової аудиторії, існуючої спільноти, існуючої кодової бази, конкурентів, маркетингу тощо.
EDIT
Коротка примітка щодо "... я читав про потоки в SIC (1996).": Ви маєте на увазі, що вам потрібні лямбди Java 8 для реалізації потоків? Насправді ви можете реалізувати їх, використовуючи анонімні внутрішні класи.