Intereting Posts
Prestashop устанавливает множественный выбор из модуля и получает их на вход Сохраненная процедура вызывает «Команды не синхронизированы» в следующем запросе Laravel: Общая ошибка: 1615 Подготовленное заявление нужно переплатить Как отобразить PHP-код в HTML? preg_match (): Неизвестный модификатор '@' php: как изменить строковые данные станут числовыми данными Транслитерировать любой конвертируемый utf8 char в эквивалент ascii Организация тестов PHPUnit в пространствах имен Ошибка ограничения модели CakePHP и HABTM Как я могу перечислить те же данные ID с циклом while в PHP? Аутентификация пользователей PHP с помощью сеансов Межсетевые сеансы – совместные домены корзины покупок Как создать абсолютный URL-адрес с раннего / автоматического загрузки маршрутизатора Symfony 3 Как получить доступ к PHP-методам внутри Javascript? PDO: недопустимый номер параметра: смешанные и позиционные параметры

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

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

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

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

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

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

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

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

Hum …

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

Я автор 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 не имеет этого теперь совершенно глупого (устаревшего) требования.

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

С уважением,

Пьер.

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

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 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@Joeri Sebrechts

FUD в действии:

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

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

Предположим, это стоит 1 год 1 год усилий на разработку приложения на PHP, и ему стоит 3 года, чтобы сделать это на C (поскольку 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 ++ bloat (что делает C ++ в 2-10 раз медленнее обычного C).

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

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

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

Вот еще несколько веб-код, написанный на 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
  • Проект uriparser sourceforge
  • http-parser, http request / response parser для c by Ryan Dahl on github
  • Nginx

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

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

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

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

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

или:

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

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

«domachine» писал:

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

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

В ANSI C.

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

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

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

Я бы использовал 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.

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

http://www.bombaxtic.com

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

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

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

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

Надеюсь, это поможет,

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

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

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

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

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

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

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

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