Java
У меня появился пет-проект, и самое главное — он не на Кложе, а на Джаве. Пишу уже две недели, и вот какие ощущения.
Современная Джава неожиданно хороша. Если взять последнюю версию 21, не цепляясь на бородатое легаси, то писать на ней довольно приятно. Скажем, везде вместо классов использовать рекорды — это неизменяемые классы, которые экономят код и несут клевые вещи из коробки.
Или использовать паттерн-матчинг по классам, например:
switch (msg) {
case BindComplete ignored:
break;
case AuthenticationOk ignored:
break;
case AuthenticationCleartextPassword ignored:
handleAuthenticationCleartextPassword();
break;
case ParameterStatus x:
handleParameterStatus(x);
break;
default:
throw new SomeException("no branch");
Когда-то давно это делалось паттерном Visitor (Посетитель). От одного упоминания на зубах скрипит песок. А теперь это несколько строчек. Современной Джаве нужно все меньше паттернов, потому что они нативо поддерживаются языком. Это происходит медленно, в год по чайной ложке, но в данном случае медлительность значит неотвратимость.
В 21 Джаве завезли виртуальные треды. С ними можно писать блокирующий код, а JDK сама определит, когда тред можно остановить и возобновить. Конечно, нужно знать детали процесса. Недавно я погонял виртуальные треды из Кложи, и прям очень приятно.
Хочется отметить Джавный тулинг. Идея Community Edition очень хороша. Все подхватывает, безошибочно подсказывает варианты в выпадашках. В Кложе такого нет и никогда не будет.
Да, в Джаве нет репла, но вот смотрите: я написал класс Main с запускалкой кода. Жму зеленую стрелку — все выполнилось. Если что-то упало, я ставлю дебаг на строку и жму кнопку с жуком. Исполнение прерывается на отметке, вижу локальное состояние, правлю код, запускаю. Прекрасно.
В Кложе, наоборот, нет встроенного отладчика вообще. Есть отладчик в emacs-cider, но он странный и работает через раз. Для себя я написал отладчик bogus, и он спасал меня раз двести, не меньше. Но моя поделка ничего не решает — ей пользуются три анонимуса, а остальные дебажат принтами или через tap.
Конечно, начинать проект на Джаве 21 — это утопия. Куда бы вы не пошли, вас будет ждать легаси, которому, дай бог, обновиться бы до Джавы 17. Там будут паттерны, частично инициированные POJO и прочие прелести. Но хобби на свежей Джаве — почему нет?
Джава развивается так быстро, что не успеваешь следить. В нее вливают горы
денег, а работают над ней одни из умнейших людей мира. Это
чувствуется. Например, в случае с виртуальными тредами пришлось пройти по всей
SDK и поправить все блокирующие вызовы. Колоссальная работа! Все, чтобы
программист поменял FixedPoolExecutor
на VirtualThreadExecutor
, и вжух —
полетело.
Не все принимают эту данность. Я знаю человека, который уверен, что Джава — это собственность Оракла (хорошо хоть не Sun), за нее нужно платить, она тормозная и ест много памяти. При этом на Джаве он писал 15 лет назад. Уютный мирок заблуждений приятней, чем реальность.
Сказанное не значит, что я записался в джависты. Просто у Джавы можно многому поучиться в плане развития. Взять на заметку.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
Alexey, 6th Dec 2023, link
+1. За развитием Java, внезапно, интересно и приятно наблюдать. Kotlin всё ещё сильно приятней (имхо), но теперь это не настолько чудовищная разница. Без легаси никуда, но коллекции и стрим-апи появились ещё, емнип, в 8-й джаве, а паттерн матчинг, кажись, в 16-17-й. Т.е. уже довольно давно можно писать куда более комфортно, чем в стереотипном представлении о типичной джаве. Иронично, что некоторые “новые” языки рождаются унылым императивным Г., а старая добрая Java принялась догонять Kotlin и C#.
Мопс, 7th Dec 2023, link
В Java 9, кстати, добавили REPL весьма неплохой для компилируемого языка - jshell.
ПерлухаБратуха, 12th Dec 2023, link
Какая еще “зеленая стрелочка”, Вано? Ты променял Имакс на Идею)?