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

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

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

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

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

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

    Комментарии 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 для малых и средних.
                                                  • НЛО прилетело и опубликовало эту надпись здесь

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

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