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 не смотрел подробно.

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

★★★★★

Кстати вот только подумал насколько больше нужно ума чтобы НЕ реализовывать ненужное, чем реализовывать всего и побольше при дизайне ЯП

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

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

нет, эта тема под формат толксов подходит, но этичнее такие вещи в dev обсуждать, я так думаю.

mono ★★★★★
()

1. Java основной язык JVM, и он как язык не очень продвинут, и в ближайшее время не собирается улучшаться. 3 осмысленные строчки и 50 обслуживающих.

2. XML XML XML XML MOAR XML. Меня раздражает программирование на XML. В самой джаве его нет, но все либы его норовят использовать.

3. Аннотации как замена XML, ещё хуже. Бин с аннотациями для хибера, спринга, люцена, валидациями выглядит угрожающе. 1 геттер и 10 аннотаций.

Legioner ★★★★★
()

жаба, как язык, тупая и уродская. jvm — да, видимо будет жить еще какое-то время, будут под это дело пилить скалю и радоваться. в сам язык нихрена полезного не добавляется и не будет, судя по всему.

свинг — уродское поделие. просто фееричное. лучше б уж жамби пилили активнее.

а так да, где-то +1 наверно.

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

4. Ну патентная шумиха вокруг джавы мне не нравится. Очень не нравится. Велика вероятность, что народ на дотнет начнёт сваливать.

Legioner ★★★★★
()

* Java-приложение часто использует больше памяти чем программы на других платформах

А какие вы знаете кроме дотнета?

* JVM достаточно долго запускается

Под вендой только 8) и оракел это заметил

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

Пипец как нужно

* Type erasure

+1

* На практике необходимость в лаунчерах

librarypath можно задавать указыва свой класс лоадер, а можно тупо после запуска программы подгрузить jar-файло

* System.console() - какая-то убогая и непонятная концепция. Он не null только в реальном терминале, а System.out уже рекомендуют не использовать. Что скажете делать, простой вывод в консоль делать через Logging, городить свой велик или постоянно проверять на null?

System.out и нииипет

* Сливание по маркетинговой привлекательности среди быдлокодеров тому же C#. Хоть это огромный плюс, но людей надо манить к себе, в том числе и маркетингов, в том числе и быдлокодеров - вдруг поумнеют.

Ты чо тут хвостовую рекурсию рекламировал?

* Swing мощный, но тяжелый. На десктопах побеждает легкость.

Свинг старый и протухший, я в его потрохах наковырялся

* Игнор со стороны Linux десктопов. На Java пишутся легкие и быстрые приложения для десктопа путем простого использования java-gnome вместо Swing.

Если прально писать то и на свинге будет нормально, когда линукс перестанет тупить.

* Надо популяризировать Java для полноценных 3D игр (сразу после того как допилить для игр). Почему XNA может, а мы нет? Что, Java не Everywhere?

Нафига?

* Поддержка трея безконечно ужасна

А шо те кроме иконки нужно?

* Clutter есть, WPF есть, Qt умеет. Rich GUI давно уже надо сделать нормальный. Закопали JavaFX, молодцы, отстали от мира на сто шагов. Такое можно делать только будучи уверенны, что догонят и перегонят

JavaFX живее свинга

* Брендинг, маркетинг царя Java - Oracle ужасен в целом. Он некрасив (начиная даже с сайта) и сливает тому как это делала Sun. У нее свои были недостатки, но даже сайт sun.com, названия, логотип OOo и их офигенный шрифт привлекали очень сильно. Обращаю внимание на мелочи )

Оракел - кака

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

только как бенчмарк для своп раздела

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

можно, то конечно можно, но мона и дот-нет не одно и тоже.

mono ★★★★★
()

1) писать глюкалово легко можно и на java
2) писать переносимые программы легко можно и на C/C++
3) java сливает по скорости не в синтетических тестах, другой вопрос что чаще производительность упирается в базу данных и это не так критично. могу в качестве примера, предложить написать на java простую программу производительность которой фатально сольет C/C++, но фанатов это все равно не переубедит

Единственное для чего она идеально подходит старый добрый тру энтерпрайз откатинг и попилинг.

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

Бин с аннотациями для хибера, спринга, люцена, валидациями выглядит угрожающе. 1 геттер и 10 аннотаций.


А как в сишарпее?

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

могу в качестве примера, предложить написать на java простую программу производительность которой фатально сольет C/C++, но фанатов это все равно не переубедит

Ты лочуше предложи сложную написать, и пока крестофилища будут вылизвать валгринд, блондинки-жабакодершы успеют вернуться из декрета.

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

Пипец как нужно


Давотименно.

...in the JVM because of the security model and the need to always have a stack trace available.... The tail call subproject's status is listed as «proto 80%»; it is unlikely to make it into Java 7, but I think it has a very good chance at Java 8.

Кому надо пусть предложат ораклу другую security model и будем им тэйлкол

Karapuz ★★★★★
()

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


Эта TCO есть только в Scheme, Lua, Standard ML, Mozart/Oz. Даже в дотнете нет TCO

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

Аннотации как замена XML, ещё хуже. Бин с аннотациями для хибера, спринга, люцена, валидациями выглядит угрожающе. 1 геттер и 10 аннотаций.

Где вы такое видели? У меня все чистенько, красиво. Интерестно use case увидеть. Увидеть, как редкое животное в зоопарке.

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

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

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

свинг — уродское поделие. просто фееричное. лучше б уж жамби пилили активнее.

В свинге много графики на Java, а должно быть много графики на GPU ) Если даже и не С++, а Java дергает высокоуровневые рычажки, а всю грязную работу лопатит железо, то получается достаточно реактивно. Но вообще да, на CPU лучше графику ручками оптимизировать. У Gtk и Qt получше получится

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

>Сливание по маркетинговой привлекательности среди быдлокодеров тому же C#.

Тут вы забыли про то, что вы деплоите и где. В нормальных организациях легче завести приложение на линукс/фрибсд/солярис. Последний дает такой бонус к попилу, откату, раскату и плюс работать приложение будет идеально, что ваш C# просто уходит в топку :)

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

А какие вы знаете кроме дотнета?

Нативный код, Python, Ruby. Они юзают байндинги к нативным либам. Следовательно экономят памят

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

Что из джавы на GPU можно перенести то? Там в свинге ничего особо и нет. GPU будет layout-ы пересчитывать что ли?

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

java сливает по скорости не в синтетических тестах, другой вопрос что чаще производительность упирается в базу данных и это не так критично. могу в качестве примера, предложить написать на java простую программу производительность которой фатально сольет C/C++, но фанатов это все равно не переубедит

Ну почему же, интерестно. Готов поспорить феерические удары головой об стену в Java программе. Например vector<int> и ArrayList<Integer> ))

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

Они юзают байндинги к нативным либам. Следовательно экономят памят

И ограничивают переносимость и вносят дополнительные источники дырок в программу.

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

Вопрос только в Scala. Это нужно для Scala очень сильно

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

Давайте задачку, попробуем. Про выиграть - не обещаю, но про фатально собьёт - попробую опровергнуть. Только завтра, спать пора уже.

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

Ну с таким количеством бабла могли бы потрудиться почти все классы Java SE реализовать с большим количеством вручную заоптимизированного С++ кода. Чем не Qt, только с нормальным ЯП наверху?

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

Я как раз и говорил, что обычно пишут код на С++ и потом крамолу на Java. А потом бенчмарк и восторженное «Java тормозит».

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

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

В общем аннотации лучше XML-я только потому, что у них нормальный удобный синтаксис с минимумом лишних символов. Банально легче и удобнее писать.

Но того же можно добиться, выкинув XML и написав свой язык для конфигурации. Не понимаю, почему это так редко делают. Единственное, что могу предположить, все внезапно разучились писать парсеры или считают это rocket science, очень сложно и всё такое.

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

>>>больше памяти чем программы на других платформах

А какие вы знаете кроме дотнета?


Нативный код


Платформы? Мне кажется или ктото бредит?

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

С чего ты взял что это будет быстрее то? Тормоза в джава программах не из за этого.

Legioner ★★★★★
()

>лямбды (также известные как синтаксический сахар, плохой дизайн и частный случай анонимных классов)

Это в жабе так всё плохо?

Надо популяризировать Java для полноценных 3D игр


Молиться, поститься и слушать радио Радонеж, немедля. Хорошие игры и так горазды пожрать, а тут ещё ява.

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

А где это уже реализовано? По-моему GPU горазд картинки сжимать-разжимать или 3d рисовать, всякие кубы с текстурами. Ну или специфические математические задачи считать. Никогда не слышал, чтобы GPU шрифты рендерил.

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

gcc вроде умеет, но это не гаратируется стандартом, конечно.

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

наивный ты человек, нативные вызовы тоже не копейки стоят, потому некоторые вещи дешевле делать в яве чем на каждый пук лезть в биндинги

wfrr ★★☆
()

Хотел написать, но потом решил, что ты просто провоцируешь C# vs Java. Почитаю с интересом, но встревать не буду. Помню, на НГ пару лет назад с нашим менеджером проектов на жабе слегонца поспорили, и я усвоил, что несмотря на опыт работы с жабой, я в ней не профессионал. По-моему, у тебя то же самое в отношении C#.

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

Как ты сказал, так и сделал. Ничего не написал. Никаких аргументов.

Хотел написать, но потом решил, что ты просто провоцируешь C# vs Java.

Зачем мне это? Просто наиболее близкая концепция, но мы говорим о также о С++

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

В чем фундаментальное отличие XNA, который на .NET от потенциального движка на Java? Пускай даже допиленого до хорошего уровня jMonkeyEngine?

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

Джава не является языком вычислительного программирования, и все реализации вычислительных тестов на ней - от лукавого


http://habrahabr.ru/blogs/java/105021/

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

А я где-то утверждаю, что дотнет нужен?

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

А какие могут быть аргументы?

В C# 99% отличий от Java более чем не нужны

лямбды ... синтаксический сахар, плохой дизайн и частный случай анонимных классов


Неочевидных моментов острелить себе ноги


cоорудить прибитые гвоздями к друг-другу модули



Если бы ТЫ привёл тут аргументы или хотя бы пояснил, что ты имеешь в виду - был бы смысл. А так это безосновательные, пустословные высказывания, с которыми я, конечно, не согласен, но смысла спорить - не вижу, т.к. не вижу, с ЧЕМ спорить.

Могу аргументировать в стиле «отличия нужны, readability counts, неочевидных моментов - нет, соорудить прибитые гвоздями модули можно в любом языке».

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