웹 앱에 C를 사용하지 않는 이유는 무엇입니까?


101

오늘 아침 G-WAN을 접했을 때 몇 가지 다른 웹 서버를 살펴 보았습니다 . 내가 알기로는 C로 작성된 웹 서버이므로 웹 사이트 / 웹 앱을 C로 작성하여 사용해야합니다. 한 가지 분명한 이점은 G-WAN 사이트에서 제안하는 속도입니다.

그러나 포럼에서 G-WAN의 제작자는 웹 기반 앱에 C를 사용하지 않는 이유를 물었고 그것이 어려운 것 외에는 하나의 이유를 생각할 수 없습니다 (어쨌든 저에게는 C에 관해서는 초보자입니다). 우리 모두가 PHP, Python, Ruby 등을 사용하는 이유는 이러한 언어로 쉽게 개발할 수 있다는 점 외에 더 많은 이유가있을 것입니다. 나는 그것이 좋은 이유라고 생각하지 않습니다.

그래서 저는 여러분에게 이렇게 말했습니다. 왜 웹 앱에 C를 사용하지 않습니까?


34
왜 우리는 스토브를 사용하고 불로 직접 식사를 요리하지 않습니까? 걷거나 자전거를 사용하는 것이 훨씬 더 건강하지만 왜 자동차를 사용합니까? 왜 ... 나는 ... 갈 수
펠릭스 클링

16
@Felix-내가 말했듯이 어려운 것 외에 다른 이유를 말하십시오. 난이도를 추상화하기 위해 다른 언어가 존재한다는 것을 알고 있음을 의미합니다.
Abs

15
C 부족을 고려하지 않았습니다.
3Dave

10
@David Lively 일부러 'c'를 어렵게 넣지 못했다면 정말 재밌습니다. 잘 했어 :)
punkrockbuddyholly

11
@MrMisterMan은 누군가를 발견하는 데 4 개월 밖에 걸리지 않았습니다. =)
3Dave

답변:


79

C 프로그램을 정확하고 안전하게 만들려면 많은주의가 필요합니다. 이러한 관심은 프로그램을 작성하는 정말 좋은 사람들이 필요하다는 것을 의미합니다. 그것은 당신이 더 많이 지불한다는 것을 의미합니다.

또한 C는 .NET (및 기타 주요 웹 중심 플랫폼)이 제공하는 기능의 방대한 단일 표준 라이브러리에서 그리는 이점이 없습니다. 따라서 구성 요소를 구입하거나 상호 운용성을 수행하거나 "무료"로 제공되는 자체 기능을 추가로 제공해야 할 수 있습니다. PHP, C # 또는 Ruby 등과 같은 "웹 중심"언어라고 말할 수 있습니다. 그것은 당신이 더 많이 지불한다는 것을 의미합니다.

이 모든 것을 단일 스레드 계산 속도가 웹에서 그다지 중요하지 않다는 사실에 추가하십시오. 더 많은 확장 성이 필요한 경우 대부분의 조직은 경제적으로 문제에 더 많은 코어를 던져 문제를 해결할 수 있습니다. 물론 모든 사람에게 해당되는 것은 아닙니다. 나는 구글 엔진의 핵심이 속도뿐만 아니라 전력 비용을 절약하기 위해 C 또는 유사한 언어로 작성되었다고 생각한다.


48
와우, 라이브러리 때문에 C에 대한 .NET의 주장 ? 물론 stdlib는 더 작지만 C로 수십 년의 라이브러리 (많은 오픈 소스)가 있습니다. 성숙하고 무료 C 라이브러리가없는 .NET stdlib에서 생각하는 데 문제가 있습니다.

3
나는 그가 .NET에 대해 구체적으로 주장하고 있다고 생각하지 않는다. 그는 단지 많은 응집 라이브러리를 가진 언어가 있다는 것을 의미했다고 생각한다. 나는 C에 부하가 있다고 확신하지만 솔직히 말해서 모든 것을 한곳에 모으거나 포장하는 어떤 종류의 저장소도 보지 못했습니다.
Abs

16
@Ken String 조작은 정말 일반적인 웹 앱 작업입니다. 이를 위해 C 라이브러리가 존재하지만 [고급 언어 선택]의 라이브러리만큼 많거나 사용할 수는 없습니다.
Andres Jaan Tack

23
@Ken : 잘 지원되는 단일 기능 세트와 기능 세트, 라이선싱 및 지원면에서 크게 다른 수많은 작은 라이브러리가있는 경우에는 엄청난 차이가 있습니다.
Dave Markle

49

흠 ...

이 토론에서 조금 늦어 보이지만 방금 발견했습니다. 많은 의견을 보내 주신 모든 분들께 감사드립니다.

저는 G-WAN의 저자입니다. G-WAN은 다른 모든 웹 서버 (처리 없음) 다른 모든 웹 애플리케이션 서버 (상상할 수있는 모든 처리)보다 빠릅니다 .

예, ANSI C는 또한 덜 강력한 CPU로 더 많은 정적 콘텐츠를 처리 할 수있게했습니다 (ANSI C는 동적 콘텐츠를 날리는 것만이 아닙니다).

그런데 G-WAN은 C 스크립트 (C 컴파일러 및 링커 필요 없음)를 사용하므로 컴파일 / 링크주기 / 지연이 존재하지 않습니다.

G-WAN을 .NET Java 및 PHP와 비교하는 과정에서 유사한 응용 프로그램을 4 개 언어로 모두 작성했습니다. http://gwan.ch/source/

그리고 실망스럽게도 현대 스크립팅 언어는 사용하기가 쉽지 않았습니다 .

특히 실망스러운 작업 중 하나는 원하는 작업을 수행 할 '마법의'API 호출 을 필사적으로 검색 하는 것입니다.

다음에서 '꽤 수천'을 수행하는 방법에 대해 생각해보십시오.

씨#

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 등이 웹 응용 프로그램에 대한 전용 호출을 제공한다는 것입니다.

Java에서 HTML을 이스케이프 할 수있는 항목을 찾을 수 없으므로 내 버전을 작성했습니다.

  // 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의 동일한 코드가 더 복잡 할 것이라고 정말로 믿습니까? 아니요, 훨씬 더 간단 하고 빠릅니다.

(C 유래의) 자바되는 요구 는 '+'로 링크 멀티 라인 스트링 프로그래머
된다 (C로부터 유도 된) C 번호 요구 는 '+'로 링크 멀티 라인 스트링 프로그래머
(C로부터 유래) PHP 것은 필요 프로그래머 여러 줄 문자열을 '.'로 연결

ANSI C에는 이제 완전히 어리석은 (구식) 요구 사항이 없습니다.

그렇다면 현대 언어가 주장하는 명백한 진전이 있었습니까? 나는 아직도 그것을 찾고있다.

진정으로,

피에르.


10
나는 꽤 수천의 추가 처리에 대한 귀하의 의견을 잘 이해하지 못합니다. C #의 , amount)경우 PHP는있는 그대로 괜찮으며 ANSI C 예제에는 두 개의 인수 (버퍼 및 버퍼 길이)가 더 필요합니다. Java의 주목할만한 예외를 제외하고 귀하의 예는 반대의 점을 증명하는 것 같습니다. 또한, 나는 //:: comment ::이전에 그 구문을 본 적이 없습니다 . PHP는 확실히 그것을 필요로하지 않습니다.
icktoofay

1
솔직히 말해서, 다른 모든 옵션은 ANSI C보다 훨씬 더 멋져 보입니다. "사용하고 기억하기가 더 쉽습니다"[원문 그대로].
Jarrod Mosen 2012 년

둘 다 C로 작성된 경우 G-WAN은 NGINX와 어떻게 비교됩니까?
m4l490n

47

대부분의 프로그래밍에 C를 사용하지 않는 것과 같은 이유입니다. 이점 (대부분 성능)은 비용 (개발 시간, 자동 메모리 관리 부족, 버퍼 오버플로에 대한 자동 보호 부족, 편집 단계와 테스트 단계 사이에 컴파일 단계 등)을 능가하지 않습니다.


10
똑같은 것을 타이핑하고 있었고 당신은 나를 이겼습니다. 악의적 인 행동으로부터 웹 사이트를 보호하는 것은 당연한 일이라고 덧붙이고 싶습니다. 메모리 관리, 포인터 등의 오용으로 인한 잠재적 인 공격 벡터를 추가 할 필요가 없습니다.
Rob Allen

@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

대부분의 네트워크 애플리케이션, 특히 웹 서버는 훨씬 더 "I / O 바운드"입니다. 즉, 네트워크가 수용 할 수있는 것보다 훨씬 빠르게 데이터를 펌핑 할 수 있습니다. 따라서 CPU 효율성이 높은 것이 큰 승리는 아니지만 확장 가능하고 유지 관리 할 수있는 것이 좋습니다. 따라서 C의 단점을 받아들이고 Java, .NET, Python, Perl 또는 기타 언어와 같은 관리 환경의 이점을 잃을 이유가 없습니다.


1
C는 훨씬 빠릅니다.

14
네트워크 파이프를 Java 또는 Perl로 채울 수 있다면 C가 더 빠르다는 사실은 관련이 없습니다.
Paul Tomblin 2010-06-20

1
@Kinopiko, eBay (Java), Stack Overflow (C # /. NET), Google 또는 더 높은 수준의 언어로 작성된 백만 개의 고도로 사용되는 웹 사이트보다 더 큰 파이프, 더 많은 페이지 히트 및 더 많은 데이터를 제공 할 수 있다고 말씀하십니까? ?
Paul Tomblin

1
@Paul Tomblin : 웹 애플리케이션의 목적은 네트워크 파이프를 채우는 것이 아니라 일부 처리를 수행하는 것입니다. 일부 텍스트와 이미지 만 제공해야하는 경우 뛰어난 성능을 제공하는 정적 html 페이지를 사용해야합니다. 대부분의 경우 정적 페이지는 캐시에서 제공되므로 서버는 아무것도 할 필요가 없습니다. OTOH, 처리가 필요할 때 병목 현상이 발생할 수 있습니다 (일반적으로 디스크가 병목 현상 임).
PauliL

4
웹 애플리케이션은 사용자 요청을 처리하는 "서버 스택"의 일부일 뿐이며 성능에 중요한 부분이 아니라는 점을 기억해야합니다. OS 커널 (일반적으로 C로 작성), 파일 시스템 (C), 웹 서버 (일반적으로 C), 언어 인터프리터 (C), 데이터베이스 (일반적으로 C 또는 C ++)와 같은 다른 부분이 있습니다. 웹 응용 프로그램은 일반적으로 한 부분에서 다른 부분으로 데이터를 전달하고 일부 기본 작업을 적용하며 성능은 전혀 중요하지 않습니다.
el.pescado 2010-06-20

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는 유니 코드도 제대로 처리하지 못하지만 매우 널리 사용되는 웹 지향 언어입니다.
el.pescado 2010-06-20

12
그래서 우리는 C와 거의 같은 성능을 가지지 만 C # 예제를 매력처럼 컴파일하기 때문에 C ++를 사용해야합니까?
tstenner 2010-06-20

2
문자열 조작의 경우-웹 응용 프로그램은 일반적으로 문자열 만 출력하므로 C가 printf작업을 수행해야합니다.
el.pescado 2010-06-20

5
C는 런타임 라이브러리 함수를 통해 멀티 바이트와 유니 코드를 잘 처리합니다. strncpy 등과 같은 안전한 기능을 사용하면 매우 안전합니다.
justinhj

2
또는 asprintf (& foobar, "% s % s", foo, bar);
Patrick Lorio 2014 년

11

어려움과 복잡성이 전혀 문제가되지 않았다면 (ha!) C에서 멈추지 않을 것입니다. x86 어셈블리를 작성합니다. x86이 아닌 웹 서버를 사용한 지 몇 년이 지났고 매일 그럴 가능성이 점점 줄어들고 있습니다.

C (어셈블리 또는 더 높은 수준의 것 대신)를 사용하는 것은 C가 프로그래머 효율성과 컴퓨터 효율성의 최적 지점임을 제안하는 것입니다.

내가 작성하는 프로그램의 경우에는 그렇지 않습니다. C는 내가 작성하려는 프로그램 종류와 잘 맞지 않으며 적절한 매크로 어셈블러에 비해 C의 장점은 그다지 중요하지 않습니다. 내가 지금 작성하고있는 프로그램은 내가 선택한 HLL에서 어렵지 않지만 어셈블리 나 C에서 복잡도가 너무 높아서 완료되지 않을 것입니다. 충분한 시간을 가진 충분히 똑똑한 프로그래머가 어셈블리 또는 C에서 더 빠르게 실행할 수 있다는 것을 인정하지만 그 프로그래머는 아닙니다.


7
  • 안전하지 않다
  • 그건 알아보기 힘들
  • 유지 관리가 어렵고 개발 시간이 엄청나게 느립니다.
  • 대부분의 웹 자료는 아마도 I / O 바운드 일 것이므로 속도 향상은 중요하지 않습니다. 특히 Java 또는 C #과 같은 빠른 언어를 사용할 때 더욱 그렇습니다.

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. 참여하고 유용한 커뮤니티, 일명 내 문제를 이미 해결 한 사람들. PHP에서 "헤더가 이미 전송 됨"오류가 발생하는 이유는 Google에 가장 멍청한 멍청한 사람조차도 매우 쉽습니다. 반면 해당 정보는 장면에 새로운 프레임 워크 또는 언어에 대해서는 사용할 수 없거나 그렇지 않은 경우 임계 질량.
  2. 대부분의 프로그래머가 코드를 함께 해킹하지 않고 비즈니스 문제를 해결할 수 있도록하는 프레임 워크.

극한의 성능이 필요한 중요한 앱이 있다면 C를 사용하지만 작성하는 데 시간이 너무 오래 걸리므로 시장에 진출 할 수 없습니다. # 1 또는 # 2가 될 때까지 그것을 사용하는 것은 불가능합니다.


6

C는 많은 목적을 위해 매우 낮은 수준의 언어입니다 : OOP 없음, 많은 수동 리소스 관리.

웹용 C는 제한적으로 사용됩니다 (예 : Klone) . 주로 자원이 적은 임베디드 애플리케이션 케이스에 사용됩니다.

그러나 고성능 웹 애플리케이션 개발에 사용되는 CppCMS 와 같은 C ++ 웹 프레임 워크 가 있습니다.

C ++를 사용하면 대규모 응용 프로그램을 배포하고 개발하는 데 훨씬 더 나은 옵션을 제공하여 수행중인 작업에 대한 높은 추상화와 세분화 된 액세스를 즐길 수 있습니다.

그러나 일반적으로 Java, Python 또는 PHP와 같은 언어를위한 좋은 웹 프레임 워크를 사용하여 웹 개발이 더 빠르기 때문에 성능 및 리소스 사용이 시장 출시 시간 및 개발 비용보다 훨씬 더 중요한 경우에 사용합니다. 또한 일반적으로 동일한 급여에 대해 Java / P * 언어보다 C ++에 대한 유능한 프로그래머가 적습니다.

따라서 우선 순위의 문제이며 C ++ 웹 개발을위한 도구가 PHP / Python / Perl 또는 Java보다 적습니다.


2
흥미롭게도 저는 C ++로 작성된 저수준 웹 프레임 워크 인 CppCMS에 대해 몰랐습니다. C와 웹 언어 사이에있는 두 세계 모두에서 최고 일 수 있습니다.
Abs

이제는 저수준 프레임 워크이며 매우 빠른 MVC 웹 프레임 워크입니다.
Artyom

죄송합니다. 웹 언어가 아닌 것은 저수준이라고합니다. MVC 웹 프레임 워크이지만 이해합니다.
Abs

"웹 언어"와 같은 것은 없습니다. 아마도 PHP 만 웹 언어라고 할 수 있습니다. Java, Python, Perl, Ruby 및 C #을 포함한 다른 모든 언어는 웹에 사용되는 범용 언어입니다.
Artyom

1
글쎄요 우리가 범용 프로그래밍 언어와 같은 것은 없다고 구체적으로 말하고 싶다면. 절차 적, 구조적, 객체 지향적, 기능적 ... 등 만 있습니다.
Abs

5

@Joeri Sebrechts

실행중인 FUD :

PHP, Python 등은 하드웨어를 문제에 던져서 쉽게 확장 할 수 있습니다.

글쎄요. 수직으로 전혀 확장되지 않고 수평으로는 매우 약하게 확장됩니다. 참조 : http://gwan.ch/en_scalability.html 여기에서는 실적이 저조한 사용자보다 얼마나 많은 문제가 발생하는지 설명합니다.

PHP로 앱을 개발하는 데 1 년이 걸리고 C로 작업하는 데 3 년이 걸린다고 가정합니다 (C는 동일한 작업을 수행하는 데 더 많은 노력이 필요하기 때문입니다).

또 틀렸어. PHP 라이브러리가 C로 작성된 경우 C에서 직접 사용할 수 있습니다. 즉석에서 PHP가 가지고 있다고 주장하는 '고유 한 생산성'을 제공합니다.

즉, C 코드의 감소 된 하드웨어 요구는 C가 매력적이 되려면 2 년치의 임금을 나타내야합니다. 실제로는 (거의) 결코 발생하지 않습니다.

순수 FUD (위의 답변 참조).

페이스 북의 규모가 너무 커서 하드웨어는 관리하기에 충분한 비용입니다. 이것이 바로 PHP를 C ++로 크로스 컴파일하는 HipHop을 개발 한 이유입니다. PHP 프로그래밍의 단순성과 C ++의 원시 성능이라는 두 가지 장점을 모두 제공합니다. Facebook은 여전히 ​​PHP로 개발되었지만 사용하면 모두 네이티브 코드입니다.

HipHop은 PHP보다 훨씬 빠릅니다. 그러나 HipHop을 일반 C 구현과 비교하면 두 계층의 오버 헤드가 있습니다.

  • PHP에서 C ++ 로의 인터페이스 (비대해진 C ++ 라이브러리 사용)
  • C ++ 팽창 자체 (C ++가 일반 C보다 2 ~ 10 배 느리게 함).

또한 HipHop은 (실제 현실에서 분리 된) 단서없이 비효율적 인 아카데믹 모드로 작성되었습니다. 물론 PHP 코더에게 깊은 인상을 줄 수 있지만이 코드를 임베디드 프로그래머에게 보여 주면 그는 페이스 북에 대해 안타까울 것입니다.

"모든 것이없는 언어는 실제로 프로그래밍하기가 다른 언어보다 더 쉽습니다."--Dennis M. Ritchie

(대부분의) 프로그래밍 언어 END-USERS와는 달리 Dennis는 문제에 대해 몇 가지를 알고있는 것 같습니다.


3
(1) 너무 개인적으로 받아들이지 마세요. 저는 당신의 제품을 몰랐기 때문에 당신의 제품을 배포하지 않았습니다. (2) 당신은 G-wan과 함께 흥미로운 개념 증명을 만들었지 만, 몇 가지 합성 벤치 마크가 아니라 실제 웹 앱이 그것을 사용하는 것을 볼 때까지 기다려서 접근 방식을 보시면 실례하겠습니다. (3) 페이스 북의 수평 적 확장에 대한 불만을 오인했습니다. 왜냐하면 그 문제는 실제 웹 앱의 병목 인 Memcache와 데이터베이스 멀티 코어 성능 때문인데, 이는 G-wan이 해결하는 데 도움이되지 않는 문제입니다. (4) HipHop은 여러분의 코드 기여를 환영합니다.
Joeri Sebrechts

1
생산성 문제에 대해 이야기합니다. 저는 몇 달 전에 C로 웹 앱을 작성했습니다. 당시에는 PHP보다 동일한 작업을 수행하는 데 더 많은 줄이 필요했지만 충돌 / 누출 종류의 버그가 훨씬 더 많이 발생했습니다. (저는 그런 종류의 버그에 대해 "평균적"입니다. 즉, 이따금 씩 작성한다고 말합니다.) 그렇지 않은 경우를 보여주는 실제 앱을 볼 때까지 그 경험을 바탕으로 판단합니다 (예 : C 로의 워드 프레스 포트 더 많은 코드 라인이 필요하지 않습니다).
Joeri Sebrechts

어떻게 "수직으로 확장되지 않는"것이 있습니까? 더 빠른 단일 코어 성능과 더 빠른 메모리 성능의 이점이 없다는 의미입니까?
rakslice 2015

5

우리 모두가 PHP, Python, Ruby 등을 사용하는 이유는 이러한 언어로 쉽게 개발할 수 있다는 것 외에 더 많은 이유가있을 것입니다.

이것이 전체 이유이자 유일한 이유입니다. 그것은 많은 이점을 가지고 있으며, 그중 가장 중요한 것은 시장 출시 시간입니다. C를 사용하는 두 달이 아니라 PHP를 사용하여 한 달 만에 웹 앱을 온라인에 올릴 수 있다면 그냥 이길 수 있습니다. C를 사용하는 2 주 대신 Ruby on Rails를 사용하여 1 주일 내에 새로운 기능을 추가 할 수 있다면 다시 승리 할 수 ​​있습니다. C를 사용하는 이틀 대신 Python을 사용하여 하루 만에 버그를 수정할 수 있다면 다시 한 번 승리합니다. 경쟁사 언어 Y를 사용하기 때문에 전혀 추가 할 수없는 언어 X를 사용하기 때문에 기능을 추가 할 수 있고 리소스 제약을 고려할 때 해당 언어에서 너무 어렵다면 확실히 승리합니다.

그리고 "승리"한다는 것은 정말로 당신이지는 것이 아니라는 것을 의미 합니다. 경쟁사는 사이트를 개발하기 위해 더 높은 수준의 언어와 프레임 워크를 사용하고 있으므로 C를 사용하면 C를 사용하는 다른 사람들과 경쟁하지 않고 C를 사용하지 않는 다른 사람들과 경쟁하게됩니다. 비슷한 수준의 추상화를 가진 도구를 사용합니다.

성능이 문제가되는 경우 사이트의 느린 부분을 더 나은 성능의 언어로 다시 작성할 수 있습니다. 또는 더 많은 하드웨어를 사용할 수 있습니다. 실제로, 성능 문제는 우리가 "가져야 할 좋은 문제"라고 부르는 것입니다. 이는 이미 성공했음을 의미합니다. 그러나 사이트의 기본 기능을 개발하는 데 더 많은 시간을 소비하는 것은 거의 선택 사항이 아닙니다. 더 빨리 실행되도록 C로 작성하는 것은 Knuth가 말했듯이 모든 악의 근원 인 조기 최적화입니다.

이 모든 것은 파이썬이나 루비보다 더 높은 수준의 추상화를 가진 언어를 사용할 수 있다면 파이썬이나 루비를 사용하는 사람들에게 이길 수 있음을 의미합니다. Paul Graham과 그의 팀이 웹 사이트를 개발할 때 LISP를 "비밀 무기"로 사용한 방법에 대한 이야기는 유익 할 수 있습니다. http://www.paulgraham.com/avg.html

물론 자신의 오락을위한 사이트를 개발하고 있다면 원하는 언어로하십시오. 그리고 사이트가 CPU 바운드 (거의 없음, 일반적으로 I / O 바운드) 인 경우 가능한 가장 빠른 성능의 언어를 사용하십시오. 하지만 혁신을 시도하고 있다면 찾을 수있는 최고의 추상화를 가진 고급 언어를 사용하십시오.


웹을 통한 대량 주문 처리 비트가 C로 작성 되었다는 사실잊고 계십니다 . paulgraham.com/avg.html 하단에있는 메모를 참조하십시오 .
Giles Roberts

4

쉬운 것이 좋은 이유가 아니라고 생각합니다. 좋은 이유라고 생각합니다. 궁극의 성능이 필요한 경우 C는 괜찮지 만 다른 언어는 생산성, 유지 보수성을 개선하고 결함을 줄이기 위해 어려운 부분을 추상화합니다.


6
최고의 성능을 얻으려면 C뿐만 아니라 최고의 C 프로그래머도 필요합니다. 그리고 그 사람들은 일반적으로 Java / P * 프로그래머보다 더 많은 돈을 원합니다.
el.pescado 2010-06-20

4

내가 웹 개발자는 아니지만 어쨌든 이러한 질문을하고 한두 가지를 제시 할 것임을 고려하십시오.

한 언어로만 작성된 웹 사이트는 무엇입니까? 진지하게이 실은 하나의 망치가 모든 못에 맞다고 가정하는 것 같습니다.

C가 복잡하다고 진지하게 말한 사람이 마지막으로 언제였습니까? 내 말은 정말로 여러분은 훨씬 더 낮은 수준을 얻을 수 없습니다. 두 가지가 종종 집합 적으로 참조되기 때문에 여기서는 C ++를 말하는 것이 아닙니다.

C는 거부 할 수없는 보안 문제가 있지만 PHP & Perl이라는 kludges에서 볼 수있는 것보다 적습니까? 두 경우 모두 보안 웹 사이트는 프로그래머 규율의 기능입니다.

어떤 경우에도 댓글을 남기십시오. 주어진 언어를 사용하는 데있어 어려움은 당면한 문제에 따라 크게 달라지며 특히 C ++는 숙련 된 사람의 문제에 대한 빠른 솔루션으로 이어질 수 있습니다.

웹 서버의 산업적 용도, 즉 임베디드 서버 / 사이트는 일반적인 웹 서버가 가질 수있는 언어 선택이 없습니다. 따라서 C의 변형 또는 BASIC과 같은 것을 사용하게됩니다. 목표는 장치에 필요한 기능을 제공하고 언어에 대해 걱정하지 않는 것입니다. 주류 웹 서버에서이를 수행하는 방법은 대부분의 경우 고급 언어를 사용하는 것입니다. 큰 철에서 멀어지면 프로그래밍의 자유가 사라집니다.

올바른 라이브러리가 없으면 대부분의 경우 C로 기초 웹 프로젝트를 수행하는 것은 어리석은 일입니다. 좋은 표준화 된 라이브러리의 부족은 여기서 큰 부정적입니다.


3

다음은 웹용 C 라이브러리를 빌드 할 때 살펴볼 가치가있는 C로 작성된 웹 관련 코드입니다.

  • cgic : CGI 프로그래밍을위한 ANSI C 라이브러리
  • cgit : git 저장 소용 웹 프런트 엔드
  • wbox : HTTP 테스트 도구
  • wget html-parse.c
  • curl cookie.c
  • 할인, David Parsons의 John Gruber의 Markdown 텍스트를 html 언어로 C 구현
  • Protothreads (특히 임베디드 시스템 용), http://www.sics.se/~adam/software.html
  • protothread, LarryRuane의 Google 코드 프로젝트
  • uriparser sourceforge 프로젝트
  • http-parser, http request / response parser for c by Ryan Dahl on github
  • nginx
  • ...

2

글쎄, 웹 개발이 유용한 라이브러리 (PHP에서 사용하는 종류)를 갖는 문제라는 사실을 감안할 때 C가 어떻게 유용하지 않을지 모르겠습니다.

결국 절차 논리는 ​​동일합니다. C, PHP, .Net 또는 Perl인지 여부에 관계없이 while, for, if then else 등을 수행합니다.

그리고 C 루프 또는 테스트는 C로 작성되기 때문에 작성하기가 더 어렵지 않습니다.

대부분의 PHP 라이브러리는 C로 만들어져 있으므로 웹용 C 라이브러리 누락 인수는 그다지 설득력이 없어 보입니다.

내 생각에 C는 자바 (SUN)와 .Net (MICROSOFT)의 프로모터들에 의해 웹 프로그래밍 언어로 광고되지 않았는데, 그들이 채택을 추진할 독자적인 (엄청난 특허를받은) 지적 자산을 가지고 있었기 때문 입니다.

무료 (특허가없는) 표준으로서 C는 개발자에게 '고정'권한을 제공하지 않습니다. 따라서 납세자 돈이 사적 이익에 의해 뒷받침되는 열등한 기술.

C가 IBM과 MICROSOFT에는 충분하지만 (PHP 또는 .Net으로 제품을 개발하지 않음) 최종 사용자에게는 충분하지 않다면 최종 사용자는 왜 이러한 이중 표준을 겪게되는지 궁금 할 것입니다.


1
Uhhhh Microsoft.com과 sharepoint는 모두 ASP.NET에 있습니다. Visual Studio 2010의 대부분은 .NET (WPF)에 있습니다. 이 진술은 명백히 거짓입니다. 설계 요구 사항을 충족하는 최고 수준의 언어를 사용하십시오. 웹의 경우 이는 C # / Python / etc 및 성능이 문제가되는 C / C ++ / etc의 구성 요소를 의미하지만 거의 발생하지 않습니다.
3Dave 2010

2

다음과 같은 경우 웹 앱에 C를 사용합니다.

  1. 호스팅 서버 (작은 VPS)에 대한 예산이 적고 시간이 비싸지 않습니다.
  2. 저는 Facebook, Twitter 또는 사용되는 서버의 양을 줄여야하는 사람을 위해 일하고 있습니다 (수천에서 수백만 사용자).
  3. C를 배우고 싶어서 사용할 수있는 실제 앱을 찾아야합니다.
  4. 다른 스크립팅 언어보다 C를 훨씬 더 잘 알고 있습니다.
  5. 저는 에코 맨이고 앱의 탄소 발자국을 줄이고 싶습니다.

G-WAN은 코드를 스크립트로 실행합니다. 그렇습니다. C 스크립트는 Play! 프레임 워크는 자바를위한 것입니다. G-WAN은 매우 빠르고 쉬운 API를 가지고 있습니다. G-WAN은 다른 서버에서 실패했을 때 웹 앱에 C / C ++를 사용할 수있게합니다.

한 가지는 분명합니다. C로 웹 사이트를 작성하려면 좋은 프로그래머가 필요합니다. 어떤 형편없는 개발자라도 스파게티 PHP로 사이트를 만들 수 있습니다. :-) 누출 감지기와 C 용 가비지 수집기가 있습니다.


2

언급 한 모든 언어는 실제로 C / ++로 작성되었습니다. 유일한 차이점은 현재 이러한 다른 인터프리터 언어를 구성하는 C에서 생성 된 고급 클래스와 라이브러리입니다. 스크립팅 언어라고 불리는 이유이기도합니다.

케이크 굽기 (PHP / JS)라고 생각하면됩니다.

  • 계란 2 개, 우유 1 컵, 버터 2 개, 밀가루 4 컵, 설탕 1 컵, 베이킹 소다

그러나 이러한 것들이 구성되는 모든 요소를 ​​만들어야한다고 상상해보십시오. (C / ++)

  • 17mg의 중탄산 나트륨, 15tbs의 단백질, 12tbs의 Vitelline 막, 아미노산, 황, ... 중성자 입자

C는 많은 현대 언어의 기초입니다. 어셈블리에서 위대하고 거의 가장 강력한 언어입니다. 이러한 다른 언어가 이미 수행 한 모든 코드를 작성하는 데 투자하기 만하면됩니다. 주기율표에서 케이크를 만드는 것과 같습니다.

말 그대로 무엇이든 할 수 있다는 것을 배우십시오!


1

C에서 문자열 처리는 다음을 사용하여 더 쉽게 만들 수 있습니다.

데이터 유형 (libslack의 일부)

Libslack은 List라는 일반 확장 가능한 포인터 배열 데이터 유형, Map이라는 일반 확장 가능한 해시 테이블 데이터 유형 및 함수 힙과 함께 제공되는 괜찮은 문자열 데이터 유형 (대부분 Perl에서 해제 됨)을 제공합니다. 선택적인 "성장 가능한"프리리스트가있는 추상 단일 및 이중 연결 목록 데이터 유형도 있습니다.

또는:

관리되는 문자열 라이브러리 (C 용)

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


1

"domachine"은 다음과 같이 썼습니다.

플랫폼 의존성 : C는 네이티브 코드로 컴파일되어야합니다. 이 코드는 모든 플랫폼에서 실행되지는 않습니다. 해석 된 언어 (예 : PHP)는 인터프리터가있는 모든 곳에서 실행됩니다. 물론이 문제는 해결 될 수 있지만이 특별한 경우에 PHP로 개발할 때의 이점을 알 수 있습니다.

휴대용 PHP 인터프리터가 어떤 언어 로 작성 되었는지 궁금한 적이 있습니까?

ANSI C.

따라서 ANSI C의 이식성을 다시 무시하기 전에 선호하는 프로그래밍 언어가 어떤 언어로 작성되었는지 자문 해보십시오. (팁 : 거의 모든 것이 C / C ++로 작성되었습니다).

ANSI C 컴파일러는 내가 작업해야하는 모든 플랫폼에서 사용할 수 있으며 PHP와 그 거대한 런타임에 대해서도 마찬가지입니다.

이식성에 대한 논쟁이 너무 많습니다 .


2
글쎄요, PHP는 제가 가장 좋아하는 언어가 아닙니다. 아직 PHP로 코딩하지 않았습니다. 저는 C 및 C ++ 프로그래머입니다. 나는 C의 이식성을 결코 무시한 적이 없다! 내가 언급 한 유일한 것은 기존 WebSpace에 PHP-Script를 적용하기 쉽다는 것입니다. 컴파일러가있는 저예산 WebSpace를 얻을 수있는 경우를 보여주세요. 내가 틀렸을 수도 있지만 한 언어를 좋아하지만 다른 언어의 장점을 보지 못하는 광신자 프로그래머 중 한 명이라고 생각합니다. 저는 C와 C ++를 좋아하지만 상자 밖에서 생각할 수 있습니다.
domachine

0

G-WAN과 비슷하지만 Cocoa / Objective-C의 경우 웹 애플리케이션 프레임 워크 인 Bombax가 있습니다.

http://www.bombaxtic.com

Objective-C에 대해 말하면 언젠가 웹 앱을 만드는 방식을 혁신 할 잠재력이있는 MacRuby를 지적하는 것을 거부 할 수 없습니다.


맥 루비는 이제 죽었습니다.
Banjocat 2015-08-20

0

또 다른 점은 플랫폼 종속성 일 수 있습니다. C는 네이티브 코드로 컴파일되어야합니다. 이 코드는 모든 플랫폼에서 실행되지는 않습니다.

통역사가 존재하는 모든 곳에서 통역 언어가 실행됩니다. 예를 들어 많은 공급자는 서버에 설치된 PHP 인터프리터를 Windows OS와 함께 제공합니다. 현재 Linux 시스템에서 개발중인 경우. 문제가 있습니다.

물론이 문제는 해결 될 수 있지만이 특별한 경우에 PHP로 개발할 때의 이점을 알 수 있습니다.

이것이 도움이되기를 바랍니다.


0

PHP, Python 등은 하드웨어를 문제에 던져서 쉽게 확장 할 수 있습니다.

PHP로 앱을 개발하는 데 1 년이 걸리고 C로 작업하는 데 3 년이 걸린다고 가정합니다 (C는 동일한 작업을 수행하는 데 더 많은 노력이 필요하기 때문입니다). 즉, C 코드의 감소 된 하드웨어 요구는 C가 매력적이 되려면 2 년치의 임금을 나타내야합니다. 실제로는 (거의) 결코 발생하지 않습니다.

모든 규칙과 마찬가지로 예외가 있습니다. 페이스 북의 규모가 너무 커서 하드웨어는 관리하기에 충분한 비용입니다. 그렇기 때문에 PHP를 C ++로 크로스 컴파일하는 HipHop 을 개발했습니다 . PHP 프로그래밍의 단순성과 C ++의 원시 성능이라는 두 가지 장점을 모두 제공합니다. Facebook은 여전히 ​​PHP로 개발되었지만 사용하면 모두 네이티브 코드입니다.


0

결국 어셈블러 (CGI 등을 통해)를 포함하여 사이트 개발에 절대적으로 모든 언어를 사용할 수 있습니다. 컴파일 된 언어를 사용하지 않는 이유를 의미했다면 이미 .NET, Java 등이 있습니다.


0

결과를 얻기 위해하는 일을 사랑해야합니다. 자바 및 PHP와 같은 언어는 사람들의 삶을 더 쉽게 만들기 위해 많은 노력을 기울여 만들어졌습니다. Php는 특히 오늘날 많은 자습 웹 프로그래머에게 도움이되었습니다. 웹 개발 세계에서 어떤 지원이 있는지 확인할 수 있습니다.

Java iam은 오늘날 세계에서 가능한 모든 것에 도움을주기 위해 작성되었습니다. 방대한 책은 분명한 표시이며 웹 개발을 위해 다가오고 있다면 짐승입니다. 파이썬도 마찬가지입니다. 이것들은 환상적인 언어와 플랫폼입니다. 그들이 대단히 인기가있는 것은 당연합니다.

나는 C 신봉자이며 부분적으로는 PHP와 같은 다른 언어를 보지 못하게하는 특정 제한 때문입니다. 나는 매일 C로 글을 쓰고 있으며 매일 나는 e와 새로운 것을 배우는 것을 자랑스럽게 생각합니다. 이것은 기분이 매우 좋으며 Cgi를 통해 웹 사이트 용 응용 프로그램을 작성할 때 C가 기본 선택 인 방법에 대해서도 배우기 시작했습니다. 이것은 다른 플랫폼에서 추상화되며 데이터베이스 및 웹 서비스와 관련된 웹 사이트를 개발할 때 뒤에서 무슨 일이 일어나고 있는지 알아야합니다.

그러나 모든 것을 알고 있고 여전히 스크립팅 언어를 사용하고 싶다면 타당한 이유가 있어야하며 이에 대해 조언 할 사람이 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.