Комментарии 25
И, как и 30 лет назад, на Java работают 3 миллиарда устройств. Стабильность или стагнация?)
Но что важнее — Java не стоит на месте. Вместо того чтобы почивать на лаврах, она продолжает двигаться вперёд, сохраняя обратную совместимость и при этом внедряя передовые идеи, вдохновлённые другими языками и инженерными практиками.
Ох лучше бы стояла на месте. Шучу. Но на самом деле многое из того что пошло после 11 релиза вызывает недоумение. Виртуальные потоки это однозначный плюс, если не учитывать что больше чем 10 лет уже как в другие языках все это давно есть. Но вот чем чем была хорошая Java это компромиссом между сложностью, производительностью, удобством и скоростью обучения. Многие десятилетия они бережно выверяли каждую фичу и лозунг был что-то в духе - лучше не добавлять ничего чем добавить лишнее. И вот с появлением коротких релизных циклов язык начинают ломать об колено: давайте сделаем два разных синтаксиса для switch, давайте сделаем альтернативный синтаксис для классов и назовем record как в C#, давайте за пару релизов добавим кучу ключевых слов. Мне кажется сила Java было в минималистичности и простоте, сейчас пошел тренд на завоз сахара вагонами чтобы догонять модные языки все это в ущерб простоте. Стратегия не совсем понятная как как уже есть Kotlin и мне кажется не совсем правильная.
Ну, Java никогда не была ортогональным языком как Go, например. Всегда можно было делать что-то несколькими способами. По мне это не хорошо и неплохо, просто по такому пути развитие пошло. Это открывает возможности, но и может запутать.
Я не про ортогональность я про сильные стороны языков. К примеру если взять Kotlin то он однозначно уделывает Java по функциональности но как обратная сторона проигрывает в прозрачности работы, простоте и скорости обучения. У каждого свои козыри. Если Java гонится за модными языками то теряет свои преимущества, получается недокотлин и возникает вопрос зачем если уже написали полноценный.
Заморозить язык не получится. Таких прецедентов еще не видел )
Можно было бы тогда на Java 8 остановить развитие и идти отдыхать. И не получили бы всяких удобных фичей языка как в последних релизах.
У Вас странное представление о развитии языка как о непрерывном запихивании в него трендовых фич. В моем понимании развитие языка - это улучшение своих сильных сторон и исправление слабых. Сильная сторона Java - это обратная совместимость и хороший баланс между сложностью и функциональностью. Обратный пример - это C# который в несколько раз превосходит по функциональности но также и значительно проигрывает в сложности. Еще ближе пример с Kotlin, язык который сильно удобнее и функциональнее но сложнее и неочевидное вместе с тем. И всегда есть выбор - простота и очевидность или удобство. Go не даст соврать. Создатели выбрали киллер фичу простоты и антитренд, и как итог Go стал популярным и большое число джавистов уходят на язык которому по фичам и условному удобству до Java как до луны. У Java есть свой форматер где она успешна и сложно понять попытку плыть в сторону Kotlin где она будет аутсайдером.
Есть ли в Java что развивать и улучшать? Да конечно есть. Те же виртуальный потоки - большой достижение, хоть и с запозданием, но сделали и сделали согласно той же философии Java как раньше. Нужно ли улучшать стандартную библиотеку и инструменты? Конечно нужно. Нужно ли улучшать элементы языка? Конечно нужно. А как у нас там дела? 2025 года а позор в виде библиотеки Lombok без которой малоприятно пользоваться языком и поныне там, мы это будем игнорировать. Строковая интерполиция в 2025 как в Си? Ничего страшного, лет 10 подождите еще может завезем. Хотя нет, было же String.format() как в Си, прошло несколько десятилетий мы исправили на "".formatted(), что вам не нравится? Чего же действительно не хватает языку? Правильно, паттерн матчинга, который в реализации сложный но даже в языках в которых есть используется не сказать что повсеместно. Но окей. Рекорды они же дата классы? Ну окей, а как мы будем их делать, может быть доработать существующий синтаксис чтобы получилось лаконично и понятно? Нет, это слишком просто, лучше мы возьмем чужеродный синтаксис из Scala/Kotlin(для которых этот синтаксис естественный) и сделаем два альтернативных вида синтаксиса для классов, затем сделаем тоже самое для switch. Ах да, у нас же есть традиция называть методы доступа get/set а что если помимо альтернативного синтаксиса мы и здесь все поломает и сделаем геттер без get? Ну это для того чтобы нельзя было просто класс превратить в record и наоборот, чтобы по всему коду все вызовы пришлось бы рефакторить, там же разрабам точно удобнее будет. Ах да, еще неплохо было бы ввести рекорды как у всех но сделать из неизменяемыми и забить за возможность копирования при изменении как это сделано у всех. Большой спасибо конечно за такие фичи но нет.
У меня нет претензий что в Java какие то фичи вводят, у меня претензии что они с какого то момента начали занимается какой то дичью.
Ничто не мешает этим всем не пользоваться, старый синтаксис работает, даже бестипные коллекции на месте, хоть и ругаются при сборке.
Коллекции без дженериков - это уже перебор
Этот аргумент всегда высказывают в обсуждениях вида "язык ХХХ - переусложненное непонятное Г". И всегда на него отвечают, что так оно не работает. Если вы пишете маленький пет-проект то вы еще можете избежать всей сложности. Но как только вы приходите в проект большой, разрабатываемый разными командами, и еще и использующий миллион зависимостей - вам придется изучить все самые извращенные практики, неочевидные конструкции языка и сложные навороты. Потому что не вы так ваш коллега, а не коллега - так поставщик зависимости, будет их использовать в своем коде, и вам все равно придется в нем разбираться.
Виртуальные потоки это однозначный плюс, если не учитывать что больше чем 10 лет уже как в другие языках все это давно есть
И много языков где есть в таком же виде? Я сходу назову только го. Остальные языки в основном реализовали async/await как аналог
давайте сделаем два разных синтаксиса для switch
Которые прямо сильно упрощает код, для меня фича приятнее чем вирутальные потоки
альтернативный синтаксис для классов и назовем record как в C#
тут скорее в обратную сторону, рекорды, по крайней мере публично в джаве раньше появилсись. Правда из-за превью фич и лтс до прода по итогу в шарпах раньше пошли.
сейчас пошел тренд на завоз сахара
По мне как раз сахара и не завозят. пятилетку пилили виртруальные потоки, вальхалла пилится уже десятилетие, патерн матчинг, 2 новых GC и т.д - куча больших серъезных фич. При этом стринг темплейты выкинули, стандартная библиотека для джсона уже лет 10 висит в разработке, теперь вроде бы ждет вальхаллу, with для рекордов хотят когда-нибудь запилить, а без него они их полезность сильно падает, именованые параметры говорят наверное когда-нибудь, optional chaining вроде никто не против, но делать не собираются и т.д.
Яву критикуют много лет за многословие, а сахар вроде рекордов сильно уменьшает количество бойлерплейта. Любители DDD не дадут соврать.
На мой взгляд очень давно не хватает разделения на nullable / non-nullable типы на уровне байткода jvm (и его верификации), кажется это позволит JIT работать эффективнее и код будет более строгий.
Сейчас пытаются сделать value типы и видно, что возможность вернуть null там сильно мешает, всё равно придётся переделать.
Вот https://openjdk.org/jeps/8303099 ждём когда JEP этот додет до релиза )
NPE в топе ошибок, классика.
Насколько нынче идейно Java вообще чего-то стоит? Есть ведь языки с куда лучшей эргономикой. Да и JVM сейчас не очень выглядит на фоне WebAssembly.
Это уже философские вопросы пошли ) В java много идей, берите классические книжки смотрите, доки есть.
Сейчас java выбирают не из-за "эргономики". Ее выбирают потому что на Java есть фреймворки типа Spring Framework с развитой экосистемой, на которых на изи можно делать серьезные работающие проекты сила средне-рыночных разработчиков. Когда CRUD REST API на WebAssembly напишите можем обсудить )
Я с Java познакомился в 1998 году, ещё будучи студентом. Тогда версия 1.1 была. Написал апплет в качестве курсовой работы. На голом AWT, тогда ещё даже Swing не вышел :)
И до сих пор пишу. В последнее время в основном на Kotlin, но старушку Джаву не забываю, иногда в гости заглядываю :)
Сегодня — Java 30 лет: ретроспектива выдающейся экосистемы разработки