Серый крокодильчик
> Скорее всего чтобы работать с Ораклом на Яве, а это самый популярный язык для
> него
Самый популярный язык для Оракла - PL/SQL. Яве в основе своей похрен с какой БД работать.
_g
> а главное - тру кроссплатформенность
На практике ява не кроссплатформеннее кроссплатформенного С++.
Серый крокодильчик
> необязательно
По опыту скажу, что ява не сильно отстает в некотором наборе задач, когда, пардон, просрётся.
Однако вцелом она в разы тормознее, жрет в разы больше памяти, приложения запускаются очень долго, отчего отладка с частым запуском превращается в мучение.
>> Не стоит сравнивать медленную Java и быстрый C++. ,
>необязательно
>http://habrahabr.ru/blogs/programming/66562/
тот тест не достаточен.
> для каких целей нужен C++ и не годится Java?
Gamedev, системное программирование, обработка графики, расчеты. Напиши Maple или Photoshop на Си без классов.
Aroch
> что за убогий тест? Тест реального алгоритма расставил бы все точки над i,
> например поиск пути.
http://shootout.alioth.debian.org/u64/benchmark.php?test=meteor&lang=all
еще пример
Ява проигрывает в 2 раза только одному из 5 вариантов, остальные либо сливают, либо уже близки.
НО! код на Яве в данном примере ужасен. Хотя бы с точки зрения работы с массивами.
Spartan
> По опыту скажу, что ява не сильно отстает в некотором наборе задач, когда,
> пардон, просрётся.
всмысле, когда "просрется"?
Ява так устроена, она разгоняется по ходу.
Spartan
> жрет в разы больше памяти,
в этом согласен, потребление памяти большое.
akaAngeL
> Gamedev
да и сервера линейки на яве писали и шутеры писали, правда там рендер был на плюсах, но все остальное на Java
Den Zurin
> Она во многом превосходит C++.
Разъясните мне пожалуйста, чем java превосходит С++? Теоретически, так как java является более интерпретируемым языком, нежели компилируемым, она должна обладать высокоуровневыми и удобными средствами. Но вместо этого я лишь вижу сильно урезанный С++ со сборкой мусора.
Den Zurin
> Вот, например, в Java можно проверить принадлежность объекта к классу. Можно ли
> это сделать в C++?
Без проблем, делаешь dynamic_cast, сравниваешь результат с нулем.
Den Zurin
> можно использовать класс Object, а примитивные типы (int, char и т.д.)
> преобразовывать в классы с помощью классов-оболочек
Ничего не мешает в С++ отнаследовать самому все классы от своего Object, и создать свои классы оболочек для примитивных типов. Или можно кастить к void *
Я сейчас изучаю java и вижу кучу недостатков по сравнению с С++:
1. Нет перегрузки операторов. Оператор == лишь сравнивает ссылки, и для сравнения объектов нужно писать менее понятный obj1.equals(obj2) код. А создавать свои типы данных типа математических векторов/матриц вообще нельзя нормально, некрасиво же писать что-то типа mat1.mul(vec1).add(vec2) вместо mat1*vec1+vec2
2. все объекты создаются в куче с помощью new - сразу удар по производительности, так как на каждый чих будет перевыделяться память.
3. Самый огромный по мне недостаток это сборка мусора, и соответственно отсутствие деструкторов, finalization будет вызвана совершенно непонятно когда. В С++ очень удобно делать чистку ресурсов или еще какие полезные действия в деструкторе, вызов которого вставляет во всех нужных местах сам компилятор. В java же получается эту всю работу нужно делать вручную? Хотя можно пожалуй использовать try/finally везде.
Java пожалуй хорош только ради своей кроссплатформенности и защищенности, других достоинств не вижу, С++ на порядок удобнее и мощнее.
ud1
> 2. все объекты создаются в куче с помощью new - сразу удар по
> производительности, так как на каждый чих будет перевыделяться память.
Немного не верно - это в С++ new дергает операционную систему, Java же работает с пулами памяти, что будет быстрее
http://www.ibm.com/developerworks/ru/library/j-jtp10283/
http://www.ibm.com/developerworks/ru/library/j-jtp11253/
http://www.ibm.com/developerworks/ru/library/j-jtp01274/
Конечно Java умерла, её же давно победил C#.
/убежал
Серый крокодильчик
> Немного не верно - это в С++ new дергает операционную систему, Java же работает
> с пулами памяти, что будет быстрее
В борландовском билдере тоже? У борланда таки очень хорошее управление памятью.
ud1
> так как на каждый чих будет перевыделяться память.
Справедливости ради нужно сказать, что при сборщиках мусора new может быть тривиальным, когда поддерживается не только удаление неиспользуемых объектов, но еще и их "уплотнение" в памяти после удаления. Но вот зато объясните мне, как Java может быть быстрой, если вместо std::vector<KisaQQ> на тру Java нужно делать Vector (не дженериковый) Object'ов и в рантайме кастить Object'ы в KisaQQ (не говоря уже о том, что программисту приходится делать работу за компилятор - проверять типы). При этом сами экземпляры будут разбросаны по всей памяти практически случайно, а не локально, как в случае std::vector.
если бы не гугл со своим Android java бы знал ток по школьной программе (
TarasB
> В борландовском билдере тоже?
ЕМНИП, там специальные пулы только для компонентов.
Spartan
> Самый популярный язык для Оракла - PL/SQL. Яве в основе своей похрен с какой БД
> работать.
блин, естестенно не для хранимок, а для ПО под Оракл. Просто выразился не корректно.
Spartan
> На практике ява не кроссплатформеннее кроссплатформенного С++
ну мы не забываем про область применимости (зависимость от поставленной задачи). да и сравнивать Java с C++ — глупо. а вот с .NET — вполне можно.
Серый крокодильчик
> Немного не верно - это в С++ new дергает операционную систему, Java же работает
> с пулами памяти, что будет быстрее
В С++ можно самому как угодно организовать пул, вот только как правило это не требуется. Я говорю, что в С++ для создания объекта в стеке вообще ничего не нужно, а в жаве это как минимум вызов нетривиальной функции + скажем конструктор по умолчанию обнуляющий члены.
К тому же сборка мусора способствует написанию говнокода, если в С++ нужно продумывать, кто где создает объекты, и когда их удаляет, что приводит к более тщательной разработке и структурированию кода, то в java будет уже просто мешанина, кто кто хочет, тот что угодно и делает.
Далее хранение и кода и описания в одном и том же файле может ухудшить читабельность кода. protected работает не так как в С++. Отсутствие инклудов приводит к необходимости компилятору искать нужные классы по всем импортируемым файлам, что приводит к замедлению компиляции. Отсутствует множественное наследование.
по поводу гд, можете посмотреть jbullet.. медленнее сишной реализация но тем не менее он есть)
Вот бы и правда C/C++/Java/.NET умерли. Сколько можно жить.
Тема в архиве.