Web-разработка: Java vs C++

    Назрела необходимость выбрать новую платформу для web-разработки.

    Раньш был PHP. Это хорошая технология, но нужно что-то потяжелее. Серверная инфраструктура — *nix. То есть .NET отметаем (и MONO тоже)

    Также отметаем все скриптовые языки (Perl, Python, Ruby, etc). Так как смысла менять шило на мыло особого нет.

    Остается Java и C++. Это довольно тяжелые технологии для больших проектов. Технологии примерно одного класса.

    Итак, кто что может сказать по этому поводу? Особенно хочется услышать мнение практиков.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 53

      0
      В сравнении сказать не могу, на C++ опыта нет, но на Java делать серьезные веб-приложения - очень удобно. Много различных и качественных фреймворков (советую JBoss Seam), наличие таких штук как Spring(or Guice), Hibernate, EJB3, очень облегчает жизнь.
      PS: делаем давно, продуктивно и мощно :)
        +1
        Да, в Java привлекает то, что это сильно "коммерциализированная" технология, которую активно продвигают монстры индустрии, причем продвигают и как web-платформу. То есть кучи фреймворков, крутых решений и. т. д.

        С++ в этом плане видимо немного отстает. И порог вхождения у C++ под web - выше. Но думаю что в C++ тоже все есть. Ну и конечно производительность...

        Еще многие пугают некоей "низкоуровневостью" C++, сборкой мусора и т.д.. Склоняюсь к мнению, что в крупных проектах скорость разработки с использованием обоих технологий будет примерно одинаковая...

        Хотя требования к специалистам C++ безусловно выше. Но зато этот язык часто выбирают настоящие маньяки :)
          0
          1. Производительность java выше, чем многие думают. При правильном (не виртуозном, а просто не-ламерском) написании, разница с с++ будет небольшой.
          2. Как только звучит слово "кластер", java выигрывает еще больше. Там (в j2ee) это все прозрачно, удобно, надежно и производительно.
          3. Найти хорошую комманду с++шников - сложно. Реально сложно. Как и любую хорошую комманду, в принципе. Но в мире java больше народу. И грамотного народу тоже - больше :)
        0
        как показывает опыт - главное верно оценить загрузку создаваемого программного комплекса

        при большой загрузке приложение, написанное на Java, будет вылетать из-за проблем Java-машины. На С++ подобных проблем нет

        с точки зрения удобства разработки, то тут однозначно лидирует Java из-за обилия серъезных фреймворков и просто наборов классов.
          0
          да, насчет фреймворков - видимо Java лидирует...
            0
            О каких проблемах java hotspot вы говорите?
              0
              Не знаю на сколько я прав, но возможно такие проблемы были у bobrdobr.ru, когда их сервер упал от чрезмерной нагрузки. Веб приложение у них написано на java.
                0
                А еще.. а еще.. у них были сервера Интел! Наверное с ними тоже что-то не то.. И с операционками, да..
              +1

              при большой загрузке приложение, написанное на Java, будет вылетать из-за проблем Java-машины. На С++ подобных проблем нет

              Расскажите подробнее о этих проблемах. Мне вот интересно, что за проблемы.
                0
                мне тоже очень интересно..
                первый раз о таком слышу, хотя работаю в конторе которая девелопит веб-платформу на джаве в промышленных масштабах
                  0
                  Может они используют "client" VM ? =)
                    0
                    Видимо имелось в виду что-то типа того, что сервер с Java слетит на 5 минут раньше чем с C++ :)
                    0
                    Не хочу в холеваре учавствовать. Но все мы помним покойного робота Томми работавшего на java, который влетел в бетонную стену на 70 миль/ч... Java не такая уж и быстрая, как многие про неё говорят. Если создаётся огромное количество маленьких объектов, и к работе приступает сборщик мусора...
                      0

                      Но все мы помним покойного робота Томми работавшего на java, который влетел в бетонную стену на 70 миль/ч...

                      А зачем вы используете java в realtime ?


                      Java не такая уж и быстрая, как многие про неё говорят.

                      Java является довольно быстрым языком.


                      Если создаётся огромное количество маленьких объектов, и к работе приступает сборщик мусора...

                      Что имеет отношение к реализации виртуальной машины, но никак не к языку.
                        0
                        Немного не понял смысла фразы "Java является довольно быстрым языком", что значит быстрый язык?

                        Что имеет отношение к реализации виртуальной машины, но никак не к языку.

                        Я немного не в курсе, но разве GB не является частью Java, и от него можно отказаться? Разве можно самому убить нужный объект в GB не запуская его? IMHO единственное, что можно, это принудительно заставить GB собрать мусор. Вот тут и встаёт проблема, если в приложении создалось огромное количество объектов.
                          0

                          Немного не понял смысла фразы "Java является довольно быстрым языком", что значит быстрый язык?

                          На многих операциях дает скорость, сравнимую с C++.


                          Я немного не в курсе, но разве GB не является частью Java, и от него можно отказаться? Разве можно самому убить нужный объект в GB не запуская его?

                          Уборщик мусора работает паралельно, а никак не последовательно. И саму работу VM машины тормозит только косвенно. При наличии возможности обрабатывать несколько потоков на разных процессорах, у вас не будет наблюдаться потери производительности. Кстати под обработку большого числа параллельных процессов заточена "Niagara".
                            0
                            Уборщик мусора работает паралельно, а никак не последовательно. И саму работу VM машины тормозит только косвенно. При наличии возможности обрабатывать несколько потоков на разных процессорах, у вас не будет наблюдаться потери производительности. Кстати под обработку большого числа параллельных процессов заточена "Niagara".

                            Я не спорил, что он работает последовательно, а вот про обработку на разных процессорах не знал, спасибо за информацию.
                            +1
                            java не самый быстрый язык. хотя бы потому, что на то, чтобы на лету скомпилировался native код - нужно потратить процессорное время. кроме того, существует gc, да.
                            НО. в среде web - где бОльшую часть времени занимают операции ввода/вывода, java не может проиграть c++ (ну, по крайней мере, при обозримой загрузке сервера).
                            google на java не напишеш, также как и не получится написать, скажем, производительный движок рендера 3d изображений. а вот для web - это очень хорошее решение, масштабируемое и расчитанное на широкий круг задач.
                              0
                              Все дело в том, что современные web-приложения все больше и больше теряют web-специфику, и кто знает до чего они дойдут завтра...

                              Так что возможность быстрого рендеринга 3d - тоже бонус...
                                0
                                FPS Chrome написана на Java. Вполне себе играет :) Это к вопросу о движке 3D.
                            0
                            Но все мы помним покойного робота Томми работавшего на java, который влетел в бетонную стену на 70 миль/ч...

                            Но только не помните, что проблемы там были вовсе не в Java.
                        +1
                        Еще один довод в пользу Java, а точнее J2EE для подобных проектов, это относительное изобилие специалистов. На C++ наверняка можно поднять тяжелый веб проект, и видимо можно найти какие-то доступные и работающие фреймворки, но специалистов знакомым с этим делом заметно меньше чем для мира веб приложений на java. Да и вообще, из моей практики, достойного програмиста на java найти легче чем на C++.
                          0
                          Насчет специалистов видимо вы правы. Но с другой стороны - найти специалиста по PHP проще, чем по Java (хотя шлака там ооочень много :)

                          В общем согласен, но меня этот фактор пока не пугает... (может и зря - ну да время покажет)
                            0
                            Я просил уже вас на rpod'е, и Повторяю тут свою просьбу. Порасскажите о Java for Web. Тем более, вас слушает такое количество php-шников, которых не любит (окей, развел на флейм) ваш коллега bobuk. Вот и просветили бы, надеюсь, многим будет интересно.
                              0
                              Я бы рассказал, но тема черезчур узкая, на мой взгляд. У нас все таки подкаст не для проф. программеров, а для более широкой аудитории.
                                0
                                А жаль, что до сих пор нет хорошего подкаста для профессиональных программеров на русском.

                                Хотя я и на английском ни одного не знаю.
                                  0
                                  На английском должно быть в достатке. По дотнету, во всяком случае, так и есть.
                                    0
                                    Ну до .NET мне далеко как до луны :)
                            0
                            сам прогаю на java и мне очень нравится, поэтому я бы порекомендовал ее..
                            Если хотите большой и хороший проект - spring/hibernate нужно знать обязательно (опционально можно прикрутить 5ый tapestry), ну и не забываем про jakarta commons. Как показывает практика, при таких раскладах к j2ee можно не прикасаться (это хорошо!).
                            Кстати удивило сравнение джавы и плюсов, обычно ее сравнивают с шарпом.

                            p.s. А про ruby - зря вы так. Присмотритесь к рельсам - очень прогрессивная вещь.
                              0
                              Насчет шарпа - он сразу отметается, как представитель win-индустрии. Никсы, только никсы, они, родимые.

                              Рельсы уже давно покурил, прикольно конечно, но это узкая ниша. Сомневаюсь, что чего-то подобного нет под плюсы
                              –1
                              Как можно считать Java и C++ одинаковыми языками?
                              Да хотя бы потому, что в Java есть GC, а в C++ его вообще нет и быть не может.
                                0
                                Я разве где-то назвал их одинаковыми языками?
                                "Технологии примерно одного класса" - вот что я говорил.
                                В больших проектах думаю наличие/отсутствие GC будет не очень сказываться. И хотя это довольно философское различие двух языков программирования, технологии очень близкие...
                                0
                                Простите, уважаемые, хабра-люди, но то, чот вы говорите - бред сивой кобылы. Простите, ещё раз.
                                С одной стороны вы говорите, что Java - лидирующий фрэймворк. Тогда возникает вопрос, что такое за C++ за страшный фрэмворк?

                                С другой стороны как можно сравнивать кроссплатформенную Java с C++?

                                Вообщем, это называется так: "Какай хороший язык Java".:)

                                p.s. Автор случайно не из Единой России? Уж очень похож подчерк :)
                                  0
                                  хорошая мысль, только хочу немного поправить: java - это не фреймворк
                                  p.s. ПО поводу ЕР - а что у вас на Украине они тоже отжигают?
                                    0
                                    Какой еще фреймворк?

                                    И при чем тут кросс-платформенность? Мы вроде не софт для мобильников обсуждаем, а серьезную серверную разработку, причем строго под никсы.

                                    p.s. руки прочь от автора, автор - наш человек, я его лично знаю :)
                                    0
                                    Берите Java ! :) Сравнение Java и С++ для веб разработок - эксклюзив в общей сложности. Единственное что я могу сказать по сути вопроса - eBay мигрирует с ISAPI на С++ к Java, если верить этому.

                                    C C++ проблем будет куда больше (на истину в последней инстанции я не претендую).

                                    А почему так сразу отметаются Perl и Python ? Под mod_perl и mod_python можно писать (хендлеры для апача) и получить неплохие результаты. На С можно делать тоже самое, только это решение может оказаться "золотым".
                                      0
                                      Обсуждаем Java и C++. Perl и Python - это иное...
                                        0
                                        ...дабы не плодить излишних холиваров...
                                          0
                                          ОК. Попробуйте найти реализованный на C++ ORM фреймворк, MVC фреймворк и движок шаблонов. Очень полезные вещи в народном хозяйстве.
                                            0
                                            По-моему, это дискуссия того же плана, что "php vs не-php", лучшая серверная ОС и т.д. Автору нужно немного конкретизировать задачу.

                                            Дело не только в том, кто быстрее, стабильнее, и более стильно собирает мусор, но и в сложности/дороговизне поддержки, лёгкости нахождения специалистов и т.п.
                                              0
                                              Задача стоит довольно конкретно. Необходима среда для веб-разработки хорошо документированая и хорошо поддерживаемая. Все же IMHO Java в этом плане лучше C++
                                        +1
                                        Ну... блин, дожились! Теперь у нас С++ и Java - инструменты одного класса... :\
                                          0
                                          У меня в городе знаю с десяток контор, которые пишут под j2ee, не только веб, но в основном конечно он самый. Есть .NET, но его не рассматриваем. Не знаю ниодного человека который бы учавствовал в разработке чего-то под веб на С++. Исключениями в этой области могут послужить разве что какие-то поисковые машины или другие масштабные системы. Но и в масштабируемости думаю Java на голову выше C++, благодаря готовым наработкам.
                                          К тому же и сам язык в разы удобнее и безопаснее, и набор инструментов такой, что удовлетворит любые потребности.
                                          Так что лично для меня выбор очевиден :)

                                          BTW, про PHP: друг фрилансер недавно сказал что нашёл одного буржуя, который хотел веб-проект небольшой(!), в принципе, если проект маленький, то можно использовать и PHP не особо напрягясь. Да и человека действительно легче найти и можно меньше заплатить. Так вот этот заказчик поставил сразу условие: "только не PHP".
                                            0
                                            Накидайте плз ссылок на фреймворки на С++ для девелопинга под веб...
                                            0
                                            Тут еще можете уточнить:
                                            http://bacek.livejournal.com/281100.html
                                              0
                                              Добрый день
                                              Спору нет, на С++ сложно девелопить вообще.
                                              Но почему его всё ещё используют, и не собираются отказываться?
                                              Грамотная комбинация инструментов gcc,gdb,make,cvs,...
                                              тщательный подход к сбору логов, статистики, профилированию, возможности отката ситуации,
                                              Наличие стандартной библиотеки STL, наличие огромного количества исходников, которые можно заюзать в проекта,
                                              делает этот язык, технологию вполне пригодным и перспективным для веб разработок, с учётом увеличения трафика (возможности оптимизации почти бесконечны).
                                              Так же, в отличие от пыхала, гораздо проше писать код для многократного применения, да и вообще создавать новые технологии, но это имхо.
                                              а если следовать unix away то можно легко строить большие проекты, используя связки различных технологий (языки), чему весьма способствует веб.
                                              Ни кто не запрещает скриптовыми языками создавать прототипы, а на плюсы уже переносить готовые решения.
                                                +1
                                                Некоторые размышления о технологиях

                                                О сложности использования.
                                                Не так давно пробовал, насколько просто можно писать под C++ FastCGI-шные веб-приложения.
                                                Оказалось, не сложнее, чем на любом другом языке (не путать с фреймворками, где вся эта радость уже out-of-the-box крутится и просит только веб-сервер правильно настроить).
                                                Для себя сделал вывод - имея команду хороших C++-разработчиков "с нуля" проекты можно писать в сравнимые с остальными языками сроки.

                                                О производительности.
                                                Средняя скорость выполнения C++-программы быстрее Java.
                                                Подробнее сравнить можно на сайте Computer Language Benchmarks Game (http://shootout.alioth.debian.org/gp4/benchmark.php?test=all), и сделать вывод, что Java - самая быстрая технология после языков, которые компилят native code.
                                                Но этот вопрос в отношении веба скорее решается грамотным кэшированием, кластеризацией и инвестициями в железо.

                                                О распространенности.
                                                Количество существующих наработок в области веб-разработки под Java однозначно больше, чем под C++, к тому же больше опытных разработчиков и коммьюнити более информативное.

                                                О безопасности.
                                                На C++ гораздо легче наделать ошибок, приводящих к серьезным проблемам с безопасностью - на каждом шагу подстерегает переполнение буфера и выполнение произвольного кода с привилегиями веб-сервера.
                                                Java-машина - среда изолированная, и через нее гораздо сложнее нанести вред ОС сервера. Но в коде Java-машины вполне может быть дыра, которую найти и ликвидировать своими силами гораздо сложнее, чем в собственном C++-коде.

                                                ну и, как всегда, YMMV:)
                                                  0
                                                  Если не секрет, использовали ли какой-нибудь фреймворк?
                                                  И очень интересно про шаблонизацию...

                                                  ps: я больше не верю в фреймворки...
                                                    0
                                                    Для C++ пробовал Wt, но штука своеобразная - по сути, event-driven ajax framework %)
                                                    То есть, внутри гораздо больше напоминает Qt (сигналы/слоты), чем привычные веб-фреймворки.
                                                    Мое имхо - если уж использовать C++, то писать все с нуля, и добиваться максимальной производительности, затачивая код под конкретный проект.
                                                    Из движков шаблонов смотрю в сторону teng, он отпарсенные темплейты компилит в свой хитрый байт-код, и еще и кэшировать умеет. Плюс к тому же работает с разными языками - то есть можно быстренько написать proof of concept и если все гут, то писать уже C++-версию.
                                                    Еще думаю про использование HAML - с ним верстать получается гораздо быстрее, и работать он умеет как отдельный парсер. Да и вообще думаю в сторону какого-нить libhaml, которого пока еще нет, но ведь можно сделать:)

                                                    а по поводу фреймворков - из них хороши только те, что предоставляют защиту от закона дырявых абстракций, иначе придется кучу времени убить на пляски с бубном, чтобы пробраться на более низкий уровень %)
                                                  0
                                                  Это что шутка?
                                                  JEE это уже индустриальный стандарт: Инфраструктура, устоявщиеся технологии, сообщества.

                                                  В данном контексте с++ и JEE - это соврешенно разные и несопоставимые вещи.
                                                  C++ бесспорно можно использовать но исключительно в единичный и уникальных бекендах где потребуется сверхвысокая производительность.

                                                  Примешивать сюда пхп с питоном, так же полнейшая глупость, их с JEE роднит только то что и то и другое для веба можно использовать. Совершенно различные весовые категории. JEE для крупных и средних корпоративных проектов. php для малых и средних.
                                                  • НЛО прилетело и опубликовало эту надпись здесь

                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                    Самое читаемое