Не только, там симпатичная тема, в сравнении с swing в ней выше плотность текста и элементов т.е. она выглядит компактнее. А также под Linux у них использовалась патченая версия JRE где был исправлен рендер шрифтов.
Я их JRE использовал и для другого Java приложения чтоб и в нем видеть красивые шрифты.
C# сейчас вообще никому не нужен. Только на десктопном винде он ещё держится. В серверной области его позиции так и остались никакими. За последние 10 лет винда на сервере совсем сдала Линуксу. Поэтому майкрософт и выпустили .net core, чтобы хоть как то по минимуму на сервере закрепиться. Я не думаю, что у них это получается. Я не разу не видел, чтобы кто-то серьезно использовал .net core.
И чисто по наблюдениям со стороны, в Java и в JVM в последние годы больше движухи видно. Значит Java больше востребована. В C#/.NET майкрософт что-то делает, новые версии и т.д., но всем пофиг, они варятся в собственной кострюле.
Она так и не вошла в стандартные, только как левая зависимость, просто изначально разрабатывалась в недрах Sun.
Почему не вошла? Она ведь точно была в составе Oracle JDK и Oracle JRE, в Java 7 можно было использовать JavaFX из коробки, как AWT/Swing, просто установив среду исполнения.
Про OpenJDK правда уже не помню что там было. Но из Java 8 или Java 9 этот JavaFX вычленили в отдельный пакет, где он благополучно протух и помер.
AWT и Swing это стандартные GUI
Ну да, я и говорю – у Java хорошая «стандартная библиотека» богатая различными возможностями, в. т. ч и по созданию GUI. Бери и пиши. И кстати с отличной Backward-совместимостью. Недавно требовалось достаточно сложное GUI-приложение написанное в 2002 году запустить на современной Java – оно запустилось и нормально работало. В Linux с каким-нибудь приложением 2002 года на Qt2 такое возможно только с пердолингом и компилянием.
Есть тема для Swing под названием FlatLaf, она сделана подобно Idea.
Я его кстати упоминал выше. Очень приятная библиотека, которая одной строчкой смывает всю неказистость Swing’а. Кстати NetBeans тоже эту либку стал юзать, а это уже серьёзно.
Плюс стоит упомянуть еще SWT который используют Eclipse и DBeaver, но это чисто сторонний UI тулкит. JavaFX сейчас тоже какой-то левой компанией поддерживается и они берут деньги за LTS версию.
Да мне это можешь не рассказывать, я приложения с SWT на AWT/Swing много раз переносил. DBeaver, кстати, насколько я помню тоже Eclipse-based? Как и STS, например: https://spring.io/tools А ещё вроде как Arduino Studio и куча всяких разных IDE для Embedded.
SWT мне никогда не нравился, потому что он на корню херит «Write once, run anywhere», да и под Linux’ом были извечные глюки с ним и версиями GTK+, а в KDE так вообще Eclipse был неюзабельный некоторое время во многих местах, например, всплывающие Pop-up’ы на которых нельзя было разглядеть текст из-за цвета совпадающего с подложкой и др. глитчи. Надеюсь оно сейчас более юзабельно.
Да жабуФХ выкинули. А при всём удобсте свинга, он спокойно может существовать отдельно. Это не что-то критически важное, а вот какой-нибудь вебсервер, который из коробки был бы удобным, a не это убожество, не помешал бы.
Стандартная библиотека с огромным количеством всего что может понадобиться для разработки.
У шарпа не хуже
Батареек на каждый чих в репозитории больше чем у .NET
Спорно, у шарпа в windows не хуже
Нормальная кросс-платформенность из коробки, а не убогая MS-style «кросс-платформенность», когда, например, GUI только под Windows.
Да, но помним о том, что у шарпа в винде нативное GUI, а у Java везде своё, марсианское, кроме андроида, где другого то и нет
Высокий уровень з/п, наверное самый высокий из тех языков которые распространнены.
Полтора оставшихся в живых программиста на фортране из США, обслуживающих старый банковский говнокоднастоящее легаси в банковской сфере, смотрят на вас с удивлением.
Да ладно. Сайтов на ASP.Net наверняка до сих пор хоть жопой жуй. Есть даже целый один русский онлайн-кинотеатр – не буду называть имён – у которого бэкенд почти полностью на C#.
Ну и это… думаешь, можно эпичнее обосраться чем сделать remote code execution через библиотечку для логов?
тот обсер с логгером был, на сколько я понял из-за:
архитектурной избыточности библиотеки;
неумения/нежелания обеспечить и реализовать меры безопасности у тех, кто всял библиотеку для использования в своем проекте.
в принципе, инициирование какого-то действия через библиотеку, изначально разрабатываемую для логгирования - не такая уж и редкость.
Так что юзеры библиотеки прошляпили. А что, она была частью стандартной библиотеки Java?
Да, но помним о том, что у шарпа в винде нативное GUI, а у Java везде своё, марсианское, кроме андроида, где другого то и нет
На AWT/Swing натягивается обычная системная тема, как я показал выше на скриншотах.
Спорно
Отнюдь.
А вы давно в оффтопике были? Стиль ранних windows xp и windows 95 уже не в моде лет 10 как минимум
Речь идёт про дефолтные контроллы. Они, внезапно, широко используется и в самой Windows 10 и Windows 11. Настолько широко, что индусы до сих пор не могут запилить нормальную панель управления на новых контроллах UWP или как там его и им приходится тянуть два варианта системных конфигураторов.
Если смотреть на ванильную поставку шарпа в оффтопике в той же студии, то там тоже воз и маленькая тележка вариантов gui.
И что толку, когда оно не является нормальной кросс-платформой?
в c# разве не аналогично? В крайнем случае, можно держать в системе несколько версий .net
Нет, не аналогично. Берём C# приложение с GUI для Windows написанное в прошлом десятилетии, пытаемся запустить на Linux-дистрибутиве или macOS… получаем тыкву.
Сейчас дотнет фрагментирован на .Net и .Net Core, так как я не на фултайме на нем пишу, то я не очень сейчас понимаю, что как между собой мапится. Вроде есть некий .Net standart, версии которого имплементятся в core и в framework. Но есть ли в core все то что есть во framework мне не ведомо. Вроде были какие-то общие таблицы по которым можно сделать маппинг. С другой стороны в C# говорят отличный AOT в отличие от Java, хотя у Java есть GraalVM (и Spring Native). К тому же у Java куча реализаций JVM (https://en.wikipedia.org/wiki/List_of_Java_virtual_machines), есть даже китайская от алибабы https://dragonwell-jdk.io/ , у C# насколько я понимаю реализация только от майкрософта. Я бы выбирал Java, так как нет такой фрагментации и в JVM было вложено миллиард человекочасов.
да нет, почему же. Просто столкнулся на работе с утилиткой, написанной на C#. Причем, без гуя, веба и сети. Грубо говоря, на входе N файлов в одном формате, на выходе M файлов в другом формате. Т.е. такое можно было бы и на питоне написать, но автору проще было взять SharpDevelop и на C#.
в аду есть отдельный котел для перегружающих операторы.
использование средств расширения языка делает программу понятной только её автору - тому, кто это расширение разработал.
программисты начинают пользоваться перегрузкой где попало, в результате средство, призванное упростить и упорядочить программу, становится причиной её избыточного усложнения и запутывания.
перегруженные операции могут делать не совсем то, что ожидается от них, исходя из их вида.
перегрузка операций делает фрагменты программы более контекстно-зависимыми. не зная типов участвующих в выражении операндов, невозможно понять, что это выражение делает, если в нём используются перегруженные операции.
Смею предположить, что Вы просто прочитали это где-то и, не подумавши своей головой, просто ретранслируете данные догмы.
Хорошо, допустим, я буду следовать этой логике:
использование функций - зло, поскольку название может не соответствовать содержимому, поэтому программа будет понятной только ее автору - тому, кто не понял принципа функционального программирования и логику использования функций, которая предполагает давать абстрактное название некоторому отрывку кода, при этом название должно отражать сущность того, что делает этот код.
Шаблоны и дженерики - это зло, поскольку программисты начинают пользоваться ими где попало, в результате средство, призванное упростить и упорядочить типизацию, в основном, для контейнеров, становится причиной шаблонной болезни головного мозга.
Использование перегрузки функций делает фрагменты программы более контекстно-зависимыми, не зная типов, передаваемых внутрь функции, невозможно понять, какая функция будет вызвана, если при объявлении функции используется множественное ее определение с использованием перегрузки.
Давайте уберем вышеуказанные возможности из Java. Уверен, вы можете привести еще кучу аргументов на которые найдется фича в Java, которую тут же придется, согласно вашей же логике, просто выпилить или запретить ее использование.