Нубский вопрос: Java vs C++. Зачем в андроиде используют Java?

kantboris

Сильно не бейте. :)
Я так понимаю, что java и с++ довольно похожие языки, есть нюансы, конечно. Но в чем один лучше/хуже другого? Я понимаю, что для джавы нужна виртуальная машина, и наверное, от этого проги на джаве медленнее? Но почему тогда джаву продолжают юзать? Почему андроид на джаве? Вон один чувак переписал на с++, и андроид стал значительно быстрее. Почему он изначально не был написан на с++?
Объясните плиз.

al70

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

Dasar

Если в двух словах:
1. код Java-ы отделен от особенностей процессора, C/C++ наоборот сильно зависим от особенностей процессора.
это позволяет Java-код легко переносить между различными процессорами, но затрудняет возможность использовать особенности конкретного процессора для ускорения.
C/C++ хуже переносится, но зато позволяет использовать потенциал процессора по максимуму
2. в коде C/C++-разрешены любые операции, в коде Java-ы разрешены только безопасные операции.
это позволяет на C/C++ делать всякие разные быстрые трюки, а на Java-е их сделать не получается, зато на Java-е меньше возможностей для уязвимостей.

al70

И еще про сборку мусора не надо забывать. Мемори-лик в плюсах - как два пальца.

ppplva

зато на Java-е меньше возможностей для уязвимостей.

Не зря в браузерной джаве раз в месяц по уязвимости находят.
Это если речь о том чтобы безопасно запускать недоверенный код. В этом случае джава полагается на отсутствие багов в библиотеке классов - а они там конечно есть.
Переносимость именно _бинарников_ (т.е. байткода) - основной аргумент.

6yrop

для джавы нужна виртуальная машина, и наверное, от этого проги на джаве медленнее?
Синовски — руководитель разработки Windows 8 — такого же мнения, поэтому WinRT в Windows 8 сделали на C++. Синовски, как разработчик, вырос на C++, всякие дотнеты и джавы недолюбливал.
Эппл издавна пилила свой Objective C, поэтому там Objective C.
У гугда, видимо, у руля оказался джава архитектор джавист.

yroslavasako

Но безопасность (построение фреймворка с делегацией полномочий и независимым исполнением клиентских программ) тоже важна. И поскольку lxc не дописали до сих пор, а java была уже тогда, то системные средства пришлось заменить java фреймворком. Естественно перенося при этом код фреймворка на яву.
Почему не питон - очень просто. Ява всё же намного быстрее. Всего в полтора раза медленнее си. И ява умеет в многопоточность. К тому же документирована лучше, у питона же наблюдается болезнь под названием "вместо языка одна референсная реализация интерпретатора". Тех же действующих яв штуки три уже было совместимых между собой, и соответственно стандартизация была лучше.
Почему не c# ответ простой - си шарп не открытый и не свободный софт. Для построения независимой мобильной платформы не подходит. Почему не mono вопрос более интересный. Возможно ориентировались на большое количество уже существующих библиотек явы, возможно верили, что текущая тенденция сравнительных скоростей развития останется неизменной, но оракл пожрал яву, а моно ускорило своё развитие как единой открытой инициативы.
P.S. Кто разбирается в dalvik - там всё так же плохо в tail call optimization как в настоящей яве, где она невозможна? И type erasure столь же убог?

Serab

1. код Java-ы отделен от особенностей процессора, C/C++ наоборот сильно зависим от особенностей процессора.
да не процессора, на плюсах не очень сложно переносимый между архитектурами код писать. Дело в завязках на ОС в основном.

Dasar

kai уже правильно сформулировал

Serab

ок, ночь, темно, ничерта не видно :bat:

apl13

И еще про сборку мусора не надо забывать. Мемори-лик в плюсах - как два пальца.
Плюсы могут быть со сборкой мусора.
Я, правда, не слышал про такие имплементации.

nikola1956

В современной разработке главное простота и надежность. То, что пишется на java, обычно сразу работает правильно. Вероятность ошибки в техническом плане крайне мала. Поэтому все внимание уделяется самой задаче, выраженной в человеческих терминах. Такие задачи для смартфонов и планшетов разнообразны и решать их желательно быстро. Все поставлено на поток. Отсюда — java.
А C++ больше связан с копанием в техвопросах. Только для отдельных разновидностей приложений это важно. Например, при разработке браузеров или для системного программирования.

schipuchka1

Переносимость именно _бинарников_ (т.е. байткода) - основной аргумент.
Гм, ну вообще-то именно байт код в гугле из джавы выкинули и использовали свою компиляцию

schipuchka1

Java значительно определённее по своим состояниям, у неё инт не может быть длины 14 бит :)
А если серьёзно, то под андроид есть SDK для джавы и NDK для С, используют жабу просто потому, что значительно удобнее.

karkar

Как это выкинули? Когда с Play прогу скачиваешь, она не в байткоде?

Whoman-in-white

Даже с интеллектуальными указателями?

fufa58

в далвике свой байткод, с блекджеком и регистрами

karkar

Я знаю. Но это таки байткод. И сам далвик намного более интерпретатор, чем jvm.

schipuchka1

Я знаю. Но это таки байткод. И сам далвик намного более интерпретатор, чем jvm.
ну да, тока там другой байткод :)
Оставить комментарий
Имя или ник:
Комментарий: