Нубский вопрос: Java vs C++. Зачем в андроиде используют Java?
Ну, я бы, например, яву с шарпом сравнивал для начала. А то плюсы тут как-то ну совсем никак.
1. код Java-ы отделен от особенностей процессора, C/C++ наоборот сильно зависим от особенностей процессора.
это позволяет Java-код легко переносить между различными процессорами, но затрудняет возможность использовать особенности конкретного процессора для ускорения.
C/C++ хуже переносится, но зато позволяет использовать потенциал процессора по максимуму
2. в коде C/C++-разрешены любые операции, в коде Java-ы разрешены только безопасные операции.
это позволяет на C/C++ делать всякие разные быстрые трюки, а на Java-е их сделать не получается, зато на Java-е меньше возможностей для уязвимостей.
И еще про сборку мусора не надо забывать. Мемори-лик в плюсах - как два пальца.
зато на Java-е меньше возможностей для уязвимостей.
Не зря в браузерной джаве раз в месяц по уязвимости находят.
Это если речь о том чтобы безопасно запускать недоверенный код. В этом случае джава полагается на отсутствие багов в библиотеке классов - а они там конечно есть.
Переносимость именно _бинарников_ (т.е. байткода) - основной аргумент.
для джавы нужна виртуальная машина, и наверное, от этого проги на джаве медленнее?Синовски — руководитель разработки Windows 8 — такого же мнения, поэтому WinRT в Windows 8 сделали на C++. Синовски, как разработчик, вырос на C++, всякие дотнеты и джавы недолюбливал.
Эппл издавна пилила свой Objective C, поэтому там Objective C.
У гугда, видимо, у руля оказался
Почему не питон - очень просто. Ява всё же намного быстрее. Всего в полтора раза медленнее си. И ява умеет в многопоточность. К тому же документирована лучше, у питона же наблюдается болезнь под названием "вместо языка одна референсная реализация интерпретатора". Тех же действующих яв штуки три уже было совместимых между собой, и соответственно стандартизация была лучше.
Почему не c# ответ простой - си шарп не открытый и не свободный софт. Для построения независимой мобильной платформы не подходит. Почему не mono вопрос более интересный. Возможно ориентировались на большое количество уже существующих библиотек явы, возможно верили, что текущая тенденция сравнительных скоростей развития останется неизменной, но оракл пожрал яву, а моно ускорило своё развитие как единой открытой инициативы.
P.S. Кто разбирается в dalvik - там всё так же плохо в tail call optimization как в настоящей яве, где она невозможна? И type erasure столь же убог?
1. код Java-ы отделен от особенностей процессора, C/C++ наоборот сильно зависим от особенностей процессора.да не процессора, на плюсах не очень сложно переносимый между архитектурами код писать. Дело в завязках на ОС в основном.
kai уже правильно сформулировал
ок, ночь, темно, ничерта не видно
И еще про сборку мусора не надо забывать. Мемори-лик в плюсах - как два пальца.Плюсы могут быть со сборкой мусора.
Я, правда, не слышал про такие имплементации.
А C++ больше связан с копанием в техвопросах. Только для отдельных разновидностей приложений это важно. Например, при разработке браузеров или для системного программирования.
Переносимость именно _бинарников_ (т.е. байткода) - основной аргумент.Гм, ну вообще-то именно байт код в гугле из джавы выкинули и использовали свою компиляцию
А если серьёзно, то под андроид есть SDK для джавы и NDK для С, используют жабу просто потому, что значительно удобнее.
Как это выкинули? Когда с Play прогу скачиваешь, она не в байткоде?
Даже с интеллектуальными указателями?
в далвике свой байткод, с блекджеком и регистрами
Я знаю. Но это таки байткод. И сам далвик намного более интерпретатор, чем jvm.
Я знаю. Но это таки байткод. И сам далвик намного более интерпретатор, чем jvm.ну да, тока там другой байткод
Оставить комментарий
kantboris
Сильно не бейте.Я так понимаю, что java и с++ довольно похожие языки, есть нюансы, конечно. Но в чем один лучше/хуже другого? Я понимаю, что для джавы нужна виртуальная машина, и наверное, от этого проги на джаве медленнее? Но почему тогда джаву продолжают юзать? Почему андроид на джаве? Вон один чувак переписал на с++, и андроид стал значительно быстрее. Почему он изначально не был написан на с++?
Объясните плиз.