Чому ви не використовуєте C для своїх веб-додатків?


101

Я сьогодні переглядав кілька різних веб-серверів сьогодні вранці, коли натрапив на G-WAN . Як я розумію, його веб-сервер написаний на C, і ви повинні скористатися ним, написавши свої веб-сайти / веб-сайти в C. Однією з явних переваг є швидкість, як пропонує сайт G-WAN.

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

Тож я вам це поклав: Чому ви не використовуєте C для своїх веб-додатків?


34
Чому ми використовуємо печі і не готуємо їжу безпосередньо на вогні? Чому ми використовуємо автомобілі, хоча ходити на велосипеді чи набагато здоровіше? Чому ... я міг би продовжуватись ...
Фелікс Клінг

16
@Felix - як я вже сказав, назвіть інші причини, крім того, що це важко. Що означає, що я знаю, що інші мови існують до абстрактних труднощів.
Абс

15
Ніколи насправді не вважали С важкою.
3Dave

10
@David Lively Якщо ви не змогли поставити «c» у важко за призначенням, це дійсно досить смішно. Молодці :)
punkrockbuddyholly

11
@MrMisterMan знадобилося лише чотири місяці, щоб помітити його. =)
3Dave

Відповіді:


79

Щоб коректна та безпечна програма була потрібна, потрібно дуже подбати. Цей догляд означає, що вам потрібно мати справді хороших людей, які пишуть ваші програми. Це означає, що ви платите більше.

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

Додайте все це до того, що обчислювальна швидкість з однопоточним потоком просто не така важлива в Інтернеті. Якщо вам потрібна більша масштабованість, більшість організацій можуть економічно просто кинути більше ядер на проблему і бути в порядку. Це, правда, не для всіх, звичайно. Я б міг уявити, що серцевина двигуна Google написана на С або подібною мовою не тільки для швидкості, але для економії реальних грошей на витрату електроенергії.


48
Ух, аргумент для .NET проти C через бібліотеки ? Звичайно, stdlib менший, але у нас є десятиліття бібліотек (багато з відкритим кодом) в C. У мене виникають проблеми з думкою про що-небудь в .NET stdlib, для якого немає зрілої та вільної бібліотеки С.
Кен

3
Я не думаю, що він сперечався саме з .NET, я думаю, що він мав на увазі, що там є мови, які мають багато згуртованих бібліотек. Я впевнений, що C має навантаження, але, якщо чесно, я не натрапив на будь-який вид репо, який збирає їх у єдине місце або пакує їх.
Абс

16
@Ken String маніпулювання - це дійсно поширене завдання веб-додатків. Для цього існують бібліотеки C, але вони не є такими ж численними чи корисними, як бібліотеки [виберіть мову високого рівня].
Андрес Яан Так

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}"...

Java

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].
Jarrod Mosen

Як G-WAN порівнюється з NGINX, якщо обидва написані на C?
m4l490n

47

З тієї ж причини, що ми не використовуємо C для більшості програм. Переваги (які в основному є продуктивністю) не переважають за витратами (час розробки, відсутність автоматичного управління пам'яттю, відсутність автоматичного захисту від переповнення буфера, наявність етапу компіляції між етапами редагування та тестування тощо).


10
Набрав те саме, і ти побив мене. Я просто хочу додати, що захист веб-сайтів від зловмисної поведінки є достатньою проблемою, як це є, нам не потрібно додавати потенційних векторів атак від неправильного використання пам’яті, покажчиків тощо.
Роб Аллен

@ Джордан: Я відчуваю, що ви ще не робили жодного веб-програмування на C. Те, що ви говорите, не відповідає моделі виконання веб-програмування.

2
Зрозуміло, що це робиться, якщо припустити, що на вашому веб-сайті є будь-яке місце для взаємодії з користувачем, незалежно від введення URL-адреси або форми Після передачі даних на сервер, програміст повинен переконатися в правильному розподілі пам'яті. G-WAN має деяку абстракцію навколо параметрів запиту, але це не збереже вас повністю. Я не кажу, що правильно виконано, веб-програмування не може бути безпечним і швидким, але воно більш чутливе до більш суворих помилок.
Йордан

3
зітхання @Kinopiko: Якщо ви не знаєте, що таке переповнення буфера, вам не слід кодувати C. "nuff, сказав.Для отримання додаткової інформації: 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), переповнення стека (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

4
PHP також не обробляє Unicode належним чином, але є дуже популярною веб-орієнтованою мовою.
el.pescado

12
Отже, ми повинні використовувати C ++, оскільки він отримує приблизно таку ж ефективність, що і C, але компілює ваш C # приклад як шарм?
tstenner

2
Що стосується маніпуляції з рядками - веб-додатки зазвичай мають лише вихідні рядки, тому C printfповинні виконувати цю роботу.
el.pescado

5
C добре обробляє багатобайтові та unicode функції функцій бібліотеки виконання. Використання безпечних функцій, таких як strncpy тощо, робить її і досить безпечною.
Justinhj

2
Або ви можете використовувати asprintf (& foobar, "% s% s", foo, bar);
Патрік Лоріо

11

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

Використовувати C (замість складання чи щось вищого рівня) - це припустити, що C - найприємніше місце ефективності програміста та ефективності комп'ютера.

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


7
  • це небезпечно
  • це важко читати
  • це важко підтримувати, час розробки повільніше на порядок
  • Більшість ваших веб-речей, ймовірно, пов'язані вводу-виводу, тому швидкість навіть не має значення, особливо коли ви використовуєте швидку мову, як Java або C #

2
що означає "швидка мова, як Java чи C #"?
RobS

3
@Kinopiko: які слабкі місця мають динамічні мови? Коли програміст noob явно каже, що хоче виконувати довільний код через 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 , звичайно , не так багато слабостей безпеки , як і будь-який динамічний мову робить» That , мій друг, це повна маячня. Чому цей коментар має 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 є досить низьким рівнем мови для багатьох цілей: без OOP, багато ручного управління ресурсами.

Використання C для Інтернету обмежене, наприклад, Klone . Він здебільшого використовується для застосувань із вбудованими ресурсами з невеликим ресурсом.

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

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

Але ви використовуєте їх у тому випадку, коли продуктивність та використання ресурсів набагато критичніші, ніж витрати на ринок часу та розробки, оскільки, як правило, веб-розробка швидша, використовуючи хороші веб-рамки для таких мов, як Java, Python або PHP. Також, як правило, є менш компетентні програмісти для C ++, ніж мови Java / P * за однакову зарплату.

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


2
Цікаво, що я не знав про CppCMS веб-рамку низького рівня, написану на C ++. Може бути найкращим з обох світів, які сидять між C та Веб-мовами.
Абс

Зараз це рамки низького рівня, це дуже швидка веб-структура MVC.
Артем

Вибачте, я просто згадую все, що не є веб-мовою як низький рівень. Я розумію, хоча це веб-рамка MVC.
Абс

Немає такого поняття, як "Веб-мова", ймовірно, лише PHP можна назвати веб-мовою. Усі інші мови, включаючи Java, Python, Perl, Ruby та C #, - це загальномовні мови, які використовуються для Інтернету.
Артем

1
Добре, якщо ми хочемо бути конкретними на зразок того, що немає таких понять, як мови програмування загального призначення. Є лише процедурні, структуровані, об'єктно-орієнтовані, функціональні ... тощо ...
Abs

5

@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 із звичайною реалізацією на C, у вас є два шари накладних витрат:

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

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

"Мова, яка не має всього, насправді легше запрограмувати, ніж деякі, які це роблять", - Деніс М. Річі

На відміну від (більшість) мови програмування END-USERS, Денніс знав кілька речей про це, здається.


3
(1) Не приймайте речі настільки особисто, я не збирався відкидати ваш продукт, тому що я навіть не знав вашого продукту. (2) Ви робите цікавий доказ концепції з G-wan, але сподіваюся, ви виправдаєте мене, якщо я зачекаю і побачу підхід, поки я не побачу в реальному світі веб-додатки, які використовують його, а не лише декілька синтетичних орієнтирів. (3) Ви неправильно охарактеризували скаргу facebook щодо горизонтального масштабування, оскільки їхня проблема полягає в багатоядерній роботі пам'яті та баз даних, вузькому вузі веб-додатків у реальному світі, що G-Wan не допомагає вирішити. (4) HipHop вітає ваш внесок у код, я впевнений.
Joeri Sebrechts

1
Якщо говорити про питання продуктивності праці. Я писав веб-додатки в C раніше, багато місяця тому, і в той час це вимагало способів більше рядків робити те саме, що це робило PHP, маючи при цьому набагато більший ризик виходу з ладу / протікання різновидів помилок. (Я просто "середній" у таких видах помилок, що означає, що я їх пишу час від часу.) Я базую свою оцінку на цьому досвіді, поки не побачу реальних програм, які демонструють інше (наприклад, порт Wordpress для C, що не вимагає набагато більше рядків коду).
Joeri Sebrechts

Як щось "не масштабується вертикально"? Ви маєте на увазі, що це не виграє від швидшої одноядерної та швидшої продуктивності пам'яті?
rakslice

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

Звичайно, якщо ви розробляєте сайт для власної розваги, робіть це будь-якою мовою. І якщо ваш сайт пов'язаний з процесором (навряд чи вони є, вони зазвичай пов'язані з входом / виводом), тоді використовуйте найбільш швидкодіючий мову, який ви можете. Якщо ви намагаєтесь внести інновації, використовуйте мову високого рівня з найкращими абстракціями, які ви можете знайти.


Ви забуваєте, що біт обробки замовлень з великим обсягом через Інтернет був написаний у C. Дивіться примітки внизу paulgraham.com/avg.html .
Giles Roberts

4

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


6
Для отримання максимальної продуктивності вам потрібен не тільки програміст C, але і кінцевий програміст C. А хлопці зазвичай хочуть отримати більше грошей, ніж програмісти Java / P *.
el.pescado

4

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

Який веб-сайт написаний лише однією мовою? Серйозно, здається, ця нитка передбачає, що один молоток облягає всі цвяхи.

Коли востаннє хтось серйозно заявив, що С є складним? Я маю на увазі, справді, хлопці, ви не можете отримати набагато нижчий рівень. Я не кажу тут про 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
  • Знижка, реалізація тексту Девіда Парсонса на позначці тексту Джона Грубера на мові html
  • Protothreads (особливо для вбудованих систем), http://www.sics.se/~adam/software.html
  • protothread, проект коду Google від LarryRuane
  • проект uriparser sourceforge
  • http-аналізатор, http-аналізатор запиту / відповіді для c від Райана Даля на github
  • nginx
  • ...

2

Ну, враховуючи той факт, що веб-розробка - це питання корисних бібліотек (типу, який використовує PHP), то я не бачу, як C не був би корисним.

Зрештою, процедурна логіка однакова: робіть while, for, якщо тоді і т. Д., Будь то C, PHP, .Net або Perl.

І цикл C або тест не складніше написати, оскільки він написаний на C.

Більшість бібліотек PHP створені на C, тому аргумент відсутніх C-бібліотек-для-Web не виглядає настільки переконливо.

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

Як безкоштовний (непатентований) стандарт, C не пропонує жодних «замок» для розробників ... отже, можливо, велика рука лобіювання в школах та університетах, щоб переконатися, що гроші платників податків будуть фінансувати прийняття поступається технології, підкріпленій приватними інтересами.

Якщо C достатньо хороший для IBM та MICROSOFT (вони не розробляють свої продукти в PHP чи .Net), але недостатньо хороші для кінцевих споживачів, то кінцеві користувачі можуть задатися питанням, чому їх запрошують зазнати цього подвійного стандарту.


1
Uhhhh Microsoft.com та sharepoint - це обидва в ASP.NET. Значна частина Visual Studio 2010 знаходиться у .NET (WPF). Це твердження явно хибне. Використовуйте мову найвищого рівня, яка відповідає вашим вимогам до дизайну. Для Інтернету це означає C # / Python / тощо, а також компоненти C / C ++ / тощо, де продуктивність стає проблемою - хоча це майже ніколи не відбувається.
3Dave

2

Я використовую C для веб-програми, якщо:

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

G-WAN запускає код у вигляді скриптів, так C-сценарії, як Play! Framework робить для Java. G-WAN дуже швидкий і має простий API. G-WAN дозволяє використовувати C / C ++ для веб-додатків, коли інші сервери цього не змогли зробити.

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


2

Усі мови, які ви згадали, фактично написані на C / ++. Єдина відмінність - це розширені класи та бібліотеки, створені з C, які складають те, що зараз є іншими мовами перекладача. Ось чому вони також називаються скриптовими мовами.

Подумайте про це, як випікати торт (PHP / JS):

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

Але уявіть собі, що потрібно зробити весь елемент, з якого складаються ці речі. (C / ++)

  • 17 мг бікарбонату натрію, 15 ст. Білка, 12 ст. Мембрани вітеліну, амінокислоти, сірки, ... Нейтронні частинки

C - основа багатьох сучасних мов. Це чудові та майже найпотужніші мови, що знаходяться в зборі. Ви можете це зробити, просто потрібно вкласти кошти в створення всього коду, який ці інші мови вже зробили. Як і побудова торта з періодичної таблиці.

Вивчіть це, ви можете буквально змусити його робити все, що завгодно!


1

Обробка струн у C може бути спрощена за допомогою:

Типи даних (частина великого шару)

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

або:

Бібліотека керованих рядків (для C)

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


1

"домачін" писав:

залежність від платформи: C потрібно компілювати у власний код. Цей код працює не на всіх платформах. Інтерпретовані мови (як PHP) працюють там, де є перекладач. Звичайно, цю проблему можна було б вирішити, але ви бачите перевагу розвитку PHP у цьому конкретному випадку.

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

В ANSI C.

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

Компілятори ANSI C доступні на всіх платформах, над якими мені довелося працювати - і це не стосується PHP та його гігантського часу виконання.

Стільки для аргументу портативності .


2
Ну, PHP НЕ є моєю улюбленою мовою. Я ще нічого не кодував у PHP. Я програміст C і C ++. Я ніколи не відкидав портативність C! Єдине, що я згадав, - це легкість застосування PHP-скриптів до існуючої WebSpace. Покажіть мені випадок, коли ви можете отримати низькобюджетний веб-простір, де у вас є компілятор. Можливо, я помиляюся, але я думаю, що ви один з цих фанатичних програмістів, які обожнюють одну мову, але не бачать переваг інших, можливо, більш підходящих мов. Я люблю C і C ++, але вмію мислити поза межами.
domachine

0

Схожий на G-WAN, але для Cocoa / Objective-C є Bombax, рамка веб-додатків.

http://www.bombaxtic.com

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


Ну, MacRuby зараз мертвий.
Banjocat

0

Іншим моментом може бути залежність від платформи. C потрібно компілювати у власний код. Цей код працює не на всіх платформах.

Інтерпретовані мови працюють там, де є перекладач. Багато провайдерів, наприклад, надають PHP-інтерпретатори, встановлені на їх серверах, але з ОС Windows. Якщо ви зараз розробляєте на Linux-машині. У вас проблема.

Звичайно, цю проблему можна було б вирішити, але ви бачите перевагу розвитку PHP у цьому конкретному випадку.

Сподіваюсь, це допомагає, що стосується домахіне


0

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

Припустимо, це коштує 1 людині 1 рік зусиль, щоб розробити додаток в PHP, і це коштує їм 3 роки, щоб зробити це в C (оскільки C вимагає більше зусиль, щоб зробити те саме). Це означає, що знижена потреба в апаратному коді C повинна представляти зарплату на 2 роки, щоб C стала привабливою. На практиці це (майже) ніколи не буває.

Як і в кожному правилі, є виняток. Масштаб Facebook настільки великий, що обладнання - це досить великі витрати на догляд. Тому вони розробили HipHop , який крос-компілює PHP на C ++. Він приносить найкращі з обох світів: простота програмування в PHP та необроблена продуктивність C ++. Facebook все ще розвинений в PHP, але коли ви його використовуєте, це все нативний код.


0

Зрештою, ви можете використовувати абсолютно будь-яку мову для розробки сайтів, включаючи асемблер (через CGI тощо). Якщо ви мали на увазі, чому ми не використовуємо компільовану мову, ну, ми вже отримали .NET, Java та інші.


0

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

Java я впевнений, що було написано, щоб допомогти вам у всьому, що може бути можливим у сучасному світі. Величезна книга - це чітке свідчення, і це звір, якщо ви також шукаєте веб-розробки. Те саме стосується і Python. Це такі фантастичні мови та платформи. Недарма вони користуються величезною популярністю.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.