Почему С++ не используется в веб-разработке?

Многие люди видят сходство между Java и С++.

Но когда дело доходит до веб-разработки, JavaEE используется. В то время как С++ мало поддерживает это? С++ - это быстро. Почему он не используется в веб-разработке?

Ответ 1

Зачастую возможно более быстрая скорость выполнения С++ не имеет значения, поскольку узким местом является база данных и сетевой ввод-вывод.

Таким образом, преимущества от простоты/скорости разработки, безопасности (действительно отстой, когда выкладывают ядро ​​вашего веб-приложения), а доступность фреймворков перевешивает прирост скорости выполнения для многих приложений.

Ответ 2

С++ может быть быстрым в скорости выполнения, но Java, С#, PHP и т.д. быстрее вовремя выходят на рынок.

Ответ 3

ИМХО, все дело в цепочке инструментов. Java, Ruby и т.д. Имеют зрелые цепочки инструментов для веб-разработки. В большинстве случаев инструменты ускоряют работу. Есть некоторые среды для С++, но ни один из них не имеет широкого использования. Другая важная причина этого в том, что большинство новых языков разработаны для разработки приложений в первую очередь и для общего назначения.

Ответ 4

Я бы пошёл с ответом Карла Фойгтланда (хотя мне тоже нравится Дэн Дипло), но я хотел добавить, что я лично работаю в компании, где скорость - это все (в сопоставимых с Google способами), и я все равно не буду " t использовать С++ для веб-приложения, потому что разница в производительности будет абсолютно ничтожной, особенно по сравнению с узким местом ввода-вывода и сетевой латентностью, которая в любом случае является реальной проблемой.

С++ стоит вам стандартную, хорошо документированную, широко используемую инфраструктуру (в зависимости от того, что произойдет), которая составляет огромный кусок работы, которую вам придется реплицировать, и ставит вас на территорию, если что-то пойдет не так.

Так много усилий и столько риска, чтобы не получить никакой выгоды. С++ - это оружие для более старого цивилизованного возраста, это не для Интернета.

Ответ 5

Я работал над чрезвычайно высокопроизводительным веб-сайтом, созданным на С++, с настраиваемой инфраструктурой. Мы не использовали Apache - у нас был доменный веб-сервер, который мог быстро и эффективно обслуживать наш специальный контент, который был закодирован вручную на С++.

Этот сервер обрабатывал запросы, которые поступали с того, что было в то время самым высоким рейтингом телевизионного шоу в прайм-тайм. (Хозяин сказал бы: "Войдите в систему, чтобы... ком играть" ). Мгновенно, 100 000 и более человек будут колотить сервер. Один обычный ПК смог справиться с нагрузкой, но у нас было 3 работы, просто в случае, если один опустился и т.д.

Факт в том, что системы, которые мы используем для веб-разработки, сейчас крайне бесполезны. Мы используем циклы CPU для удобства обслуживания.

Взгляните на такие архитектуры, как http://acme.com/software/thttpd/, которые являются чрезвычайно быстрыми веб-серверами.

Ответ 6

Если вам когда-либо приходилось разрабатывать веб-приложение на С++, вы бы знали, почему. В принципе, нет ничего приближающегося к инфраструктурам, которые .NET, Java или PHP не имеют и не имеют каких-либо веб-функций, таких как ROR или Django.

Ответ 7

Веб-разработка полна людей, которые попали туда, где они находятся, от редактирования HTML, и у них гораздо меньше людей, которые попали туда с С++ или C. Тенденция для большинства этих веб-разработчиков заключается в выборе более простых языков с сборкой мусора, которые определяют приоритетность быстрых результатов по производительности. С++ на самом деле действительно не такой langauge.

Но это только поверхностное чтение. В основном это о моде.

Ответ 8

Я создаю браузерную игру на С++, и да, некоторые части окончательно сосут (например, используя 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, что уменьшает боль при разработке С++ -Спасибо за использование ручного управления памятью.

Ответ 9

Я думаю, что ответ больше связан с историей, чем с чем-либо еще.

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

Что касается веб-разработки, то С++ был запущен Java и все остальное, что появилось после того, как появились инструменты для веб-разработки.

Но С++ - цепкий маленький зверь, благодаря (IMHO) его мощная комбинация эффективности и элегантности. Обычно вы должны смотреть за пределы С++ в библиотеки, когда речь идет о довольно высокоуровневых функциях, таких как веб-разработка. С++ первоклассная библиотека, boost, имеет низкоуровневые хорошо продуманные рецензируемые многопоточные сетевые инструменты (boost:: asio). Простые http-клиент и серверные примеры уже предоставлены и будут расти и стабилизироваться.

Я думаю, что С++ находится на подъеме в этой области, учитывая, что он начал работать с последнего места.

UPDATE: здесь является примером строгого процесса рассмотрения, прежде чем что-либо будет принято в boost (в данном случае, отказ от библиотеки процессов). И, как вы можете себе представить, процесс обзора, чтобы фактически попасть в стандарт С++, будет намного выше. Существует определенное намерение сохранить объем С++ (и повысить) плотным и прочным.

Ответ 10

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

Ответ 11

Некоторые из вас должны исследовать концепцию: "Приобретение ресурсов - это инициализация. Кроме того, у меня не было coredump, написавшего современный код на С++ в течение... лет? С++, вероятно, не в моде, поскольку он предназначен для портативного машинного кода, который компилируется на многих архитектурах. Таким образом, нет стандартных сетевых или потоковых библиотек, и это поднимается до цепочки в веб-инфраструктуру.

Ответ 12

Когда сеть впервые вышла, скорость не была большой. Мы запускали серверы на машинах Unix, которые имели более чем достаточную мощность для заполнения 10 Мбит Ethernet. Несколько пользователей были на dialup, и сайты были в основном текстовыми. Таким образом, мы использовали Perl, просто потому, что было легко выполнять строковые манипуляции, некоторые из нас даже использовали TCL (дрожь).

К тому времени, когда сеть взлетела достаточно, чтобы потребоваться более сложные системы, динамические языки стали лучше и появились с множеством полезных библиотек (особенно Perl). Тогда бизнес, купленный на Java в большой степени - Sun действительно удалось что-то продать!

Нет причин, по которым у нас не было бы всех веб-функций Java/С# в С++, но libs не были разработаны или никогда не получили широкого сцепления.

В С++ было много веб-разработок, но, как правило, в пользовательских веб-серверах выполнялись очень высокопроизводительные задачи.

Ответ 13

Я разработчик С++, который сначала перешел на Java (Scala), а затем частично перешел на С++ 11.
Несколько причин, почему С++ не широко используется для веб-разработки:

  • Безопасность. Интерпретаторы и "управляемые" языки (например, JVM) предоставляют некоторую защиту от ошибок, которые могут привести к выполнению злокачественного кода: переполнение буфера, повреждение памяти и т.д. Каждая большая программа имеет ошибки, но в Java эти ошибки будет редко приводить к взлому, контролирующему ваш сайт. В С++ слишком легко совершить ошибку (или использовать библиотеку, которая допустила ошибку), что приводит к взлому системы. Этот "недостаток" в "системных" языках программирования теперь смягчается наличием простых системных брандмауэров, таких как AppArmor. Я установил профиль AppArmor для всех моих программ на C/С++, и я бы не вернулся на С++, если такие системные брандмауэры недоступны.
  • Простота разработки: С++ только недавно приобрел автоматическое управление памятью (shared_ptr), анонимные функции, для циклов, ввода типа и т.д. Современный С++ 11 является достойным языком, но старый С++ гораздо сложнее разрабатывать, чем альтернативы.
  • Слишком много разнообразия: в Java существует стандартный способ создания веб-разработки (Sevlets), на С++ нужно искать один путь между различными библиотеками и фреймворками методом проб и ошибок. Путь к хорошей комбинации библиотек в С++ может занять много лет.

Ответ 14

Во-первых, библиотеки java и С# значительно отличаются от С++. "Стандартный" С++ почти ничего не интересен для веб-разработки. Стандартная библиотека С++ даже не имеет ни малейшего отношения к сетевой, потоковой или переносной файловой системе. Я сомневаюсь, что скорость С++ - это очень важный фактор: java и С#, как правило, такие же быстрые, как С++, в настройках сервера (где вы можете использовать полные возможности JIT для времени выполнения, потому что время начала и co не вызывает беспокойства).

Ответ 15

Потому что С++ трудно узнать.

Ответ 16

Для каждого типа работы вам нужен соответствующий инструмент. Можно вбить гвоздь в доску, ударив ее двумя плоскогубцами, но молот намного лучше подходит для него.

Ответ 17

Потому что веб-разработка включает в себя много HTML. В старые времена Java существовал только сервлет, и это было контрпродуктивно. Поэтому они изобрели JSP.

С++ хуже, чем Servlet с этой точки зрения.

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

Ответ 18

потому что я хотел бы выпрыгнуть из окна каждое утро, когда я приеду на работу.

Согласились, что рамки важны и решают много типичных проблем для вас. С++ не будет иметь эти рамки для вас. Кроме того, вы можете оптимизировать производительность на одном уровне, но это может не привести к наиболее оптимальному решению. Время доступа БД, с более крупным сайтом, вероятно, гораздо более серьезное беспокойство и которое, скорее всего, стоит больше беспокоиться, чем время выполнения вашего приложения.

Кроме того, вы говорите о веб-разработке, где ситуация быстро меняется. С++ не является языком выбора в этом поле, и вы останетесь неподвижным, пытаясь догнать остальную толпу, которая хорошо играет вместе.

Придерживайтесь толпы, используйте то, что там. Не оптимизируйте локально. Тебе лучше.

Ответ 19

Представьте, что вам нужен сайт. Доступны два варианта: 1. Оплатите x сумму денег и создайте сайт в течение y времени, используя .net/java/python/ruby ​​/ect. 2. Платите xn сумму денег и развивайте в течение ym количество времени, используя С++ (FastCGI). Wherees n и m равны 3-5+. Что бы вы предпочли?

Ответ 20

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

Ответ 21

С++ не очень удобен для веб-разработки, потому что программист должен учитывать, что объекты разрушены должным образом. В таких языках, как С# и JAVA, нет необходимости создавать деструкторы, потому что объекты, созданные экземпляром, живут только в определенной области. Таким образом, вы можете сказать, что такие языки, как С# и JAVA, более полезны для веб-приложений, чем С++.