LINUX.ORG.RU
ФорумTalks

Косяки Java


0

1

Предлагаю мирно пообщаться на тему известных косяков языка и платформы Java. Можем многое почерпнуть для себя от других людей. Цель беседы - не холивар, потому прошу постараться уменьшить хвальбу других языков и просто банальных спорных выкриков. Аргументы желательно приводить в наиболее близкой к правде форме, выражаться наиболее корректно. Например вместо «Java тормозит» нужно писать «Java-приложение часто использует больше памяти чем программы на других платформах» или «JVM достаточно долго запускается». Некорректность первого высказывания проявляется в очень большой расплывчатости и простыми опровержениями на бенмарках, отставание от С/С++ небольшое. Может выплывает какая-то идея, которую потом успешно в фичреквест.

Итак, что я вижу

  • Java-приложение часто использует больше памяти чем программы на других платформах
  • JVM достаточно долго запускается
  • Отсутствие поддержки хвостовой рекурсии
  • Type erasure
  • На практике необходимость в лаунчерах, которые устанавливают опции JVM. Некоторые из опций (переменных окруженя Java) должны быть установлены строго перед запуском JVM, а не потом в коде. Пример - java.library.path. Если вернуться к лаунчерам, то было бы удобно иметь возможность написать в самой программе простой, очень ограниченый по возможностям код на самой Java, который установит эти опции для главного запуска JVM. Если вас устраивает отдельный jar/exe/скрипт - говорите. JNLP разве что, но вы считаете это полным решением?
  • System.console() - какая-то убогая и непонятная концепция. Он не null только в реальном терминале, а System.out уже рекомендуют не использовать. Что скажете делать, простой вывод в консоль делать через Logging, городить свой велик или постоянно проверять на null?
  • Сливание по маркетинговой привлекательности среди быдлокодеров тому же C#. Хоть это огромный плюс, но людей надо манить к себе, в том числе и маркетингов, в том числе и быдлокодеров - вдруг поумнеют. В C# 99% отличий от Java более чем не нужны, но выглядят заманчиво для незадумывающихся, да и код короче. Вот и переходят массово на темную сторону силы. В моем окружении толпами валят с кошерной Java на C# в стразах. Аргументы - свойства, делегаты, лямбды (также известные как синтаксический сахар, плохой дизайн и частный случай анонимных классов). Хоть Linq еще ничего, но боян еще тот.
  • Swing мощный, но тяжелый. На десктопах побеждает легкость.
  • Игнор со стороны Linux десктопов. На Java пишутся легкие и быстрые приложения для десктопа путем простого использования java-gnome вместо Swing. Исправить недостатки java-gnome и юзать OpenJDK в 100500 раз проще чем наваять с нуля Mono и MonoDevelop, написать на нем кучу софта, а потом выпиливать его в связи с патентной угрозой. Вот не вытерплю - напишу 100500 плеер, только на Java Gnome, который будет сначала хотя бы для начала ничем не хуже многих других. Ни по скорости, ни по легковесности, ни по сложности написания.
  • Надо популяризировать Java для полноценных 3D игр (сразу после того как допилить для игр). Почему XNA может, а мы нет? Что, Java не Everywhere?
  • Поддержка трея безконечно ужасна
  • Clutter есть, WPF есть, Qt умеет. Rich GUI давно уже надо сделать нормальный. Закопали JavaFX, молодцы, отстали от мира на сто шагов. Такое можно делать только будучи уверенны, что догонят и перегонят
  • Брендинг, маркетинг царя Java - Oracle ужасен в целом. Он некрасив (начиная даже с сайта) и сливает тому как это делала Sun. У нее свои были недостатки, но даже сайт sun.com, названия, логотип OOo и их офигенный шрифт привлекали очень сильно. Обращаю внимание на мелочи )

Крайне несогласен с мифами, которые точно будут называть в этой теме

  • Java устарела. Нет, Java выдержана и консервативна - разницу надо видеть.
  • Java тромозит. Если уж говорите, то указывайте когда и как
  • Java закрыта. Use OpenJDK
  • Java для быдлокодеров. Я думаю что по сравнению с Java 95% ЯП - для быдлокодеров
  • C# намного фичастее. Сам язык конечно фичастее, кто бы спорил. Синтаксического сахара - гора. Неочевидных моментов острелить себе ноги - еще больше, cоорудить прибитые гвоздями к друг-другу модули -ничего нет проще. Следует видеть разницу в возможности написать качественный код на C# и громадной провокацией написать говно. Java дисциплинирует и не отвлекает свистоперделками. На работе было дело - целый вечер спорили как соорудить класс в C# снаружи, чтобы было удобно пользователю. На Java реализовали бы сразу - там подход стандартный практически всегда. Метод, конструктор, геттер/сеттер - далеко не прыгнешь. Думаешь только о важных вещах, а не о такой ерунде. Можно было и не спорить, ССЗБ, но провокация есть провокация и вечер угроблен.
  • Java - дорогое решение. Для очень дешевых вещей - дорогое. Для качественных вещей - подешевле альтернативных подходов.
  • SWT решает проблему громоздкости GUI в Java. Не решает, чистой воды брендинг. Что Eclipse что NetBeans практически одинаковы по функционалу и по ОЗУ. Решения нет. Может хоть в Linux есть Java Gnome, вот он и решает. Байндинг к Qt не смотрел подробно.

Особо нетерпимых модераторов прошу не удалять. Долго писал. Да и врядли будет вред от этой темы в Толксах.

★★★★★
Ответ на: комментарий от Legioner

Меня вообще забавляют эти переходы. Читаем про Hibernate/Spring, с первых страниц пишут что мы классные, конфиги отдельно от приложения храним, неинтрузивно, все дела, а потом аннотации начинаются, ага, неинтрузивно

Что спринг, что хибер позволяют пользоваться как аннотациями, так и конфигами. Сам догадаешся когда что из них надо использовать?

писать DSL-и для конфигурирования и писать конфиги на специальном удобном языке а не на XML-е

Ога. А потом писать под эти DSL парсеры, валидаторы. И делать плагины с подсветкой, автодополнением и, возможно, визуальными формами редактирования для IDE. Можно, нивапрос. Только нахрена?

Nagwal ★★★★
()
Ответ на: Нужны ли яве генерики? от wfrr

Этот вопрос меня не волнует. Мне - нужны. Поэтому вопрос ставится так - «нужна ли ява».

И вопрос не в дженериках, а AST и прочих вкусностях, благодаря которым я могу писать list.Select(x => x.Product).Distinct(x => x.Group).Join(x => x.Name), а также выделывать всякие трюки с Expressions и deferred execution, типа log(m => m(dump())) который не вызывает dump() если log отключен.

queen3 ★★★★★
()
Ответ на: комментарий от vertexua

>Ну почему же, интерестно.
Хочешь описание программы? Готов написать по моему описанию, выложить код и потестировать?

xtron
()

Вопросы, не дающие мне спокойно спать

  • Как называется язык: Джава или Ява?
  • Почему у массивов length, а у коллекций size()?
  • Почему примитивный тип называется int, а не integer?
  • Почему нельзя внутри for-выражения объявить переменные разных типов?
  • Зачем зарезервированны слова goto и const?
  • Почему NullPointerException, когда логичнее NullReferenceException?
  • И наконец, почему интерфейсы (interfaces) компилятся в файлы с расширением .class?
CARS ★★★★
()
Ответ на: Вопросы, не дающие мне спокойно спать от CARS

Как называется язык: Джава или Ява?

Совет: носи с собой пистолет и когда кто-то скажет Я** ты знаешь что делать. Он не заслуживает жизни

Почему у массивов length, а у коллекций size()?

Надо видеть и хорошие стороны. Могло бы быть и Count

Почему примитивный тип называется int, а не integer?

А как же привычки С/С++ программиостов? Да и короче

vertexua ★★★★★
() автор топика

По большинству пунктов согласен с оратором, особенно насчет java-gnome, хоть и сам специализируюсь по JavaEE. В моей области больше всего запарило отсутствие операторной арифметики для BigDecimal, это из последнего, что вспоминается. Уже который год обещают, а все никак.

Из остального (сумбурно, не систематизируя особо):
* таки да, намечается печальная тенденция закапывания JavaFX. Разрабы NetBeans недавно объявили, что в NetBeans 7.0 поддержки FXScript больше не будет (а кошернейшие UML и BPEL/SOA выпилили еще раньше);
* для авторов 3D-приложений прекрасным ориентиром может служить тот же SweetHome3D;
* SWT - да, выглядит нативнее свинга, но его API более походит на б-гомерзкий MFC, чем на православный Swing

Kuka ★★
()

ты весьма однобоко рассматриваешь жабу. а жаба - это таки целая платформа.

isden ★★★★★
()
Ответ на: комментарий от Karapuz

> скриншоты с уродствами предоставь в студию

нахрен скриншоты, ты в код загляни.

Rastafarra ★★★★
()

Пункы 1, 2 и 5 - несущественны.

Quasar ★★★★★
()
Ответ на: комментарий от Legioner

Spring зло, Guice форева.

Аннотации ТЯНУТ библиотеку (почему то почти никто не заботится о выделении их в какую-нибудь псевдобиблиотеку только с ними, можно и самому делать, но зачем?).


Заботятся. См. javax.persistence и javax.inject.

LucidFox
()
Ответ на: комментарий от Nagwal

Что спринг, что хибер позволяют пользоваться как аннотациями, так и конфигами. Сам догадаешся когда что из них надо использовать?

Не нужно преумножать сущности без необходимости.

Ога. А потом писать под эти DSL парсеры, валидаторы. И делать плагины с подсветкой, автодополнением и, возможно, визуальными формами редактирования для IDE. Можно, нивапрос. Только нахрена?

Писать XML-ки пользуясь одной только поддержкой по схеме - убого. Для того же спринга и хибернейта есть плагины, которые позволяют намного больше. Поэтому эти XML - УЖЕ полноценный DSL со специальными плагинами только для них, подсвечивающими, автодоплняющими, визуальными формами редактирования. Только с идиотской семантикой и очень сложным редактированием без всего этого.

PS сдалась вам эта подсветка, первое что делаю в любом редакторе - отключаю все эти попугайские раскраски. Ключевые слова жирным, строковые литералы и комменты разными цветами и отлично.

Legioner ★★★★★
()
Ответ на: комментарий от LucidFox

Spring зло, Guice форева.

Ну в спринге намного намного намного больше, это просто разного рода продукты, сравнивать их некорректно. Так да, мне Guice больше понравился чем Spring DI, правда я его не сильно пробовал.

Заботятся. См. javax.persistence и javax.inject.

Это стандартные библиотеки, в них мало что есть, почти всегда приходится добавлять что то проприетарное.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Ну не знаю. Мне для описания энтитей JPA всю жизнь хватало стандартных аннотаций javax.persistence.

LucidFox
()

Отсутствие поддержки хвостовой рекурсии


даже в пифоне нет поддержки хвостовой рекурсии, потому что Гуидо сказал что иметь стэк в дебаггере важнее чем TCO http://stackoverflow.com/questions/33923/

Karapuz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.