Многие люди видят сходство между Java и С++.
Но когда дело доходит до веб-разработки, JavaEE используется. В то время как С++ мало поддерживает это? С++ - это быстро. Почему он не используется в веб-разработке?
Многие люди видят сходство между Java и С++.
Но когда дело доходит до веб-разработки, JavaEE используется. В то время как С++ мало поддерживает это? С++ - это быстро. Почему он не используется в веб-разработке?
Зачастую возможно более быстрая скорость выполнения С++ не имеет значения, поскольку узким местом является база данных и сетевой ввод-вывод.
Таким образом, преимущества от простоты/скорости разработки, безопасности (действительно отстой, когда выкладывают ядро вашего веб-приложения), а доступность фреймворков перевешивает прирост скорости выполнения для многих приложений.
С++ может быть быстрым в скорости выполнения, но Java, С#, PHP и т.д. быстрее вовремя выходят на рынок.
ИМХО, все дело в цепочке инструментов. Java, Ruby и т.д. Имеют зрелые цепочки инструментов для веб-разработки. В большинстве случаев инструменты ускоряют работу. Есть некоторые среды для С++, но ни один из них не имеет широкого использования. Другая важная причина этого в том, что большинство новых языков разработаны для разработки приложений в первую очередь и для общего назначения.
Я бы пошёл с ответом Карла Фойгтланда (хотя мне тоже нравится Дэн Дипло), но я хотел добавить, что я лично работаю в компании, где скорость - это все (в сопоставимых с Google способами), и я все равно не буду " t использовать С++ для веб-приложения, потому что разница в производительности будет абсолютно ничтожной, особенно по сравнению с узким местом ввода-вывода и сетевой латентностью, которая в любом случае является реальной проблемой.
С++ стоит вам стандартную, хорошо документированную, широко используемую инфраструктуру (в зависимости от того, что произойдет), которая составляет огромный кусок работы, которую вам придется реплицировать, и ставит вас на территорию, если что-то пойдет не так.
Так много усилий и столько риска, чтобы не получить никакой выгоды. С++ - это оружие для более старого цивилизованного возраста, это не для Интернета.
Я работал над чрезвычайно высокопроизводительным веб-сайтом, созданным на С++, с настраиваемой инфраструктурой. Мы не использовали Apache - у нас был доменный веб-сервер, который мог быстро и эффективно обслуживать наш специальный контент, который был закодирован вручную на С++.
Этот сервер обрабатывал запросы, которые поступали с того, что было в то время самым высоким рейтингом телевизионного шоу в прайм-тайм. (Хозяин сказал бы: "Войдите в систему, чтобы... ком играть" ). Мгновенно, 100 000 и более человек будут колотить сервер. Один обычный ПК смог справиться с нагрузкой, но у нас было 3 работы, просто в случае, если один опустился и т.д.
Факт в том, что системы, которые мы используем для веб-разработки, сейчас крайне бесполезны. Мы используем циклы CPU для удобства обслуживания.
Взгляните на такие архитектуры, как http://acme.com/software/thttpd/, которые являются чрезвычайно быстрыми веб-серверами.
Если вам когда-либо приходилось разрабатывать веб-приложение на С++, вы бы знали, почему. В принципе, нет ничего приближающегося к инфраструктурам, которые .NET, Java или PHP не имеют и не имеют каких-либо веб-функций, таких как ROR или Django.
Веб-разработка полна людей, которые попали туда, где они находятся, от редактирования HTML, и у них гораздо меньше людей, которые попали туда с С++ или C. Тенденция для большинства этих веб-разработчиков заключается в выборе более простых языков с сборкой мусора, которые определяют приоритетность быстрых результатов по производительности. С++ на самом деле действительно не такой langauge.
Но это только поверхностное чтение. В основном это о моде.
Я создаю браузерную игру на С++, и да, некоторые части окончательно сосут (например, используя FastCGI, который не поддерживает сразу несколько подключений, если только вы не используете собственный FastCGI-Handler, CGI еще хуже, SCGI не поддерживает мультиплексирование (но это прелесть для реализации), и использование пользовательского API сервера не переносится), однако, как только вы настроите среду, разработка не так уж трудна.
Например, следующий код печатает все файлы cookie:
for( map<string,string>::const_iterator it=data[cookie].begin(); it!=data[cookie].end(); ++it)
{
cout << "<b>" << it->first << "</b>: " << it->second << "<br>\n";
}
Или, если вы хотите создавать веб-приложения так же, как и с Qt, посмотрите Wt, что уменьшает боль при разработке С++ -Спасибо за использование ручного управления памятью.
Я думаю, что ответ больше связан с историей, чем с чем-либо еще.
С++ был создан для таких задач, как системное программирование задолго до того, как существовало веб-разработка. Поскольку он уже давно придерживается стандартов ИСО, сам язык позволяет избежать конкретных проблемных областей.
Что касается веб-разработки, то С++ был запущен Java и все остальное, что появилось после того, как появились инструменты для веб-разработки.
Но С++ - цепкий маленький зверь, благодаря (IMHO) его мощная комбинация эффективности и элегантности. Обычно вы должны смотреть за пределы С++ в библиотеки, когда речь идет о довольно высокоуровневых функциях, таких как веб-разработка. С++ первоклассная библиотека, boost, имеет низкоуровневые хорошо продуманные рецензируемые многопоточные сетевые инструменты (boost:: asio). Простые http-клиент и серверные примеры уже предоставлены и будут расти и стабилизироваться.
Я думаю, что С++ находится на подъеме в этой области, учитывая, что он начал работать с последнего места.
UPDATE: здесь является примером строгого процесса рассмотрения, прежде чем что-либо будет принято в boost (в данном случае, отказ от библиотеки процессов). И, как вы можете себе представить, процесс обзора, чтобы фактически попасть в стандарт С++, будет намного выше. Существует определенное намерение сохранить объем С++ (и повысить) плотным и прочным.
С++ обычно был общим языком для веб-разработки. В то время, однако, было мало жизнеспособных альтернатив. Языки, такие как С# и Java, предназначены для разработки приложений, а не для общего назначения, поэтому они лучше подходят для веб-приложений.
Некоторые из вас должны исследовать концепцию: "Приобретение ресурсов - это инициализация. Кроме того, у меня не было coredump, написавшего современный код на С++ в течение... лет? С++, вероятно, не в моде, поскольку он предназначен для портативного машинного кода, который компилируется на многих архитектурах. Таким образом, нет стандартных сетевых или потоковых библиотек, и это поднимается до цепочки в веб-инфраструктуру.
Когда сеть впервые вышла, скорость не была большой. Мы запускали серверы на машинах Unix, которые имели более чем достаточную мощность для заполнения 10 Мбит Ethernet. Несколько пользователей были на dialup, и сайты были в основном текстовыми. Таким образом, мы использовали Perl, просто потому, что было легко выполнять строковые манипуляции, некоторые из нас даже использовали TCL (дрожь).
К тому времени, когда сеть взлетела достаточно, чтобы потребоваться более сложные системы, динамические языки стали лучше и появились с множеством полезных библиотек (особенно Perl). Тогда бизнес, купленный на Java в большой степени - Sun действительно удалось что-то продать!
Нет причин, по которым у нас не было бы всех веб-функций Java/С# в С++, но libs не были разработаны или никогда не получили широкого сцепления.
В С++ было много веб-разработок, но, как правило, в пользовательских веб-серверах выполнялись очень высокопроизводительные задачи.
Я разработчик С++, который сначала перешел на Java (Scala), а затем частично перешел на С++ 11.
Несколько причин, почему С++ не широко используется для веб-разработки:
Во-первых, библиотеки java и С# значительно отличаются от С++. "Стандартный" С++ почти ничего не интересен для веб-разработки. Стандартная библиотека С++ даже не имеет ни малейшего отношения к сетевой, потоковой или переносной файловой системе. Я сомневаюсь, что скорость С++ - это очень важный фактор: java и С#, как правило, такие же быстрые, как С++, в настройках сервера (где вы можете использовать полные возможности JIT для времени выполнения, потому что время начала и co не вызывает беспокойства).
Потому что С++ трудно узнать.
Для каждого типа работы вам нужен соответствующий инструмент. Можно вбить гвоздь в доску, ударив ее двумя плоскогубцами, но молот намного лучше подходит для него.
Потому что веб-разработка включает в себя много HTML. В старые времена Java существовал только сервлет, и это было контрпродуктивно. Поэтому они изобрели JSP.
С++ хуже, чем Servlet с этой точки зрения.
И в самые старые времена сборщики ребята делали вид, что С++ был хромым, и что использование языков Assembly было намного лучше, поэтому ваш вопрос относится к тому же виду.
потому что я хотел бы выпрыгнуть из окна каждое утро, когда я приеду на работу.
Согласились, что рамки важны и решают много типичных проблем для вас. С++ не будет иметь эти рамки для вас. Кроме того, вы можете оптимизировать производительность на одном уровне, но это может не привести к наиболее оптимальному решению. Время доступа БД, с более крупным сайтом, вероятно, гораздо более серьезное беспокойство и которое, скорее всего, стоит больше беспокоиться, чем время выполнения вашего приложения.
Кроме того, вы говорите о веб-разработке, где ситуация быстро меняется. С++ не является языком выбора в этом поле, и вы останетесь неподвижным, пытаясь догнать остальную толпу, которая хорошо играет вместе.
Придерживайтесь толпы, используйте то, что там. Не оптимизируйте локально. Тебе лучше.
Представьте, что вам нужен сайт. Доступны два варианта: 1. Оплатите x сумму денег и создайте сайт в течение y времени, используя .net/java/python/ruby /ect. 2. Платите xn сумму денег и развивайте в течение ym количество времени, используя С++ (FastCGI). Wherees n и m равны 3-5+. Что бы вы предпочли?
Другая причина заключается в том, что намного проще писать тонко небезопасный код (переполнение буфера и т.д.) на С++, чем на языках с надлежащими ограничениями, проверяющими абстрагирование необработанной памяти от разработчика. С++ требует гораздо большего навыка для безопасного использования, чем альтернативы.
С++ не очень удобен для веб-разработки, потому что программист должен учитывать, что объекты разрушены должным образом. В таких языках, как С# и JAVA, нет необходимости создавать деструкторы, потому что объекты, созданные экземпляром, живут только в определенной области. Таким образом, вы можете сказать, что такие языки, как С# и JAVA, более полезны для веб-приложений, чем С++.