НовостиОбзорыСобытияIT@WorkРеклама
Идеи и практики автоматизации:

Блог

Почему Java вытеснит C++

"За последние 15 лет я не видел ничего подобного в мире программирования", -- эмоционально заявил Cameron Purdy, вице-президент Oracle, высказываясь в eWeek по поводу серьезных изменений в индустрии программирования.

[spoiler]Эти изменения, по его мнению, заключаются в слиянии облачных и мобильных технологий, которые выходят на первый план, и в повсеместности HTML5. В связи с этим происходит сдвиг от классического программирования и соответствующих языков типа С++ к веб-ориентированным -- виртуальным и скриптовым. А HTML5 + JavaScript уже фактически готовая платформа нового поколения.

Соответственно, меняются и архитектуры систем -- вместо веб-серверной появляется архитектура с так называемым тонким сервером (см пост "Как создавать бесконечно масштабируемые системы на ленивых серверах").
Purdy рассказал про профильные проекты его компании (гибридная модель для программирования насыщенных клиентов, облаков и мобильных систем на базе Java и HTML5 -- подробнее гуглите сами, иначе получится реклама), и сообщил, что готовится реализация JavaScript для Java Virtual Machine -- будет в Java 8.

Purdy также конкретизировал плюсы платформы Java в сравнении с C++, а eWeek опубликовал его мнение в виде слайдов.

Итак, 10 преимуществ Java перед C++:
1 сборка мусора;
2 скоростная сборка проекта -- в десятки и сотни раз быстрее (Purdy приводит цифры, когда сборка неуточненного проекта на С++ занимает 20 часов, а видимо этот же проект на Java собирается 7 минут);
3 весь код в одном файле;
4 стандартизация на уровне двоичных кодов;
5 динамическое связывание классов (в мире C++ сложность динамической линковки давно известна как DLL hell);
6 пишется однажды, работает везде;
7 стандартная система типов, встроенная и переносимая библиотека поддержки времени выполнения, включающая множество функций ввода-вывода, работы с БД итд;
8 рефлективность (возможность узнавать и изменять структуру и поведение объектов в процессе работы программы);
9 производительность. Принято считать, что код на C++ работает заметно быстрее, нежели код на Java, но если брать общую эффективность крупных систем, то выясняется, что сборка мусора дает существенный прирост скорости за счет обеспечения чистоты памяти; Java мультипотоковая на концептуальном уровне, что упрощает создание быстрых программ для многоядерных архитектур; обращение по ссылкам Java работает в три раза быстрее, нежели потоко-безопасные умные указатели С++ (thread safe smart pointers); HotSpot JVM поддерживает компиляцию на лету;
10 безопасность. В Java не может быть неконтролируемого переполнения буфера, выхода индекса за границы массива и других неприятных и трудно отыскиваемых багов, характерных для С++.

Но есть у Java и минусы в сравнении с C++:
1 Java плохо подходит для создания систем реального времени;
2 Java требует много памяти;
3 старт масштабной сборки мусора может иногда тормозить всю систему;
4 в Java деструкторы недетерменированы, а в C++ деструктор срабатывает сразу, едва объект удаляется;
5 почти все самые популярные ОС написаны на Си/С++, и их системные программные интерфейсы выполнены в формате вызова функций Си.

В дополнение отмечу, что если система создается для Windows, то можно успешно задействовать все сильные стороны и Java, и C++ -- в этом поможет язык C# + платформа .NET, воплотившие в себе их лучшие черты.

Сергей Бобровский
Ну да, веб, мобильные системы, без С++ тут уже можно обойтись,а без Java никак.
Grezbi
Java перспективный язык, но он больше подходит для фронтенда, а С++ в свою очередь для бекэнда Java Student.
Leo Bittermann
Еще одна супер статья из разряда "как я нашел серебряную пулю и был таков".
Нужен вэб - Java и остальной набор web-джентельмена.
Нужны игры, производительные сервера, realtime, контроль над сетью и ОС - C/C++.
Ну а про C# как гибрид C++ и Java стоило вообще промолчать. На наличии скобочек {} общность философий заканчивается не начавшись.