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

101

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

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

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

Abs
источник
34
Почему мы используем печи и не готовим еду непосредственно на огне? Почему мы ездим на машинах, хотя ходьба или велосипед намного полезнее? Почему ... Я мог бы продолжить ...
Феликс Клинг
16
@Felix - как я уже сказал, назовите другие причины, помимо сложности. Это означает, что я осознаю, что другие языки существуют с абстрактными трудностями.
Abs
15
Никогда не считал C сложным.
3ave
10
@ Дэвид Лайвли. Если вы не смогли специально поставить букву «с», это действительно забавно. Молодец :)
punkrockbuddyholly
11
@MrMisterMan кому-то понадобилось всего четыре месяца, чтобы заметить этого. =)
3ave 01

Ответы:

79

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

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

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

Дэйв Маркл
источник
48
Вау, аргумент в пользу .NET против C из-за библиотек ? Конечно, stdlib меньше, но у нас есть десятилетия библиотек (многие с открытым исходным кодом) на C. Мне трудно придумать что-нибудь в .NET stdlib, для которого нет зрелой и бесплатной библиотеки C.
Ken
3
Я не думаю, что он выступал конкретно за .NET, я думаю, он просто имел в виду, что существуют языки, в которых есть много связанных библиотек. Я уверен, что у C много, но, честно говоря, я не встречал ни одного репо, которое собирает их все в одном месте или упаковывает их.
Abs
16
@Ken Манипуляции со строками - действительно распространенная задача веб-приложений. Для этого существуют библиотеки C, но они не так многочисленны или удобны, как библиотеки в [выберите язык высокого уровня].
Andres Jaan Tack
23
@Ken: Существует масса различий, когда у вас есть один, хорошо поддерживаемый набор функций, и множество небольших библиотек, которые сильно различаются по набору функций, лицензированию и поддержке.
Дэйв Маркл,
49

Хм ...

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

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

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

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

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

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

Одна часть работы, которая особенно расстраивает, - это отчаянный поиск «волшебного» вызова API, который сделает то, что вы хотите.

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

C #

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

Ява

new DecimalFormat("0.00"); ...

PHP

number_format($amount, 2); ...

ANSI C

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

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

Когда PHP имеет более 5900 вызовов API (недалеко от C # и 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 # (производный от C) требует от программистов связывать многострочные строки с '+'.
PHP (производный от C) требует программистов связывать многострочные строки с "."

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

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

С уважением,

Пьер.

Пьер
источник
10
Я не совсем понимаю ваш комментарий о дополнительной обработке нескольких тысяч; для C #, на котором вы остановились , amount), PHP работает как есть, а вашему примеру ANSI C требуются еще два аргумента (буфер и длина буфера). Ваш пример, за исключением Java, похоже, доказывает обратное. Кроме того, я никогда раньше не видел такого //:: comment ::синтаксиса; PHP определенно не требует этого.
icktoofay
1
Честно говоря, все остальные варианты выглядят намного лучше, чем ANSI C, который «явно проще в использовании и запоминании» [sic].
Джаррод Мозен
Чем отличается G-WAN от NGINX, если оба они написаны на C?
m4l490n
47

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

Квентин
источник
10
Печатал то же самое, и ты меня опередил. Я просто хочу добавить, что защита веб-сайтов от злонамеренного поведения сама по себе является достаточно сложной задачей, нам не нужно добавлять потенциальные векторы атак от неправильного использования управления памятью, указателей и т. Д.
Роб Аллен,
@Jordan: У меня такое чувство, что вы не занимались веб-программированием на C. То, что вы говорите, не соответствует модели того, как делается веб-программирование.
2
Конечно, есть, если предположить, что на вашем веб-сайте есть любое место для взаимодействия с пользователем, будь то URL-адрес или ввод формы. После того, как эти данные переданы на сервер, программист должен убедиться, что правильно распределяет память. В G-WAN есть некоторая абстракция вокруг параметров запроса, но это не спасет вас полностью. Я не говорю, что при правильном выполнении веб-программирование на C не может быть безопасным и быстрым, но оно более подвержено более серьезным ошибкам.
Jordan
3
вздох @Kinopiko: Если вы не знаете, что такое переполнение буфера, вам не следует кодировать на C. '' - сказал Нафф. Для получения дополнительной информации: securecoding.cert.org/confluence/display/seccode/…
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
29

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

Пол Томблин
источник
1
C на тонны быстрее.
14
Если я могу заполнить сетевой канал Java или Perl (а я могу), тот факт, что C быстрее, не имеет значения.
Пол Томблин,
1
@Kinopiko, вы говорите, что у вас больше канал, больше обращений к страницам и больше данных для отправки, чем на eBay (Java), Stack Overflow (C # /. NET), Google или на любом из миллиона широко используемых веб-сайтов, написанных на языках более высокого уровня ?
Пол Томблин,
1
@Paul Tomblin: Цель веб-приложения - не заполнять сетевой канал, а выполнять некоторую обработку. Если вам нужно предоставить только текст и изображения, вам следует использовать статические html-страницы, которые обеспечивают превосходную производительность. В большинстве случаев статические страницы обслуживаются из кеша, поэтому вашему серверу ничего не нужно. OTOH, когда требуется обработка, он вполне может быть узким местом (хотя чаще узким местом является диск).
PauliL
4
Вы должны помнить, что веб-приложения - это лишь часть «серверного стека», который обрабатывает запросы пользователей, и не является частью, критичной для производительности. Есть и другие части - ядро ​​ОС (обычно написанное на C), файловая система (C), веб-сервер (обычно C), интерпретатор языка (C), база данных (обычно C или C ++). Веб-приложение обычно только передает данные из одной части в другую, применяя к ней некоторые базовые операции, и его производительность не имеет решающего значения.
el.pescado
15

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

Сравните 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
ChrisW
источник
4
PHP также не обрабатывает Unicode должным образом, но это очень популярный веб-ориентированный язык.
el.pescado
12
Итак, мы должны использовать C ++, поскольку он имеет примерно такую ​​же производительность, как C, но компилирует ваш пример C # как прелесть?
tstenner
2
Что касается манипуляций со строками - веб-приложения обычно выводят только строки, поэтому C printfдолжен выполнять эту работу.
el.pescado
5
C отлично справляется с многобайтами и юникодом с помощью функций библиотеки времени выполнения. Использование безопасных функций, таких как strncpy и т. Д., Также делает его довольно безопасным.
Justinhj
2
Или вы можете использовать asprintf (& foobar, "% s% s", foo, bar);
Патрик Лорио
11

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

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

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

Кен
источник
7
  • это небезопасно
  • это трудно читать
  • его сложно поддерживать, время разработки на порядок медленнее
  • большая часть вашего веб-материала, вероятно, связана с вводом-выводом, поэтому ускорение даже не имеет значения, особенно когда вы используете быстрый язык, такой как Java или C #
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
источник
2
что означает «быстрый язык, такой как Java или C #»?
RobS
3
@Kinopiko: какие слабые места у динамических языков? Когда программист-новичок явно говорит, что хочет выполнить произвольный код через evalи php include? Пожалуйста, в C / C ++ вы не утверждаете, что хотите выполнить произвольный код, это просто так. evalэто не ошибка, это намерение программиста. В C / C ++ любая ошибка может привести к удаленному выполнению кода, в динамических языках это не так, если только какой-то дурак не возится eval.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
1
«и так же быстро или быстрее, чем C / C ++, в зависимости от того, что вы делаете», может быть, но вы по-прежнему имеете дело с управляемой средой памяти как на Java, так и на C #, что может стать серьезным недостатком в сценариях с высоким трафиком.
RobS
5
«и у C определенно не так много слабых мест в безопасности, как у любого динамического языка». Это , друг мой, полная чушь. Почему за этот комментарий проголосовали 3 человека?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
2
@Kinopiko: На самом деле, вы не можете нигде это объяснить. Этому нет объяснения. У C гораздо большая проблема, чем у любого динамического языка. Худшее, что может случиться с динамическим языком, - это «атрибут не найден, whoop dee doo».
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
7

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

  1. Вовлеченное, полезное сообщество, также известное как «Люди, которые уже решили мою проблему». Даже для самых глупых новичков в Google довольно легко понять, почему они получают ошибки "заголовки уже отправлены" в PHP, тогда как эта информация может быть недоступна для фреймворка или языка, которые являются новыми для сцены, или по другим причинам не имеют критическая масса.
  2. Фреймворки, чтобы большинство программистов могли решать бизнес-задачи, а не взламывать код вместе.

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

Иордания
источник
6

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

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

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

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

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

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

Артём
источник
2
Интересно, что я не знал о CppCMS - низкоуровневом веб-фреймворке, написанном на C ++. Может быть лучшим из обоих миров, находясь между C и веб-языками.
Abs
Теперь это низкоуровневая структура, это очень БЫСТРАЯ веб-платформа MVC.
Артем
Извините, я просто называю все, что не является веб-языком, низким уровнем. Я понимаю, что это веб-фреймворк MVC.
Abs
Нет такого понятия, как «веб-язык», скорее всего, веб-языком можно назвать только PHP. Все остальные языки, включая Java, Python, Perl, Ruby и C #, являются языками общего назначения, которые используются для Интернета.
Артем
1
Что ж, если мы хотим быть конкретными, не существует таких вещей, как языки программирования общего назначения. Есть только процедурные, структурированные, объектно-ориентированные, функциональные ... и т.д ...
Abs
5

@Joeri Sebrechts

FUD в действии:

PHP, Python и т. Д. Легко масштабировать, решив проблему аппаратным обеспечением.

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

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

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

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

Чистый FUD (см. Ответ выше).

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

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

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

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

«Язык, на котором нет всего, на самом деле легче программировать, чем на некоторых, которые есть», - Деннис М. Ричи

В отличие от (большинства) языков программирования КОНЕЧНЫЕ ПОЛЬЗОВАТЕЛИ, Деннис, похоже, кое-что знал об этом.

Пьер
источник
3
(1) Не принимайте все на свой счет, я не собирался раскритиковать ваш продукт, потому что я даже не знал его. (2) Вы делаете интересное доказательство концепции с помощью G-wan, но я надеюсь, вы меня извините, если я подожду и посмотрю, пока не увижу, как его используют реальные веб-приложения, а не просто несколько синтетических тестов. (3) Вы неправильно охарактеризовали жалобу facebook на горизонтальное масштабирование, потому что их проблема связана с кешем памяти и многоядерной производительностью базы данных, узким местом реальных веб-приложений, с чем G-wan не помогает. (4) Я уверен, что HipHop приветствует ваш вклад в код.
Joeri Sebrechts
1
Говоря о проблеме производительности. Я писал веб-приложения на C раньше, много месяцев назад, и в то время требовалось гораздо больше строк, чтобы делать то же самое, что и PHP, но при этом имелся гораздо больший риск сбоев / утечек ошибок. (Я просто «средний» в отношении подобных ошибок, то есть пишу их время от времени.) Я основываю свое суждение на этом опыте до тех пор, пока не увижу реальные приложения, которые демонстрируют обратное (например, порт wordpress на C, который не требует большого количества строк кода).
Joeri Sebrechts
Как что-то «не масштабируется по вертикали»? Вы имеете в виду, что он не выигрывает от более высокой производительности одноядерного процессора и более высокой производительности памяти?
rakslice 07
5

Должно быть больше причин, по которым мы все используем 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

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

Kindall
источник
Вы забываете, что бит обработки большого объема заказов через Интернет был написан на C. См. Примечания внизу paulgraham.com/avg.html .
Джайлс Робертс,
4

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

Крейг
источник
6
Чтобы получить максимальную производительность, вам нужен не только C, но и отличный программист на C. И эти ребята обычно хотят больше денег, чем программисты Java / P *.
el.pescado
4

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

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

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

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

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

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

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

Дэвид Франц
источник
3

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

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

Что ж, учитывая тот факт, что веб-разработка - это вопрос наличия полезных библиотек (тех, что используются в 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), но недостаточно хорош для конечных пользователей, то конечные пользователи могут задаться вопросом, почему им предлагается терпеть этот двойной стандарт.

Винс
источник
1
Ухххх Microsoft.com и sharepoint находятся в ASP.NET. Большая часть Visual Studio 2010 находится в .NET (WPF). Это заявление заведомо ложно. Используйте язык самого высокого уровня, соответствующий вашим требованиям к дизайну. Для Интернета это означает C # / Python / etc, а также компоненты на C / C ++ / etc, где производительность становится проблемой, хотя этого почти никогда не бывает.
3ave
2

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

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

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

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

rtacconi
источник
2

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

Думайте об этом как о выпечке торта (PHP / JS):

  • 2 яйца, 1 стакан молока, 2 стика сливочного масла, 4 стакана муки, 1 стакан сахара, пищевая сода

Но представьте, что вам нужно создать все элементы, из которых состоят эти вещи. (C / ++)

  • 17 мг бикарбоната натрия, 15 столовых ложек белка, 12 столовых ложек желточной мембраны, аминокислот, серы и ... нейтронных частиц

C - это основа многих современных языков. Это отличный и почти самый мощный язык на ассемблере. Вы можете сделать это, вам просто нужно вложить средства в создание всего кода, который уже был сделан на других языках. Как лепить торт из таблицы Менделеева.

Изучив его, вы буквально можете заставить его делать что угодно!

GetBackerZ
источник
1

Обработку строк в C можно упростить, используя:

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

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

или:

Библиотека управляемых строк (для C)

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

ceeit
источник
1

"domachine" написал:

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

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

В ANSI C.

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

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

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

CClue
источник
2
Ну, PHP НЕ мой любимый язык. Я еще ничего не кодировал на PHP. Я программист на C и C ++. Я никогда не отказывался от переносимости C! Единственное, что я упомянул, - это простота применения PHP-скриптов к существующему WebSpace. Покажите мне случай, когда вы можете получить малобюджетное WebSpace с компилятором. Возможно, я ошибаюсь, но я думаю, что вы один из тех фанатиков-программистов, которые обожают один язык, но не видят преимуществ других, возможно, более подходящих языков. Я люблю C и C ++, но я могу мыслить нестандартно.
domachine
0

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

http://www.bombaxtic.com

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

Грегг
источник
Что ж, Макруби мертв.
Banjocat
0

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

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

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

Надеюсь, это поможет, в отношении домашней машины

домашняя машина
источник
0

PHP, Python и т. Д. Легко масштабировать, решив проблему аппаратным обеспечением.

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

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

Йери Себрехтс
источник
0

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

Андрей Рыня
источник
0

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

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

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

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

Viz
источник