Сегодня утром я смотрел на несколько разных веб-серверов, когда наткнулся на G-WAN . Насколько я понимаю, это веб-сервер, написанный на C, и вы должны использовать его, написав свои веб-сайты / веб-приложения на C. Одно очевидное преимущество - это скорость, как предлагает сайт G-WAN.
Однако на форумах создатель G-WAN спросил, почему бы не использовать C для веб-приложений, и я не могу придумать ни одной причины, кроме трудностей (в любом случае, я новичок, когда дело доходит до C). Должно быть больше причин, по которым мы все используем PHP, Python, Ruby и т. Д., Помимо того, что на этих языках легко разрабатывать. Я не считаю это веской причиной.
Итак, я задаю вам вопрос: почему вы не используете C для своих веб-приложений?
php
c
web-applications
Abs
источник
источник
Ответы:
Чтобы программа на языке C была правильной и безопасной, требуется много внимания. Эта забота означает, что вам нужны действительно хорошие люди, пишущие ваши программы. Это означает, что вы платите больше.
Кроме того, у C нет возможности использовать огромную единую стандартную библиотеку функций, как у .NET (и других основных веб-ориентированных платформ). Таким образом, вам, возможно, придется либо покупать компоненты, либо выполнять взаимодействие, либо использовать собственную функциональность, которая поставляется «бесплатно» с дополнительным, скажем так, «веб-ориентированным» языком, таким как PHP, C #, Ruby или что-то еще. Это означает, что вы платите больше.
Добавьте все это к тому факту, что скорость однопоточных вычислений не так важна в Интернете. Если вам нужна большая масштабируемость, большинство организаций могут просто добавить больше ядер для решения проблемы и все будет в порядке. Конечно, это верно не для всех. Я полагаю, что ядро движка Google написано на C или подобном языке не только для скорости, но и для экономии реальных денег на расходах на электроэнергию.
источник
Хм ...
Кажется, я немного опоздал в этом обсуждении - но я только что обнаружил это сейчас. И я благодарен всем вам за такой большой вклад.
Я автор G-WAN, что дает понять, что я серьезно работал над этим вопросом: G-WAN и быстрее, чем все другие веб-серверы (без обработки), и все другие серверы веб-приложений (любая обработка, которую вы можете себе представить).
Да, ANSI C также сделал возможным обрабатывать больше статического контента - с менее мощными процессорами (ANSI C не только заставляет динамическое содержимое летать).
Между прочим, G-WAN использует сценарии C (компилятор C и компоновщик не нужны), поэтому цикл / задержка компиляции / компоновки не существует.
В процессе сравнения G-WAN с .NET Java и PHP я написал похожие приложения на всех 4 языках: http://gwan.ch/source/
И, к моему разочарованию, современные языки сценариев не были проще в использовании.
Одна часть работы, которая особенно расстраивает, - это отчаянный поиск «волшебного» вызова API, который сделает то, что вы хотите.
Подумайте, как сделать "довольно тысячи" за:
C #
Ява
PHP
ANSI C
"..." означает, что необходима предварительная настройка или постобработка. Очевидно, что ANSI C легче использовать и запоминать.
Когда PHP имеет более 5900 вызовов API (недалеко от C # и Java), поиск правильного вызова API сам по себе является проблемой. Время, потраченное на то, чтобы найти это (а затем выяснить, насколько плохо реализован вызов собственного API), время, чтобы научиться этому в следующий раз, когда он вам понадобится, все это время лишает вас времени, необходимого для решения вашего приложения проблемы.
Я читал (выше), что PHP более лаконичен, чем ANSI C? Зачем тогда использовать,
"//:: this is a comment ::"
а не"// this is a comment"
? Почему у вас такой дурацкий сложный синтаксис "довольно тысячи"?Другой обычный аргумент заключается в том, что Java и тому подобное предоставляют специальные вызовы для веб-приложений.
Мне не удалось найти ничего, что могло бы избежать HTML в Java, поэтому я написал свою версию:
Вы действительно верите, что тот же код в ANSI C был бы более сложным? Нет, это было бы намного проще и быстрее.
Java (производный от C) требует от программистов связывать многострочные строки с '+'.
C # (производный от C) требует от программистов связывать многострочные строки с '+'.
PHP (производный от C) требует программистов связывать многострочные строки с "."
В ANSI C нет этого теперь совершенно глупого (устаревшего) требования.
Итак, были ли заявлены современные языки на столь очевидный прогресс? Я все еще ищу это.
С уважением,
Пьер.
источник
, amount)
, PHP работает как есть, а вашему примеру ANSI C требуются еще два аргумента (буфер и длина буфера). Ваш пример, за исключением Java, похоже, доказывает обратное. Кроме того, я никогда раньше не видел такого//:: comment ::
синтаксиса; PHP определенно не требует этого.По той же причине, по которой мы не используем C для большинства программ. Выгоды (в основном, производительность) не перевешивают затраты (время разработки, отсутствие автоматического управления памятью, отсутствие автоматической защиты от переполнения буфера, наличие стадии компиляции между стадиями редактирования и тестирования и т. Д.).
источник
Большинство сетевых приложений, особенно веб-серверов, гораздо более привязаны к вводу-выводу, т. Е. Они способны перекачивать данные намного быстрее, чем сеть может их принять. Поэтому то, что высокоэффективно с точки зрения ЦП, не является большой победой, в то время как то, что масштабируется и обслуживается. Так что нет причин признавать недостатки C и терять преимущества управляемой среды, такой как Java, .NET, Python, Perl или других языков.
источник
C не является удобным языком для работы со строками.
Сравните C #:
Соответствующий C:
источник
printf
должен выполнять эту работу.Если бы сложность и сложность вообще не были проблемой (ха!), То я бы не остановился на C. Я бы написал сборку x86. Прошло много лет с тех пор, как я использовал веб-сервер, отличный от x86, и с каждым днем это выглядит все менее и менее вероятным.
Использование C (вместо сборки или чего-то более высокого уровня) означает предположение, что C - это золотая середина эффективности программиста и производительности компьютера.
В случае с программами, которые я пишу, дело обстоит не так: C плохо соответствует типам программ, которые я хочу написать, и его преимущества перед приличным макроассемблером не так уж и значительны. Программа, которую я пишу прямо сейчас, несложна в моем любимом HLL, но ее сложность как на ассемблере, так и на C будет настолько высока, что она никогда не будет завершена. Я признаю, что достаточно умный программист с достаточным временем мог бы заставить его работать быстрее на ассемблере или C, но я не такой программист.
источник
источник
eval
и phpinclude
? Пожалуйста, в C / C ++ вы не утверждаете, что хотите выполнить произвольный код, это просто так.eval
это не ошибка, это намерение программиста. В C / C ++ любая ошибка может привести к удаленному выполнению кода, в динамических языках это не так, если только какой-то дурак не возитсяeval
.Я знаю, что на этот вопрос уже дан смертельный ответ, но есть две вещи, не упомянутые до сих пор, которые чрезвычайно важны для успеха в любой парадигме программирования, и особенно в веб-разработке, где вы получаете много людей, которые не обязательно программисты. работа с кодом.
Если бы у меня было критически важное приложение, требующее высочайшей производительности, я бы использовал C, но его написание заняло бы так много времени, что я бы никогда не вышел на рынок. Пока не будет №1 или №2, я не могу его использовать.
источник
C - это языки довольно низкого уровня для многих целей: без ООП, много ручного управления ресурсами.
Существует ограниченное использование C для Интернета, например Klone . Он в основном используется для встраиваемых приложений с низким уровнем ресурсов.
Однако существуют веб-фреймворки C ++, такие как CppCMS , которые используются для разработки высокопроизводительных веб-приложений.
C ++ позволяет вам наслаждаться высокой абстракцией и мелкозернистым доступом к тому, что вы делаете, что дает гораздо лучший вариант для развертывания и разработки больших приложений.
Но вы используете их в том случае, когда производительность и использование ресурсов намного важнее, чем время выхода на рынок и затраты на разработку, поскольку в целом веб-разработка происходит быстрее при использовании хороших веб-фреймворков для таких языков, как Java, Python или PHP. Также обычно есть менее компетентные программисты для C ++, чем для языков Java / P * за ту же зарплату.
Так что это вопрос приоритетов, также меньше инструментов для веб-разработки на C ++, чем для PHP / Python / Perl или Java.
источник
@Joeri Sebrechts
FUD в действии:
Ну вообще-то нет. Они совсем не масштабируются по вертикали и очень плохо масштабируются по горизонтали. См. Http://gwan.ch/en_scalability.html, где объясняется, сколько проблем ждут плохие исполнители.
Снова неправильно. Если библиотеки PHP были написаны на C, то их можно напрямую использовать из C - мгновенно обеспечивая «уникальную производительность», которую, как вы утверждаете, имеет PHP.
Чистый FUD (см. Ответ выше).
HipHop намного быстрее PHP, в этом нет никаких сомнений. Но если вы сравните HipHop с реализацией plain-C, у вас будет два уровня накладных расходов:
Кроме того, HipHop был написан в бессмысленном неэффективном академическом режиме (вне всякой реальной действительности). Конечно, это может впечатлить программистов PHP, но покажите этот код встроенному программисту, и он пожалеет Facebook.
«Язык, на котором нет всего, на самом деле легче программировать, чем на некоторых, которые есть», - Деннис М. Ричи
В отличие от (большинства) языков программирования КОНЕЧНЫЕ ПОЛЬЗОВАТЕЛИ, Деннис, похоже, кое-что знал об этом.
источник
Это вся причина и единственное, что нужно. У него много преимуществ, главная из которых - время выхода на рынок. Если вы сможете запустить свое веб-приложение в режиме онлайн за месяц, используя PHP, вместо двух месяцев, используя C, вы можете просто выиграть. Если вы можете добавить новую функцию за неделю, используя Ruby on Rails, вместо двух недель, используя C, вы снова выиграете. Если вы можете исправить ошибку за день, используя Python, вместо двух дней, используя C, вы снова выиграете. Если вы можете добавить функцию, потому что вы используете язык X, который ваши конкуренты не могут добавить вообще, потому что они используют язык Y, и это слишком сложно на этом языке с учетом их ограничений ресурсов, то вы определенно выиграете.
И под «победой» я действительно имею в виду, что вы не проигрываете.Ваши конкуренты используют языки и фреймворки более высокого уровня для разработки своих сайтов, поэтому, если вы используете C, вы не конкурируете с другими людьми, которые используют C, вы проигрываете другим людям, которые не используют C. Просто чтобы соревноваться, у вас есть использовать инструменты с аналогичным уровнем абстракции.
Если производительность становится проблемой, вы можете переписать медленные части вашего сайта на более эффективных языках. Или вы можете просто добавить больше оборудования. На самом деле, проблема производительности - это то, что мы называем «хорошей проблемой» - это означает, что вы уже добились успеха. Но тратить больше времени на разработку основных функций вашего сайта - вариант редко. Писать его на C только для того, чтобы он работал быстрее, - это преждевременная оптимизация, которая, как говорит нам Кнут, является корнем всех зол.
Все это означает, что если вы можете использовать язык с более высоким уровнем абстракции, чем Python или Ruby, вы можете победить людей, использующих Python или Ruby. Рассказ Пола Грэма о том, как он и его команда использовали LISP в качестве «секретного оружия» при разработке веб-сайтов, может быть поучительным. http://www.paulgraham.com/avg.html
Конечно, если вы разрабатываете сайт для собственного развлечения, делайте это на любом языке, который вам нравится. И если ваш сайт привязан к процессору (почти нет; обычно они привязаны к вводу-выводу), тогда используйте наиболее производительный язык, который вы можете. Однако если вы пытаетесь вводить новшества, используйте язык высокого уровня с лучшими абстракциями, которые вы можете найти.
источник
Вы думаете, что легкость - плохая причина. Думаю, это веская причина. Если вам нужна максимальная производительность, то C подойдет, но другие языки абстрагируются от сложных вещей, чтобы повысить производительность, удобство обслуживания и уменьшить количество дефектов.
источник
Учтите, что я не веб-разработчик, но все равно задам эти вопросы и предложу пару пунктов.
Какой веб-сайт написан только на одном языке? Серьезно, эта тема, кажется, предполагает, что один молоток подходит ко всем гвоздям.
Когда в последний раз кто-нибудь серьезно заявлял, что C комплексный? Я имею в виду, на самом деле, ребята, вы не можете получить намного более низкий уровень. Я не говорю о C ++ здесь, поскольку на них часто ссылаются вместе.
У C есть проблемы с безопасностью, которые нельзя отрицать, но разве они меньше, чем то, что можно увидеть в кладжах под названием PHP и Perl? В любом случае безопасный веб-сайт - это результат дисциплины программиста.
В любом случае к комментариям. Сложность использования любого данного языка очень зависит от решаемой проблемы. C и особенно C ++ могут привести к быстрому решению проблемы в опытных руках.
Промышленное использование веб-серверов, то есть встроенные серверы / сайты, просто не имеют выбора языка, который может быть у обычного веб-сервера. Таким образом, вы в конечном итоге используете вариант C или, возможно, что-то вроде BASIC. Ваша цель - предложить функциональные возможности, необходимые устройству, и не беспокоиться о языках. На обычном веб-сервере это чаще всего делается с помощью языков высокого уровня. Отойдите от большого железа, и ваша свобода программирования исчезнет.
Без правильных библиотек в большинстве случаев было бы глупо делать основательный веб-проект на C. Отсутствие хороших стандартизированных библиотек здесь является большим недостатком.
источник
Вот еще несколько веб-кода, написанного на C, на который стоит обратить внимание при создании собственной библиотеки C для Интернета:
источник
Что ж, учитывая тот факт, что веб-разработка - это вопрос наличия полезных библиотек (тех, что используются в PHP), я не понимаю, насколько C бесполезен.
В конце концов, процедурная логика такая же: делать while, for, if then else и т.д., будь то C, PHP, .Net или Perl.
А цикл или тест C написать не сложнее, потому что он написан на C.
Большинство PHP-библиотек написано на C, поэтому аргумент об отсутствии C-библиотек для Интернета не выглядит убедительным.
Я предполагаю, что C не рекламировался как язык веб-программирования пропагандистами Java (SUN) и .Net (MICROSOFT), потому что у них был собственный проприетарный (сильно запатентованный) интеллектуальный актив, который требовал принятия.
В качестве бесплатного (незапатентованного) стандарта C не предлагает никакого `` фиксированного '' контроля над разработчиками ... отсюда, возможно, тяжелая рука лоббирования в школах и университетах, чтобы убедиться, что деньги налогоплательщиков будут финансировать принятие низшие технологии, поддерживаемые частными интересами.
Если C достаточно хорош для IBM и MICROSOFT (они не разрабатывают свои продукты на PHP или .Net), но недостаточно хорош для конечных пользователей, то конечные пользователи могут задаться вопросом, почему им предлагается терпеть этот двойной стандарт.
источник
Я бы использовал C для веб-приложения, если:
G-WAN запускает код как скрипт, да скрипты C, такие как Play! Framework подходит для Java. G-WAN очень быстр и имеет простой API. G-WAN позволяет использовать C / C ++ для веб-приложений, когда другие серверы не могут этого сделать.
Ясно одно: вам нужен хороший программист, чтобы написать веб-сайт на C, любой дрянной разработчик может создать сайт на спагетти PHP :-) Существуют детекторы утечек и даже сборщики мусора для C.
источник
Все упомянутые вами языки фактически написаны на C / ++. Единственное отличие состоит в расширенных классах и библиотеках, которые были созданы на языке C и составляют то, что сейчас является другими языками интерпретатора. Именно поэтому их называют языками сценариев.
Думайте об этом как о выпечке торта (PHP / JS):
Но представьте, что вам нужно создать все элементы, из которых состоят эти вещи. (C / ++)
C - это основа многих современных языков. Это отличный и почти самый мощный язык на ассемблере. Вы можете сделать это, вам просто нужно вложить средства в создание всего кода, который уже был сделан на других языках. Как лепить торт из таблицы Менделеева.
Изучив его, вы буквально можете заставить его делать что угодно!
источник
Обработку строк в C можно упростить, используя:
или:
Библиотека управляемых строк (для C)
http://www.cert.org/secure-coding/managedstring.html
источник
"domachine" написал:
Вы когда-нибудь задумывались, на каком языке написан портативный интерпретатор PHP?
В ANSI C.
Итак, прежде чем вы снова откажетесь от переносимости ANSI C, спросите себя, на каком языке был написан ваш любимый язык программирования ... (совет: почти все были написаны на C / C ++).
Компиляторы ANSI C доступны на всех платформах, на которых мне приходилось работать, и то же самое не относится к PHP и его гигантской среде выполнения.
Так обстоит дело с аргументом переносимости .
источник
Подобно G-WAN, но для Cocoa / Objective-C используется Bombax, фреймворк для веб-приложений.
http://www.bombaxtic.com
Говоря об Objective-C, я не могу не указать на MacRuby, который может революционизировать то, как мы когда-нибудь будем делать веб-приложения.
источник
Еще одним моментом может быть зависимость от платформы. C необходимо скомпилировать в собственный код. Этот код работает не на всех платформах.
Интерпретируемые языки работают везде, где есть интерпретатор. Многие провайдеры, например, предоставляют PHP-интерпретаторы, установленные на своих серверах, но с ОС Windows. Если вы сейчас занимаетесь разработкой на Linux-машине. У тебя проблема.
Конечно, эту проблему можно решить, но вы видите преимущество разработки на PHP в данном конкретном случае.
Надеюсь, это поможет, в отношении домашней машины
источник
PHP, Python и т. Д. Легко масштабировать, решив проблему аппаратным обеспечением.
Предположим, что разработка приложения на PHP стоит 1 человеку и 1 год усилий, а разработка приложения на C - 3 года (поскольку C требует больше усилий, чтобы сделать то же самое). Это означает, что уменьшенная потребность кода C в оборудовании должна составлять 2 года заработной платы, чтобы C стал привлекательным. На практике этого (почти) никогда не бывает.
Как и в любом правиле, есть исключения. Масштаб Facebook настолько велик, что стоимость оборудования достаточно велика. Вот почему они разработали HipHop , который кросс-компилирует PHP в C ++. Он сочетает в себе лучшее из обоих миров: простоту программирования на PHP и чистую производительность C ++. Facebook по-прежнему разрабатывается на PHP, но когда вы его используете, это весь собственный код.
источник
В итоге для разработки сайтов можно использовать абсолютно любой язык, включая ассемблер (через CGI и т. Д.). Если вы имели в виду, почему бы нам не использовать скомпилированный язык, ну, у нас уже есть .NET, Java и другие.
источник
Чтобы добиться результатов, нужно любить то, что делаешь. Такие языки, как java и php, были созданы с большим трудом, чтобы облегчить жизнь людям. Сегодня PHP особенно принес пользу многим веб-программистам-самоучкам. Вы можете увидеть, какую поддержку он оказывает в мире веб-разработки.
Я уверен, что Java iam был написан, чтобы помочь вам во всем, что возможно в современном мире. Огромная книга - ясное указание, и это чудовище, если вы тоже стремитесь к веб-разработке. То же самое и с Python. Это настолько фантастические языки и платформы. Неудивительно, что они очень популярны.
Я приверженец C, и отчасти это связано с определенными ограничениями, которые не позволили мне взглянуть на другие языки, такие как php. Я пишу на C каждый день, и каждый день я горжусь этим, а также узнаю что-то новое. Это заставляет меня чувствовать себя очень хорошо, и я также начал узнавать, что C был выбором по умолчанию при написании приложений для веб-сайтов с помощью Cgi. Это абстрагируется на других платформах, и когда вы разрабатываете веб-сайты, связанные с базами данных и веб-службами, вам необходимо знать, что происходит за кулисами.
Однако, если вы все это знаете и по-прежнему хотите использовать язык сценариев, должна быть веская причина, и нам не нужно никого советовать против этого.
источник