Почему вы не используете C для своих веб-приложений?

Сегодня утром я просмотрел несколько разных веб-серверов, когда я наткнулся на G-WAN. Насколько я понимаю, это веб-сервер, написанный на C, и вы должны использовать его, написав свои веб-сайты/webapps в C. Одно явное преимущество - это скорость, которую предлагает сайт G-WAN.

Однако на форумах создатель G-WAN спросил, почему бы не использовать C для веб-приложений, и я не могу придумать ни одной причины, кроме того, что это сложно (для меня все равно, я новичок, когда дело доходит до С). Должно быть больше причин, почему все мы используем PHP, Python, Ruby и т.д., Кроме того, что их легко разрабатывать на этих языках. Я не вижу в этом веской причины.

Итак, я сказал вам: почему вы не используете C для своих веб-приложений?

Ответ 1

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

Кроме того, C не имеет преимущества для рисования из огромной единой стандартной библиотеки функциональности, такой как .NET(и другие основные веб-ориентированные платформы). Таким образом, вам, возможно, придется либо покупать компоненты, либо выполнять взаимодействие, либо сворачивать свою собственную функциональность, которая приходит "бесплатно" с большим количеством, скажем, "веб-ориентированный" язык, такой как PHP или С# или Ruby или что-то еще. Это означает, что вы платите больше.

Добавьте все это к тому, что однопоточная вычислительная скорость просто не важна в Интернете. Если вам нужна большая масштабируемость, большинство организаций могут экономично просто выбросить больше ядер в проблему и быть в порядке. Конечно, это не относится ко всем. Я бы предположил, что ядро ​​движка Google написано на C или аналогичном языке не только для скорости, но и для экономии реальных денег в затратах на электроэнергию.

Ответ 2

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

Ответ 3

Hum...

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

Я автор G-WAN, который дает понять, что я серьезно работал над этим вопросом: G-WAN работает быстрее всех других веб-серверов (без обработки) и всех других серверов веб-приложений (любая обработка, которую вы можете себе представить).

Да, ANSI C также позволяет обрабатывать более статический контент - с менее мощными процессорами (ANSI C - это не только создание динамического содержимого).

Кстати, G-WAN использует сценарии C (нет компилятора C и компоновщика), поэтому цикл/задержка компиляции/связывания не существует.

В процессе сравнения G-WAN с .NET Java и PHP я написал подобные приложения на всех четырех языках: http://gwan.ch/source/

И, к моему ужасу, современные языки сценариев не были более легкими в использовании.

Одна часть работы, которая особенно расстраивает, - это отчаянный поиск API-вызова "magic", который будет делать то, что вы хотите сделать.

Подумайте, как сделать "довольно тысячи":

С#

String.Format("{0:n}"...

Java

new DecimalFormat("0.00"); ...

PHP

number_format($amount, 2); ...

ANSI C

sprintf("%'.2f", amount);

"..." означает, что необходима некоторая предварительная настройка или пост-обработка. ANSI C явно легче использовать и запоминать.

Когда PHP имеет более 5900 вызовов API (С# и Java не за горами), поиск правильного вызова API является проблемой самостоятельно. Время, затрачиваемое на то, чтобы найти это (а затем найти, как плохо реализован собственный API-вызов), время, которое вы узнаете, в следующий раз, когда оно вам понадобится, все это время лишает вас времени, необходимого для решения вашей заявки проблемы.

Я прочитал (выше), что PHP более краткий, чем ANSI C? Зачем использовать "//:: this is a comment ::", а не "// this is a comment"? Почему так глупо сложный "довольно тысячи" синтаксис?

Другим обычным аргументом является то, что Java и т.д. предоставляют выделенные вызовы для веб-приложений.

Мне не удалось найти что-либо, чтобы избежать HTML в Java, поэтому я написал свою версию:

  // all litteral strings provided by a client must be escaped this way
  // if you inject them into an HTML page
  public static String escape_html(String Name) {
      int len = Name.length();
      StringBuffer sb = new StringBuffer(len);
      boolean lastWasBlankChar = false;
      int c;

      for(int i=0; i<len; i++) {
          c = Name.charAt(i);
          if(c == ' ')  sb.append("&#32;");  else
          if(c == '"')  sb.append("&quot;"); else
          if(c == '&')  sb.append("&amp;");  else
          if(c == '<')  sb.append("&lt;");   else
          if(c == '>')  sb.append("&gt;");   else
          if(c == '\n') sb.append("&lt;br/&gt;"); else {
             c = c&0xffff; // unicode
             if(c < 32 || c > 127) {
                sb.append("&#");
                sb.append(new Integer(c).toString());
                sb.append(';');
             } else
                sb.append(c);
          }
      }
      return sb.toString();
      //szName = sb.toString();
  }

Вы действительно считаете, что один и тот же код в ANSI C будет более сложным? Нет, это было бы намного проще и быстрее.

Java (производная от C) требует, чтобы программисты связывали многострочные строки с символом "+" С# (производный от C) требует, чтобы программисты связывали многострочные строки с символом "+" PHP (производный от C) требует, чтобы программисты связывали многострочные строки с..

ANSI C не имеет этого теперь абсолютно глупого (устаревшего) требования.

Итак, были ли столь очевидные успехи, на которые претендуют современные языки? Я все еще ищу его.

С уважением,

Пьер.

Ответ 4

Большинство сетевых приложений, особенно веб-серверов, гораздо более "привязаны к вводу/выводу", т.е. способны накачивать данные намного быстрее, чем сеть может их принять. Поэтому что-то, что является высокоэффективным с точки зрения эффективности ЦП, не является огромной победой, тогда как что-то масштабируемое и поддерживаемое. Таким образом, нет причин принимать недостатки C и терять преимущества управляемой среды, такой как Java,.NET, Python, Perl или другие языки.

Ответ 5

C не является удобным языком для манипулирования строками.

Сравнить С#:

string foo = "foo";
string bar = "bar";
string foobar = foo + bar;

Соответствующий C:

const char* foo = "foo";
const char* bar = "bar";
char* foobar = (char*)malloc(strlen(foo)+strlen(bar)+1);
strcpy(foobar, foo);
strcat(foobar, foo);
//todo: worry about when/where the foobar memory
//which was allocated by malloc will be freed

Ответ 6

Если трудности и сложность вообще не были проблемой (ха!), я бы не остановился на C. Я бы написал сборку x86. Прошло много лет с тех пор, как я использовал любой веб-сервер, который не был x86, и он выглядит все менее и менее вероятным каждый день.

Чтобы использовать C (вместо сборки или что-то более высокоуровневое), предположим, что C - это сладкое пятно эффективности программиста и эффективности компьютера.

Для программ, которые я пишу, это не так: C плохо соответствует тем программам, которые я хочу написать, а преимущества этого по сравнению с приличным ассемблером макросов не так уж важны. Программа, которую я пишу прямо сейчас, не является сложной в моей HLL по выбору, но сложность ее в сборке или C будет настолько высокой, что она никогда не закончится. Я признаю, что достаточно умный программист с достаточным временем может заставить его работать быстрее в сборке или C, но я не тот программист.

Ответ 7

  • небезопасно
  • it трудно читается
  • трудно поддерживать, время разработки медленнее порядка величины
  • большая часть вашего веб-материала, вероятно, связана с I/O, поэтому ускорение даже не имеет значения, особенно если вы используете быстрый язык, такой как Java или С#

Ответ 8

C - языки с низким уровнем языка для многих целей: no-OOP, много ручного управления ресурсами.

Существует ограниченное использование C для Интернета, например Klone. Он в основном используется для приложений с ограниченными ресурсами.

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

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

Но вы используете их в том случае, если производительность и использование ресурсов намного важнее то время выхода на рынок и затраты на разработку, поскольку в целом веб-разработка быстрее используя хорошие веб-фреймворки для таких языков, как Java, Python или PHP. Также в целом там менее компетентные программисты для языков С++, а затем Java/P * для одинаковой зарплаты.

Так что это вопрос приоритетов, а также меньше инструментов для С++ Web-разработки для PHP/Python/Perl или Java.

Ответ 9

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

  • Участие, полезное сообщество, ака Люди, которые уже решили мою проблему. Это довольно легко даже для noobiest из noobs для Google, почему они получают ошибки "заголовки уже отправлены" на PHP, тогда как эта информация может быть недоступна для фреймворка или языка, который является новым для сцены, или иным образом не имеет критическая масса.
  • Framework, так что большинство программистов могут решить проблемы с бизнесом, а не взломать код вместе.

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

Ответ 10

Должно быть больше причин, по которым мы все используем PHP, Python, Ruby и т.д., кроме того, что их легко разрабатывать на этих языках

В этом вся причина и единственная необходимость. У этого есть много преимуществ, главный из которых - время выхода на рынок. Если вы можете получить свое веб-приложение через месяц через 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

Конечно, если вы разрабатываете сайт для своего собственного развлечения, сделайте это на любом языке, который вы хотите. И если ваш сайт связан с CPU (вряд ли кто-либо, они, как правило, связаны с I/O), то используйте самый быстрый язык, который вы можете использовать. Однако, если вы пытаетесь внедрить инновации, используйте язык высокого уровня с лучшими абстракциями, которые вы можете найти.

Ответ 11

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

Ответ 12

Учтите, что я не веб-разработчик, но все равно задаю эти вопросы и предлагаю точку или два.

Какой веб-сайт написан только на одном языке? Серьезно эта нить, кажется, предполагает, что один молоток подходит ко всем гвоздям.

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

C имеет проблемы с безопасностью, которые нельзя отрицать, но являются ли они меньше, чем то, что наблюдается в kludges под названием PHP и Perl? В любом случае защищенный веб-сайт является функцией дисциплины программиста.

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

Промышленное использование для веб-серверов, то есть встроенных серверов/сайтов, просто не имеет выбора языка, который может иметь обычный веб-сервер. Таким образом, вы в конечном итоге используете вариант C или, возможно, что-то вроде BASIC. Ваша цель - предложить функциональность, необходимую устройству, и не беспокоиться о языках. На основном веб-сервере способ сделать это с языками высокого уровня большую часть времени. Уходите от большого железа, и ваша свобода программирования выходит за дверь.

Без правильных библиотек было бы глупо в большинстве случаев делать основополагающий веб-проект в C. Отсутствие хороших стандартизированных библиотек здесь является большим отрицательным.

Ответ 13

@Joeri Sebrechts

F.U.D. в действии:

PHP, Python и т.д. легко масштабируются, бросая аппаратное обеспечение в проблему.

Ну, на самом деле нет. Они не масштабируются вертикально и не очень широко горизонтально. Смотрите: http://gwan.ch/en_scalability.html, где объясняется, как много проблем впереди плохие-исполнители.

Предположим, что стоит 1 год 1 год на разработку приложения на PHP, и он стоит им 3 года, чтобы сделать это в C (поскольку C требует больше усилий, чтобы сделать то же самое).

Неправильно. Если PHP-библиотеки были написаны на C, они могут использоваться непосредственно от C - неизменно обеспечивая "уникальную производительность", которую вы требуете от PHP.

Это означает, что сокращенная аппаратная потребность кода C должна составлять 2 года стоит заработная плата для C, чтобы стать привлекательной. На практике это (почти) никогда не бывает.

Чистая F.U.D. (см. ответ выше).

Шкала Facebook настолько велика, что аппаратное обеспечение является достаточно большой стоимостью для ухода. Вот почему они разработали HipHop, который перекрестно компилирует PHP на С++. Это приносит лучшее из обоих миров: простота программирования на PHP, и сырой производительности С++. Facebook по-прежнему развивается на PHP, но когда вы его используете, это все собственный код.

HipHop намного быстрее, чем PHP, и никаких сомнений в этом. Но если вы сравните HipHop с простой реализацией C у вас есть два уровня накладных расходов:

  • интерфейсы PHP на С++ (которые используют раздутые библиотеки С++);
  • С++ bloat (что делает С++ в 2-10 раз медленнее, чем обычный C).

Плюс, HipHop был написан в беспредельном неэффективном академическом режиме (отстраненный от реальной реальности). конечно, это может впечатлить PHP-кодеры но покажите этот код встроенному программисту, и он будет жалеть Facebook.

"Язык, который не имеет всего, на самом деле проще программировать в чем некоторые, которые делают "- Денис М. Ричи

В отличие от (большинства) языков программирования END-USERS, Деннис знал пару о вещах по этому поводу, кажется.

Ответ 14

Вот еще несколько веб-код, написанный на C, который стоит посмотреть при создании собственной библиотеки C для Интернета:

  • cgic: библиотека ANSI C для программирования CGI
  • cgit: веб-интерфейс для репозиториев git
  • wbox: инструмент тестирования HTTP
  • wget html-parse.c
  • curl cookie.c
  • Скидка, реализация кода Дэвида Парсонса в тексте Джона Груберса Markdown на язык html.
  • Protothreads (особенно для встроенных систем), http://www.sics.se/~adam/software.html
  • protothread, проект кода Google LarryRuane
  • Проект urirarser sourceforge
  • http-parser, http-запрос/парсер ответов для c by Ryan Dahl on github
  • Nginx
  • ...

Ответ 15

Хорошо, учитывая, что веб-разработка - это вопрос наличия полезных библиотек (типа, используемого PHP), тогда я не вижу, как C не будет полезен.

В конце концов, процедурная логика одинакова: делать while, for, if then else и т.д., являются ли это C, PHP,.Net или Perl.

И цикл C или тест не сложнее писать, потому что он написан на C.

Большинство PHP-библиотек создаются на C, поэтому аргумент missing-C-libraries-for-the-web не выглядит настолько убедительным.

Я предполагаю, что C не был рекламирован как язык веб-программирования промоутерами Java (SUN) и .Net(MICROSOFT), потому что у них был собственный запатентованный (сильно запатентованный) интеллектуальный актив, который настаивал на принятии.

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

Если C достаточно хорош для IBM и MICROSOFT (они не разрабатывают свои продукты на PHP или .NET), но недостаточно для конечных пользователей, конечные пользователи могут задаться вопросом, почему им предлагается перенести эту двойную ошибку, стандарт.

Ответ 16

Обработка строк в C может быть проще с помощью:

Типы данных (часть libslack)

Libslack предоставляет общий тип данных массива выращенных типов, называемый List, общий тип данных хеш-таблицы, называемый Map, и подходящий тип данных String, который поставляется с кучей функций (многие сняты с Perl). Существуют также абстрактные однотипные и двунаправленные типы данных списка с необязательными, "растущими" фриланьерами.

или

Управляемая строковая библиотека (для C)

http://www.cert.org/secure-coding/managedstring.html

Ответ 17

"domachine" написал:

зависимость от платформы: C необходимо скомпилировать в собственный код. Этот код не работает на всех платформах. Интерпретированные языки (например, PHP) выполняются везде, где интерпретатор существует. Конечно, эта проблема может быть решена, но вы видите преимущество разработки в PHP в данном конкретном случае.

Вы когда-нибудь задумывались, на каком языке написан переносный PHP-интерпретатор?

В ANSI C.

Итак, прежде чем вы упустите мобильность ANSI C, попросите самостоятельно, на каком языке ваш любимый язык программирования было написано... (совет: почти все были написаны на C/С++).

Компиляторы ANSI C доступны на всех платформах, которые я должен был работа над - и то же самое не верно для PHP и его гигантской во время выполнения.

Так много для аргумента переносимости.

Ответ 18

Я бы использовал C для веб-приложения, если:

  • У меня небольшой бюджет для сервера хостинга (небольшой VPS), и мое время не дорого.
  • Я работаю для Facebook, Twitter или кого-то, кто нуждается в сокращении количества используемых серверов (с тысячами до миллионов пользователей).
  • Я хочу узнать C, и мне нужно найти приложение для реального мира, где я могу его использовать.
  • Я знаю C намного лучше, чем другие языки сценариев.
  • Я эко-парень, и я хочу уменьшить углеродный след моего приложения.

G-WAN запускает код как скрипты, да C-скрипты, такие как Play! Framework для Java. G-WAN очень быстрый и имеет простой API. G-WAN позволяет использовать C/С++ для веб-приложений, когда другие серверы не смогли этого сделать.

Ясно одно: вам нужен хороший программист для написания веб-сайта на C, любой crappy разработчик может создать сайт с спагетти PHP:-) Существуют тестеры и даже сборщики мусора для C.

Ответ 19

Подобно G-WAN, но для Cocoa/Objective-C используется Bombax, инфраструктура веб-приложений.

http://www.bombaxtic.com

Говоря о Objective-C, я не могу устоять перед тем, как указывать MacRuby, что может изменить ситуацию, когда мы сделаем веб-приложения в один прекрасный день.

Ответ 20

Другим моментом может быть зависимость от платформы. C необходимо скомпилировать в собственный код. Этот код не работает на всех платформах.

Интерпретированные языки выполняются везде, где существует интерпретатор. Многие поставщики, например, предоставляют PHP-интерпретаторы, установленные на их серверах, но с ОС Windows. Если вы сейчас работаете на Linux-машине. У вас проблемы.

Конечно, эта проблема может быть решена, но вы видите преимущество разработки в PHP в этом конкретном случае.

Надеюсь, это поможет, относится к доминированию

Ответ 21

PHP, Python и т.д. легко масштабируются, бросая аппаратное обеспечение в проблему.

Предположим, что стоит 1 год на 1 год на разработку приложения на PHP, и ему стоит 3 года, чтобы сделать это на C (поскольку C требует больше усилий, чтобы сделать то же самое). Это означает, что уменьшенная аппаратная потребность в коде C должна составлять 2 года, чтобы заработная плата для C стала привлекательной. На практике это (почти) никогда не бывает.

Как и при каждом правиле, существует исключение. Шкала Facebook настолько велика, что аппаратное обеспечение является достаточно большой стоимостью для ухода. Вот почему они разработали HipHop, который перекрестно скомпилирует PHP на С++. Это приносит лучшее из обоих миров: простота программирования в PHP и необработанная производительность С++. Facebook по-прежнему развивается в PHP, но когда вы его используете, это все собственный код.

Ответ 22

В конце вы можете использовать абсолютно любой язык для разработки сайтов, включая ассемблер (через CGI и т.д.). Если вы имели в виду, почему мы не используем скомпилированный язык, мы уже получили .NET, Java и другие.

Ответ 23

Вам нужно любить то, что вы делаете, для достижения результатов. Языки, такие как java и php, были созданы с большим количеством усилий, чтобы облегчить жизнь людей. Php особенно помог многим самообученным веб-программистам сегодня. Вы можете видеть, какую поддержку он оказывает в мире веб-разработки.

Java iam наверняка был написан, чтобы помочь вам во всем, что может быть возможно в сегодняшнем мире. Огромная книга - это четкое указание, и это зверь, если вы надвигаетесь и для веб-разработки. То же самое касается Python. Это такие фантастические языки и платформы. Неудивительно, что они чрезвычайно популярны.

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

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