LINUX.ORG.RU

Производительность Java, C и C++

 , , ,


4

6

Предположим я не тролль, а правда знаю C, C++ и Java.

Java умеет оптимизировать «горячий путь», т.е. в среднем должна быть быстрее на этом пути, чем программы на C или C++. С другой стороны при отклонении от этого «горячего пути» начинаются тормоза.

В большинстве случаев в интерпрайзе(вэб/промышленное ПО) применение java оправдано(там где регулярно выполняется всего 10 основных действий). Т.к. порог вхождения у java ниже - можно найти больше программистов, следовательно дешевле разработка.

Вопрос: чем вызвано массовое увлечение написанием десктопного ПО на java, ведь явного «горячего пути» в десктопных ПО обычно не существует?

ЗЫ программисты на Qt, а не на C++ проходите мимо, вопрос к людям постарше.


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

Сбои питания решаются через ИБП. Но и всё же, сегфолты в программах на C++ всё же более частое явление, не правда ли?

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

Но и всё же, сегфолты в программах на C++ всё же более частое явление, не правда ли?

кстати, про «я уже не помню когда последний раз ...»
...видел сегфолт

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

А как же NullPointerException?

те кто боялись этого исключения придумали Kotlin, теперь программы на котлине падают исключительно с другими эксепшенами

clover
() автор топика

потому что C++ и на десктопе это онанизм. у крестов скоро вообще не останется ниши. будут C, Rust, Java, Python и прочее

anonymous
()
Ответ на: комментарий от ymuv

в жабе хоть можно быстро узнать хде упало...

anonymous
()
Ответ на: комментарий от RazrFalcon

Сравниваете жопу с пальцем.

AFAIK, imgui создавалась для конструкторов уровней в 3D играх. Там скорость отображения и отзывчивость стоят на первом месте. А по этим параметрам Qt — это, действительно, жопа, если сравнивать с более легкоуровневыми тулкитами.

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

qtclass.h -> moc -> qtclass_moc.cpp -> gcc

Поэтому «И каким же компилятором нужно компилировать программу на Qt?» - moc. Обычный компилятор выдаст ошибки.

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

Чтобы называться компилятором, программа должна генерировать объектный код из C++ исходников?

anonymous
()
Ответ на: комментарий от RazrFalcon

AFAIK, они предназначены для абсолютно разных вещей и абсолютно по-разному работают. Ничего общего у них нет.

Т.е. именно этот смысл вы вкладываете в выражение «сравнить жопу с пальцем»?

eao197 ★★★★★
()

чем вызвано массовое увлечение написанием десктопного ПО на java

Спросите у

1. IntelliJ

2. IBM (OTI)

Последние, правда, к счастью, используют C/C++/O-C код для SWT.

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 1)
Ответ на: комментарий от clover

ну это старая песня, «дайте нам ресурсов, а там уж мы ух!»

Просто насколько я понимаю C/C++ - там такой масштабируемости нет, и для распараллеливания придётся переписывать код. Нет?

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

для распараллеливания придётся переписывать код. Нет?

А что в Java распараллеливается автоматически?

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

moc удовлетворяет определению компилятора, которое ты, возможно, забыл. И это единственный компилятор, понимающий исходники Qt.

anonymous
()

Если ты посмотришь внимательно, но на самом деле на java пишуться всякие довольно узконаправленные приложения - IDE, редакторы, в основном технические тулы. В этих приложениях как раз есть горячие пути, так же как в серверном софте. Взять IDE - у тебя есть закешированное синтаксическое дерево, все объекты тут, память вся аллоцированна и ты сидишь его меняешь по чуть-чуть.SweetHome3D - тоже самое. На самом деле у любой штуковины есть горячий путь. У плазмы у той же - особенно. У нее есть пачка виджетов, они закешированны, объекты не меняются, память практически не перевыделяется, а вычисления которые они выполняют всегда одни и те же, то есть через несколько проходов JIT-а они уже будут сравнимы или быстрее руками написанного asm-ма.

Берешь любой долгоживущее приложение - java становится оправданна. Она совсем не подходит для чего-то, что должно быстро запускаться и выключаться - cat/vim/sed/awk/grep - для java это no-go. Ты помрешь ждать пока оно случиться. Любое гуевое приложение, которое должно быстро и относительно часто запускаться тоже на java писать - издевательство над пользователем. Но как только твое приложение начинает жить сутками и у JIT-а есть время посчитать всякие статистики и поприменять всякие эвристики, оно начинает быть оправданно.

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

Хм, я неправильно вспомнил как работает moc. Пожалуй он таки не компилятор.

Но это не отменяет того что без него ничего работать не будет. Да и пофиг на реализацию на самом деле - Qt тупо расширяет C++, добавляет ему семантику, так что это новый язык. Хотя бы формально.

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

Но это не отменяет того что без него ничего работать не будет

как это не будет? напиши тот же код руками и все заработает без moc

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

А если тот же ассемблерный код написать руками, то и без gcc обойдемся. Экономия!

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

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

А если тот же ассемблерный код написать руками, то и без gcc обойдемся. Экономия!

gcc генерирует машинные инструкции, а не асм, экономист хренов

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

тогда и программу на ассемблере напиши, умник

Тогда и ты пиши на крестах без кутешных прибабахов.

gcc генерирует машинные инструкции, а не асм, экономист хренов

RTFM, неуч.

anonymous
()
Ответ на: комментарий от EXL

плазма, будь она на Java, не падала бы.

Прибивалась бы OOM-киллером.

anonymous
()
Ответ на: комментарий от clover

настолько. даже на порядки.

чтобы написать оптимальное и достаточно функциональное кроссплатформенное приложение на плюсах (без притягивания монстров а-ля культя, которые жрут ресурс и тормозят не хуже жабы) нужно иметь мозги и немалый опыт. как следствие - очень мало способных на такое разработчиков. а опытные разработчики не любят заниматься гуйнёй. это очень уныло. поэтому гуйню обычно пишут либо нубы, либо те, кто особо не продвинулся в своём развитии. отсюда и типичная кривожопость графических интерфейсов. редко можно найти что-то, сделанное с умом.

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

с позиции бизнеса мне вобщем-то это понятно, хотя иногда компании все-таки планируют дальше послезавтра и выбирают хорошие инструменты, с позиции opensource-сообщества - не очень

а ты их не разделяй. потому что это одни и те же яйца программисты. ты думаешь, опенсорц - это какая-то отдельная каста? нет, это те, кто в рабочее время занят написанием софта для бизнеса. и раз бизнес плодит рукожопов, то и в опенсорце наступает засилье рукожопов. тут чудес не бывает. рукожопы, как ни странно, тоже хотят что-то там писать на досуге. и пишут. мегатонны говнокода. можешь заглянуть на какой-нить гитхаб. там жуть.

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

Ибо сравнение вида «Qt хуже imgui» абсолютно бредовое.

Бредовым оно было бы, если бы не указывались критерии сравнения. Если же критерии есть и они в равной степени применимы к обоим фреймворкам, то сравнение вполне себе корректное. Так что по части легковесности и скорости работы Qt волне себе проигрывает imgui, насколько я могу судить по отзывам.

Другое дело, что вы явно не можете объективно оценивать недостатки своих любимых инструментов. В данном случае Qt.

При чём тут линкер? Мы ещё ничего не собирали.

При том. Что выхлопом moc-а является, сюрпрайз-сюрпрайз, все тот же C++, который нужно скормить все тому же C++ компилятору, иначе линкер ничего не сможет собрать.

moc можно было бы назвать компилятором (пусть и с натяжкой), если бы он:

  • генерировал код на языке более низкого уровня или вообще на другом языке (например, из C++ строился бы C-шный код);
  • исходные файлы, которые обрабатывает moc не пришлось бы повторно скармливать C++ компилятору. Например, если бы moc обработал A.cpp и получил A_moc.cpp, далее в компиляции участвовал бы только A_moc.cpp, без A.cpp.

По такой схеме в свое время работал cfront и до сих пор по такой схеме работает компилятор Eiffel из EiffelStudio. Но ведь Qt-шный moc не может без C++ компилятора.

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

И да, MS Visual Studio на C# + WPF переписали.

А вот почему он стал жутким тормозом.

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

Moc это скорее препроцессор, чем компилятор. И его, кстати говоря, необходимо использовать отнюдь не везде. По сути, он нужен только для классов, которые определяют новые сигналы (если ты не используешь QML). Все остальное прекрасно оаботает без обработки moc-ом.

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

Мне вы зачем это рассказываете? Объясните это тем, у кого в следствии тяжелой степени Qtшности головного мозга получается, что Qt-шная программа компилируется moc-ом, а не C++ компилятором.

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

для таких случаев в русском языке есть слово «диалект».

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

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

Просто насколько я понимаю

насколько жаберы понимают, в жабе всё паралелится автоматически путем нажатия на кнопку «сделать збс».

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

у кого в следствии тяжелой степени Qtшности головного мозга получается, что Qt-шная программа компилируется moc-ом, а не C++ компилятором.

Ага, а php компилируется не HPHPc, а c++ компилятором, поэтому php - это c++.

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

Перечитайте вторую часть вот этого комментария и вы, если у вас таки есть мозги, сможете увидеть, что HPHPc делает именно то, чего не делает moc, а именно:

- транслирует код на PHP в код на совсем другом языке программирования;

- далее в компиляции используются результаты этой трансляции, а не исходные PHP-файлы.

Это было в первом компиляторе C++ cfront (трансляция C++ в C с последующей компиляцией C-шного выхлопа), это есть в компиляторе Eiffel из EiffelStudio (трансляция Eiffel в C с последующей...), это, емнип, происходит в компиляторе Vala и еще нескольких компиляторах с других языков.

Но этого нет в moc-е, т.к. moc дает обычный C++ код. Более того, исходный C++ный код, который скормили moc-у, никак ни во что не преобразуется. Moc всего лишь генерирует некоторый объем дополнительного C++ного кода.

Что в этом непонятного?

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

Moc не заменяет код на C++ другим кодом на C++. Он берет код на C++ и генерирует из него другой код на C++, который компилируется _одновременно_ с оригинальным кодом, не заменяя его. К тому же для компиляции C++-компилятором нужно обратотать moc'ом не весь код, использующий Qt, а только некоторые его участки.

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

Более того, исходный C++ный код

Производительность Java, C и C++ (комментарий)

Moc многа букав...

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

anonymous
()
Ответ на: комментарий от eao197

они в равной степени применимы к обоим фреймворкам

Ещё раз: Qt и imgui предназначены для абсолютно разных вещей. Но вам проще продолжать наезжать не всех вокруг, чем признать свою неправоту.

не можете объективно оценивать недостатки своих любимых инструментов

Лол. Сказал человек, который не может прожить и дня, чтобы не поныть как уныл Rust, и как прекрасен C++.

Но ведь Qt-шный moc не может без C++ компилятора.

Vala и Hexe тоже не могут без сишного компилятора, но они считаются отдельными языками.

генерировал код на языке более низкого уровня

Ну C++ и есть более низкоуровневый «Qt». Рефлексия, сигналы/слоты и тд.

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