Por que você não usa C para seus aplicativos da web?

101

Eu estava dando uma olhada em alguns servidores web diferentes esta manhã quando me deparei com o G-WAN . Pelo que entendi, é um servidor da web escrito em C e você deve fazer uso dele escrevendo seus sites / aplicativos da web em C. Um benefício claro é a velocidade, como sugere o site G-WAN.

No entanto, nos fóruns, o criador do G-WAN perguntou por que não usar C para aplicativos baseados na web e não consigo pensar em um único motivo além de ser difícil (para mim, pelo menos, sou novato quando se trata de C). Deve haver mais razões pelas quais todos nós usamos PHP, Python, Ruby etc, além de ser fácil de desenvolver nessas linguagens. Não vejo isso como um bom motivo.

Então eu coloco para você: Por que você não usa C para seus aplicativos da web?

Abdômen
fonte
34
Por que usamos fogões e não cozinhamos nossas refeições diretamente no fogo? Por que usamos carros, embora andar ou usar a bicicleta seja muito mais saudável? Por que ... eu poderia continuar ...
Felix Kling
16
@Felix - como eu disse, cite outras razões além de ser difícil. O que implica que estou ciente de que outras linguagens existem para abstrair a dificuldade.
Abs de
15
Nunca considerei realmente C difícil.
3Dave de
10
@David Lively Se você falhou em colocar o 'c' em difícil de propósito, isso é muito engraçado. Muito bem :)
punkrockbuddyholly
11
@MrMisterMan levou apenas quatro meses para alguém detectar aquele. =)
3Dave 01 de

Respostas:

79

É preciso muito cuidado para obter um programa C correto e seguro. Esse cuidado significa que você precisa ter pessoas realmente boas escrevendo seus programas. Isso significa que você paga mais.

Além disso, C não tem o benefício de tirar proveito de uma enorme biblioteca padrão única de funcionalidade como o .NET (e as outras principais plataformas centradas na web). Então você pode ter que comprar componentes, ou executar interoperabilidade, ou lançar sua própria funcionalidade que vem "de graça" com uma linguagem mais, digamos "centrada na web" como PHP ou C # ou Ruby ou qualquer outra coisa. Isso significa que você paga mais.

Adicione tudo isso ao fato de que a velocidade computacional de thread único não é tão importante na web. Se você precisa de mais escalabilidade, a maioria das organizações pode, economicamente, apenas lançar mais núcleos para o problema e ficar bem. Isso não é verdade para todos, é claro. Eu imagino que o núcleo do motor do Google seja escrito em C ou uma linguagem semelhante, não apenas para velocidade, mas para economizar dinheiro real em custos de energia.

Dave Markle
fonte
48
Uau, um argumento para .NET contra C por causa de bibliotecas ? Claro, o stdlib é menor, mas temos décadas de bibliotecas (muitas de código aberto) em C. Estou tendo problemas para pensar em qualquer coisa no stdlib do .NET para a qual não haja uma biblioteca C madura e gratuita.
Ken de
3
Não acho que ele estava defendendo o .NET especificamente, acho que ele apenas quis dizer que existem linguagens por aí que têm muitas bibliotecas coesas. Tenho certeza de que C tem muitos, mas para ser honesto, não encontrei nenhum tipo de repositório que reúna todos em um único lugar ou os empacote.
Abs de
16
@Ken A manipulação de strings é uma tarefa muito comum em aplicativos da web. Existem bibliotecas C para isso, mas não são tão numerosas ou utilizáveis ​​como as bibliotecas em [escolha uma linguagem de alto nível].
Andres Jaan Tack de
23
@Ken: Há uma grande diferença quando você tem um único conjunto de funcionalidades bem suportado versus uma infinidade de pequenas bibliotecas que diferem amplamente em conjunto de recursos, licenciamento e suporte.
Dave Markle de
49

Murmurar...

Parece que estou um pouco atrasado nessa discussão - mas só descobri agora. E eu sou grato a todos vocês por tantas contribuições.

Eu sou o autor do G-WAN, o que deixa claro que trabalhei seriamente no assunto: G-WAN é mais rápido do que todos os outros servidores da Web (sem processamento) e todos os outros servidores de aplicativos da Web (qualquer processamento que você possa imaginar).

Sim, ANSI C também tornou possível processar mais conteúdo estático - com CPUs menos potentes (ANSI C não é apenas sobre fazer o conteúdo dinâmico voar).

A propósito, G-WAN usa scripts C (nenhum compilador C e vinculador necessário), portanto, o ciclo / atraso de compilação / vinculação não existe.

No processo de comparação de G-WAN com .NET Java e PHP, escrevi aplicativos semelhantes em todas as 4 linguagens: http://gwan.ch/source/

E, para minha consternação, as linguagens de script modernas eram não mais fáceis de usar.

Uma parte do trabalho que é especialmente frustrante é procurar desesperadamente pela chamada de API 'mágica' que fará o que você deseja.

Pense em como fazer 'muitos milhares' em:

C #

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

Java

new DecimalFormat("0.00"); ...

PHP

number_format($amount, 2); ...

ANSI C

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

O "..." significa que alguma pré-configuração ou pós-processamento é necessária. ANSI C é claramente mais fácil de usar e lembrar.

Quando o PHP tem mais de 5900 chamadas de API (C # e Java não muito longe), encontrar a chamada de API certa é um desafio por si só. O tempo perdido para descobrir isso (e então descobrir o quão mal a chamada API nativa é implementada), o tempo para aprender por hart para a próxima vez que você precisar, todo esse tempo está privando você do tempo necessário para resolver sua aplicação problemas.

Eu li (acima) que o PHP é mais conciso do que ANSI C? Por que então usar"//:: this is a comment ::" vez de "// this is a comment"? Por que ter uma sintaxe de 'milhares' tão estupidamente complexa?

O outro argumento usual é que Java e similares fornecem chamadas dedicadas para aplicativos da web.

Não consegui encontrar nada para escapar do HTML em Java, então escrevi minha versão dele:

  // 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();
  }

Você realmente acredita que o mesmo código em ANSI C seria mais complexo? Não, seria imensamente mais simples e rápido.

Java (derivado de C) está exigindo que os programadores vinculem strings multilinhas com um '+'
C # (derivado de C) está exigindo que os programadores vinculem strings multilinhas com um '+'
PHP (derivado de C) está exigindo programadores vincular strings de várias linhas com um '.'

ANSI C não tem esse requisito agora completamente estúpido (obsoleto).

Então, onde é o tão óbvio progresso reivindicado pelas línguas modernas? Eu ainda estou procurando por isso.

Atenciosamente,

Pierre.

Pierre
fonte
10
Não entendo muito bem seu comentário sobre o processamento extra de milhares; para C # que você parou , amount), o PHP funciona como está e seu exemplo ANSI C precisa de mais dois argumentos (buffer e tamanho do buffer). Com a notável exceção de Java, seu exemplo parece provar o ponto oposto. Além disso, nunca vi essa //:: comment ::sintaxe antes; PHP certamente não exige isso.
icktoofay
1
Para ser honesto com você, todas as outras opções parecem muito melhores do que ANSI C, que "é claramente mais fácil de usar e lembrar" [sic].
Jarrod Mosen
Como o G-WAN se compara ao NGINX se ambos foram escritos em C?
m4l490n
47

A mesma razão pela qual não usamos C para a maioria da programação. Os benefícios (que são principalmente desempenho) não superam os custos (tempo de desenvolvimento, falta de gerenciamento automático de memória, falta de proteção automática contra estouros de buffer, ter um estágio de compilação entre os estágios de edição e teste, etc).

Quentin
fonte
10
Estava digitando a mesma coisa e você chegou antes de mim. Só quero acrescentar que proteger sites de comportamento malicioso já é um grande desafio, não precisamos adicionar vetores de ataque em potencial devido ao uso indevido de gerenciamento de memória, ponteiros etc.
Rob Allen
@ Jordan: Tenho a sensação de que você não fez nenhuma programação web em C. O que você está dizendo não se encaixa no modelo de como a programação web é feita.
2
Claro que sim, supondo que seu site tenha qualquer lugar para interação do usuário, seja por URL ou entrada de formulário. Depois que os dados são entregues ao servidor, cabe ao programador garantir a alocação correta da memória. G-WAN tem alguma abstração em torno dos parâmetros de consulta, mas isso não o salvará completamente. Não estou dizendo que feito corretamente, a programação C web não pode ser segura e rápida, mas é mais suscetível a erros mais severos.
Jordan
3
suspiro @Kinopiko: Se você não sabe o que é buffer overflow, não deveria estar codificando em C. 'nuff disse. Para mais informações: securecoding.cert.org/confluence/display/seccode/...
L̳o̳̳n̳̳g̳̳p̳o̳̳k̳̳e̳̳
29

A maioria dos aplicativos de rede, especialmente servidores da web, são muito mais "vinculados a E / S" - ou seja, são capazes de enviar dados muito mais rápido do que a rede pode aceitar. Portanto, algo que é altamente eficiente da CPU não é uma grande vitória, ao passo que algo que é escalonável e sustentável é. Portanto, não há razão para aceitar as desvantagens de C e perder as vantagens de um ambiente gerenciado como Java, .NET, Python, Perl ou outras linguagens.

Paul Tomblin
fonte
1
C é muito mais rápido.
14
Se eu puder preencher o canal da rede com Java ou Perl (e posso), o fato de C ser mais rápido é irrelevante.
Paul Tomblin de
1
@Kinopiko, você está dizendo que tem um tubo maior, mais acessos à página e mais dados para enviar do que eBay (Java), Stack Overflow (C # /. NET), Google ou qualquer um de um milhão de sites altamente usados ​​escritos em linguagens de nível superior ?
Paul Tomblin de
1
@Paul Tomblin: O propósito de um aplicativo da web não é preencher o canal da rede, mas fazer algum processamento. Se você só precisa servir algum texto e imagens, você deve usar páginas html estáticas, que oferecem desempenho superior. Na maioria dos casos, as páginas estáticas são servidas a partir do cache, portanto, seu servidor não precisa fazer nada. OTOH, quando o processamento é necessário, pode muito bem ser o gargalo (embora mais comumente o disco seja o gargalo).
PauliL
4
Você precisa lembrar que os aplicativos da web são apenas uma fração de uma "pilha de servidor" que lida com as solicitações do usuário, e não uma parte crítica para o desempenho. Existem outras partes - kernel do sistema operacional (geralmente escrito em C), sistema de arquivos (C), servidor web (geralmente C), interpretador de linguagem (C), banco de dados (geralmente C ou C ++). O aplicativo da Web normalmente só passa dados de uma parte para outra, aplicando algumas operações básicas nele, e seu desempenho não é crucial.
el.pescado
15

C não é uma linguagem conveniente para manipular strings.

Compare C #:

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

C correspondente:

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
fonte
4
O PHP também não lida com Unicode adequadamente, mas é uma linguagem orientada para a Web muito popular.
el.pescado de
12
Portanto, devemos usar C ++, pois tem quase o mesmo desempenho que C, mas compila seu exemplo C # como um encanto?
tstenner de
2
No que diz respeito à manipulação de strings - a aplicação da web geralmente produz apenas strings, então C's printfdeve fazer o trabalho.
el.pescado de
5
C lida com multibyte e Unicode perfeitamente por meio de funções de biblioteca de tempo de execução. Usar as funções de segurança como strncpy e assim por diante torna-o bastante seguro também.
justinhj de
2
Ou você pode usar asprintf (& foobar, "% s% s", foo, bar);
Patrick Lorio
11

Se dificuldade e complexidade não fossem um problema (ha!), Então eu não pararia em C. Eu escreveria x86 assembly. Já se passaram anos desde que usei qualquer servidor web que não fosse x86, e parece cada vez menos provável a cada dia.

Usar C (em vez de assembly ou algo de nível superior) é sugerir que C é o ponto ideal para a eficiência do programador e a eficiência do computador.

Para os programas que escrevo, esse não é o caso: C não combina com os tipos de programas que desejo escrever, e as vantagens dele sobre um montador de macro decente simplesmente não são tão significativas. O programa que estou escrevendo agora não é difícil no HLL de minha escolha, mas a complexidade dele em assembly ou C seria tão alta que nunca seria concluído. Eu reconheço que um programador suficientemente inteligente com tempo suficiente poderia fazer com que ele rodasse mais rápido em assembly ou C, mas eu não sou esse programador.

Ken
fonte
7
  • Está inseguro
  • Está difícil de ler
  • é difícil de manter, o tempo de desenvolvimento é mais lento da ordem de magnitude
  • a maior parte do seu material da web é provavelmente vinculado a E / S, então o aumento de velocidade não importa, especialmente quando você usa uma linguagem rápida como Java ou C #
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
fonte
2
o que significa "linguagem rápida como Java ou C #"?
RobS de
3
@Kinopiko: quais são as fraquezas das linguagens dinâmicas? Quando um programador noob diz explicitamente que deseja executar código arbitrário via evale php's include? Por favor, em C / C ++ você não afirma que deseja executar código arbitrário, apenas o faz. evalnão é um bug, é a intenção do programador. Em C / C ++, qualquer bug pode levar à execução remota de código, em linguagens dinâmicas, esse não é o caso, a menos que algum idiota esteja brincando eval.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
1
"e tão ou mais rápido que C / C ++ dependendo do que você está fazendo" talvez, mas você ainda está lidando com um ambiente de memória gerenciada com Java e C #, o que pode se tornar uma desvantagem em cenários de alto tráfego.
RobS de
5
"e C certamente não tem tantos pontos fracos de segurança quanto qualquer linguagem dinâmica" Isso , meu amigo, é um disparate completo. Por que esse comentário tem 3 votos positivos?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
2
@Kinopiko: Bem, na verdade, você não pode explicar em lugar nenhum. Não há explicação para isso. C tem um problema muito maior do que qualquer linguagem dinâmica. A pior coisa que pode acontecer em uma linguagem dinâmica é "attribute not found, whoop dee doo".
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
7

Eu sei que essa pergunta já foi respondida até a morte, mas há 2 coisas não mencionadas até agora que são extraordinariamente importantes para o sucesso em qualquer paradigma de programação, e especialmente no desenvolvimento web, onde você tem muitas pessoas que não são necessariamente programadores, trabalhando com o código.

  1. Comunidade envolvida e útil, também conhecida como Pessoas que já resolveram meu problema. É muito fácil até mesmo para o mais noob dos novatos no Google por que eles estão recebendo erros de "cabeçalhos já enviados" em PHP, enquanto essa informação pode não estar disponível para uma estrutura ou linguagem que é nova na cena, ou de outra forma não tem massa crítica.
  2. Frameworks, para que a maioria dos programadores consiga resolver problemas de negócios e não hackear códigos juntos.

Se eu tivesse um aplicativo crítico que exigisse desempenho extremo, usaria C, mas levaria muito mais tempo para ser escrito, e nunca chegaria ao mercado. Até que haja o nº 1 ou o nº 2, não é viável para mim usá-lo.

Jordânia
fonte
6

C é uma linguagem de baixo nível para muitos propósitos: sem OOP, muito gerenciamento manual de recursos.

Há um uso limitado de C para web, por exemplo Klone . É usado principalmente para casos de aplicativos integrados de poucos recursos.

No entanto, existem estruturas da web C ++ como CppCMS que são usadas para o desenvolvimento de aplicativos da web de alto desempenho.

C ++ permite que você aproveite a alta abstração e o acesso refinado ao que está fazendo exatamente, oferecendo uma opção muito melhor para implantar e desenvolver grandes aplicativos.

Mas você pode usá-los no caso em que o desempenho e o uso de recursos são muito mais críticos do que os custos de tempo de comercialização e desenvolvimento, já que geralmente o desenvolvimento da web é mais rápido usando boas estruturas da web para linguagens como Java, Python ou PHP. Também geralmente há programadores menos competentes para as linguagens C ++ do que Java / P * pelo mesmo salário.

Portanto, é uma questão de prioridades, também há menos ferramentas para desenvolvimento Web C ++ do que para PHP / Python / Perl ou Java.

Artyom
fonte
2
Interessante, eu não conhecia o CppCMS, um framework web de baixo nível escrito em C ++. Pode ser o melhor dos dois mundos, situado entre C e as linguagens da web.
Abs de
Agora é um framework de baixo nível, é um framework web MVC que é muito RÁPIDO.
Artyom de
Desculpe, apenas me refiro a qualquer coisa que não seja uma linguagem da web de baixo nível. Eu entendo que é um framework web MVC.
Abs de
Não existe "linguagem da web", provavelmente apenas o PHP pode ser chamado de web one. Todas as outras linguagens, incluindo Java, Python, Perl, Ruby e C # são linguagens de propósito geral usadas para a web.
Artyom de
1
Bem, se quisermos ser específicos assim, não existem linguagens de programação de propósito geral. Existem apenas procedimentos, estruturados, orientados a objetos, funcionais ... etc ...
Abs de
5

@Joeri Sebrechts

FUD em ação:

PHP, Python e assim por diante são fáceis de escalar usando o hardware para resolver o problema.

Bem, na verdade não. Eles não escalam verticalmente e não escalam horizontalmente. Veja: http://gwan.ch/en_scalability.html onde é explicado quantos problemas estão à frente de maus desempenhos.

Suponha que custe 1 pessoa 1 ano de esforço para desenvolver um aplicativo em PHP e 3 anos para fazê-lo em C (já que C requer mais esforço para fazer a mesma coisa).

Errado de novo. Se as bibliotecas PHP foram escritas em C, elas podem ser usadas diretamente em C, fornecendo instantaneamente a 'produtividade única' que você afirma que o PHP tem.

Isso significa que a necessidade reduzida de hardware do código C deve representar 2 anos de salários para que o C se torne atraente. Na prática, isso (quase) nunca acontece.

Pure FUD (veja a resposta acima).

A escala do Facebook é tão grande que o hardware é um custo grande o suficiente para cuidar. É por isso que eles desenvolveram o HipHop, que compila PHP para C ++. Ele traz o melhor dos dois mundos: a simplicidade da programação em PHP e o desempenho bruto do C ++. O Facebook ainda é desenvolvido em PHP, mas quando você o usa, é todo código nativo.

O HipHop é muito mais rápido que o PHP, sem dúvida. Mas se você comparar o HipHop com uma implementação em C simples, você terá duas camadas de sobrecarga:

  • as interfaces de PHP para C ++ (que usam as bibliotecas C ++ inchadas);
  • o C ++ se incha (o que torna o C ++ 2-10 vezes mais lento que o C normal).

Além disso, HipHop foi escrito no modo acadêmico ineficiente e sem noção (separado de qualquer realidade do mundo real). claro, ele pode impressionar os programadores de PHP, mas mostre esse código a um programador integrado e ele sentirá pena do Facebook.

"Uma linguagem que não tem tudo é realmente mais fácil de programar do que outras que têm" - Dennis M. Ritchie

Ao contrário da (maioria) da linguagem de programação USUÁRIOS FINAIS, Dennis sabia algumas coisas sobre o assunto, ao que parece.

Pierre
fonte
3
(1) Não leve as coisas tão para o lado pessoal, eu não queria criticar o seu produto porque nem conhecia o seu produto. (2) Você faz uma prova de conceito interessante com G-wan, mas espero que me desculpe se eu esperar e ver a abordagem até ver aplicativos da web do mundo real usando-o, e não apenas alguns benchmarks sintéticos. (3) Você caracterizou incorretamente a reclamação do Facebook sobre o dimensionamento horizontal, porque o problema deles é com memcache e desempenho de vários núcleos de banco de dados, o gargalo de aplicativos da web do mundo real, que é algo que o G-wan não ajuda a resolver. (4) HipHop agradece suas contribuições de código, tenho certeza.
Joeri Sebrechts
1
Falando sobre a questão da produtividade. Já escrevi aplicativos da web em C antes, muitas luas atrás, e na época eram necessárias muito mais linhas para fazer a mesma coisa do que o PHP, embora corresse um risco muito maior de falhas / vazamentos. (Eu sou apenas "normal" nesses tipos de bugs, o que significa que eu os escrevo de vez em quando.) Baseio meu julgamento nessa experiência até ver aplicativos reais que demonstram o contrário (por exemplo, uma porta wordpress para C que não requer muito mais linhas de código).
Joeri Sebrechts
Como algo "não escala verticalmente"? Você quer dizer que não se beneficia de um desempenho de núcleo único mais rápido e de um desempenho de memória mais rápido?
rakslice
5

Deve haver mais razões pelas quais todos nós usamos PHP, Python, Ruby etc, além de ser fácil de desenvolver nessas linguagens

Esta é toda a razão e a única necessária. Ele tem muitos benefícios, sendo o principal deles o tempo de lançamento no mercado. Se você conseguir colocar seu aplicativo da Web online em um mês usando PHP em vez de dois meses usando C, talvez você ganhe. Se você puder adicionar um novo recurso em uma semana usando Ruby on Rails em vez de duas semanas usando C, novamente você ganha. Se você puder consertar um bug em um dia usando Python em vez de dois dias usando C, você ganha mais uma vez. Se você puder adicionar um recurso porque está usando a linguagem X que seus concorrentes não podem adicionar porque estão usando a linguagem Y e é muito difícil nessa linguagem devido às restrições de recursos, então você definitivamente ganha.

E por "ganhar" eu realmente quero dizer que você não perde.Seus concorrentes estão usando linguagens e estruturas de nível superior para desenvolver seus sites, portanto, se você usar C, não estará competindo com outras pessoas que usam C, você está perdendo contra outras pessoas que não usam C. Apenas para competir, você tem para usar ferramentas com níveis semelhantes de abstração.

Se o desempenho se tornar um problema, você pode reescrever as partes lentas do seu site em idiomas de melhor desempenho. Ou você pode simplesmente jogar mais hardware nele. Na verdade, um problema de desempenho é o que chamamos de "bom problema de se ter" - significa que você já conseguiu. Mas gastar mais tempo desenvolvendo a funcionalidade básica do seu site raramente é uma opção. Escrevê-lo em C apenas para que funcione mais rápido é uma otimização prematura, que, como nos diz Knuth, é a raiz de todos os males.

Tudo isso implica que, se você puder usar uma linguagem com um nível de abstração mais alto do que Python ou Ruby, poderá vencer pessoas que usam Python ou Ruby. A história de Paul Graham de como ele e sua equipe usaram o LISP como uma "arma secreta" no desenvolvimento de sites pode ser instrutiva. http://www.paulgraham.com/avg.html

Claro, se você estiver desenvolvendo um site para sua própria diversão, faça-o no idioma que quiser. E se o seu site for limitado pela CPU (dificilmente algum; eles geralmente são limitados pela E / S), use a linguagem de desempenho mais rápido possível. Se você está tentando inovar, porém, use uma linguagem de alto nível com as melhores abstrações que puder encontrar.

kindall
fonte
Você está esquecendo que a parte do processamento de pedidos de alto volume via web foi escrita em C. Veja as notas no final de paulgraham.com/avg.html .
Giles Roberts
4

Você acha que ser fácil não é um bom motivo. Acho que é um bom motivo. Se você precisa de desempenho final, então C está ok, mas outras linguagens abstraem as coisas difíceis para melhorar a produtividade, facilidade de manutenção e reduzir defeitos.

Craig
fonte
6
Para obter o desempenho máximo, você não precisa apenas de C, mas também de um programador C final. E esses caras normalmente querem muito mais dinheiro do que os programadores Java / P *.
el.pescado
4

Considere que eu não sou um desenvolvedor web, mas vou fazer essas perguntas de qualquer maneira e oferecer um ou dois pontos.

Qual site está escrito em apenas um idioma? Sério, esta discussão parece assumir que um martelo serve para todos os pregos.

Quando foi a última vez que alguém disse seriamente que C era complexo? Quero dizer, na verdade, vocês não podem ficar com um nível muito mais baixo. Não estou falando de C ++ aqui, pois os dois são freqüentemente referenciados coletivamente.

C tem preocupações de segurança, que não podem ser negadas, mas são menos do que o que é visto nos kludges chamados PHP e Perl? Em ambos os casos, um site seguro é uma função da disciplina do programador.

Em qualquer caso, aos comentários. A dificuldade de usar qualquer linguagem depende muito do problema em questão. C e, especialmente, C ++ podem levar a soluções rápidas para um problema em mãos experientes.

Usos industriais para servidores web, isto é, servidores / sites embutidos simplesmente não têm as opções de idioma que um servidor web normal pode ter. Então você acaba usando uma variante de C ou possivelmente algo como BASIC. Seu objetivo é oferecer a funcionalidade que o dispositivo requer e não se preocupar com idiomas. Em um servidor da web convencional, a maneira de fazer isso é com linguagens de alto nível na maioria das vezes. Afaste-se do ferro grande e sua liberdade de programação desaparecerá.

Sem as bibliotecas certas, seria tolice na maioria dos casos fazer um projeto da web do zero em C. A falta de boas bibliotecas padronizadas é um grande negativo aqui.

David Frantz
fonte
3

Aqui está mais algum código relacionado à web escrito em C que vale a pena dar uma olhada ao construir sua própria biblioteca C para a web:

  • cgic: uma biblioteca ANSI C para programação CGI
  • cgit: um frontend da web para repositórios git
  • wbox: ferramenta de teste de HTTP
  • wget html-parse.c
  • curl cookie.c
  • Discount, implementação em C de David Parsons do texto Markdown de John Gruber para linguagem html
  • Protothreads (especialmente para sistemas incorporados), http://www.sics.se/~adam/software.html
  • protothread, projeto de código do Google de LarryRuane
  • projeto uriparser sourceforge
  • http-parser, http request / response parser for c por Ryan Dahl no github
  • nginx
  • ...
ceeit
fonte
2

Bem, dado o fato de que o desenvolvimento da Web é uma questão de ter bibliotecas úteis (do tipo usado pelo PHP), não vejo como C não seria útil.

Afinal, a lógica procedural é a mesma: faça while, for, if then else, etc. seja C, PHP, .Net ou Perl.

E um loop C ou teste não é mais difícil de escrever porque está escrito em C.

A maioria das bibliotecas PHP é feita em C, portanto, o argumento da falta de bibliotecas C para a Web não parece muito convincente.

Meu palpite é que C não foi anunciado como uma linguagem de programação da Web pelos promotores de Java (SUN) e .Net (MICROSOFT) porque eles tinham seu próprio ativo intelectual proprietário (fortemente patenteado) para forçar a adoção.

Como um padrão gratuito (não patenteado), C não oferece nenhum controle 'lock-in' sobre os desenvolvedores ... portanto, talvez a mão pesada de lobby em escolas e universidades para garantir que o dinheiro do contribuinte financiará a adoção de um tecnologia inferior apoiada por interesses privados.

Se C é bom o suficiente para IBM e MICROSOFT (eles não desenvolvem seus produtos em PHP ou .Net), mas não é bom o suficiente para usuários finais, então os usuários finais podem se perguntar por que são convidados a sofrer esse duplo padrão.

Vince
fonte
1
Uhhhh Microsoft.com e sharepoint estão ambos no ASP.NET. Muito do Visual Studio 2010 está em .NET (WPF). Esta afirmação é evidentemente falsa. Use a linguagem de nível mais alto que atenda aos seus requisitos de design. Para a web, isso significa C # / Python / etc e componentes em C / C ++ / etc, onde o desempenho se torna um problema - embora isso quase nunca aconteça.
3Dave
2

Eu usaria C para um aplicativo da web se:

  1. Tenho um pequeno orçamento para o servidor de hospedagem (pequeno VPS) e meu tempo não é caro.
  2. Estou trabalhando para o Facebook, Twitter ou alguém que precisa reduzir a quantidade de servidores usados ​​(com milhares a milhões de usuários).
  3. Quero aprender C e preciso encontrar um aplicativo do mundo real onde possa usá-lo.
  4. Eu conheço C muito melhor do que outras linguagens de script.
  5. Eu sou um cara ecológico e quero reduzir a pegada de carbono do meu aplicativo.

G-WAN executa código como scripts, sim, scripts C como Play! Framework faz para Java. G-WAN é muito rápido e possui uma API fácil. G-WAN torna possível usar C / C ++ para aplicativos da web quando outros servidores não conseguem fazer isso.

Uma coisa é clara: você precisa de um bom programador para escrever um site em C, qualquer desenvolvedor de baixa qualidade pode criar um site com PHP spaghetti :-) Existem detectores de vazamento e até mesmo coletores de lixo para C.

rtacconi
fonte
2

Todas as linguagens que você mencionou são, na verdade, escritas em C / ++. A única diferença são as classes e bibliotecas avançadas que foram criadas a partir do C que compõem o que agora são essas outras linguagens de interpretação. É também por isso que são chamadas de linguagens de script.

Pense nisso como fazer um bolo (PHP / JS):

  • 2 ovos, 1 xícara de leite, 2 palitos de manteiga, 4 xícaras de farinha, 1 xícara de açúcar, bicarbonato de sódio

Mas imagine ter que fazer todos os elementos de que essas coisas são compostas. (C / ++)

  • 17 mg de bicarbonato de sódio, 15 colheres de sopa de proteína, 12 colheres de sopa de membrana vitelina, aminoácido, enxofre, ... Partículas de nêutrons

C é a base de muitas linguagens modernas. É ótimo e quase as linguagens mais poderosas em montagem. Você pode fazer isso, basta investir na construção de todo o código que essas outras linguagens já fizeram. Como construir um bolo da tabela periódica.

Aprenda você pode literalmente fazer qualquer coisa!

GetBackerZ
fonte
1

O manuseio de strings em C pode ser facilitado usando:

Tipos de dados (parte da libslack)

Libslack fornece um tipo de dados de array de ponteiros expansível genérico chamado List, um tipo de dados de tabela hash expansível genérico chamado Map e um tipo de dados String decente que vem com montes de funções (muitos retirados de Perl). Existem também tipos de dados de lista unicamente ou duplamente vinculados abstratos com freelists opcionais "aumentáveis".

ou:

Biblioteca de String Gerenciada (para C)

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

ceeit
fonte
1

"domachine" escreveu:

dependência de plataforma: C precisa ser compilado em código nativo. Este código não funciona em todas as plataformas. Linguagens interpretadas (como PHP) são executadas onde quer que exista um interpretador. Claro que este problema pode ser resolvido, mas você vê a vantagem de desenvolver em PHP neste caso particular.

Você já se perguntou em que linguagem o interpretador PHP portátil é escrito?

Em ANSI C.

Portanto, antes de descartar a portabilidade do ANSI C novamente, pergunte-se em qual linguagem sua linguagem de programação favorita foi escrita ... (dica: quase todas foram escritas em C / C ++).

Os compiladores ANSI C estão disponíveis em todas as plataformas nas quais trabalhei - e o mesmo não é verdade para o PHP e seu gigantesco runtime.

Isso é demais para o argumento da portabilidade .

CClue
fonte
2
Bem, PHP NÃO é minha linguagem favorita. Ainda não codifiquei nada em PHP. Sou um programador C e C ++. Nunca rejeitei a portabilidade do C! A única coisa que mencionei foi a facilidade de aplicar scripts PHP a um WebSpace existente. Mostre-me o caso em que você pode obter um WebSpace de baixo orçamento com um compilador. Talvez eu esteja errado, mas acho que você é um desses programadores fanáticos que adora uma linguagem, mas não vê as vantagens de outra, talvez mais apropriada. Eu adoro C e C ++, mas sou capaz de pensar fora da caixa.
máquina de
0

Semelhante ao G-WAN, mas para Cocoa / Objective-C é Bombax, uma estrutura de aplicativos da web.

http://www.bombaxtic.com

Por falar em Objective-C, não resisto a apontar o MacRuby, que tem o potencial de revolucionar a maneira como faremos aplicativos web um dia.

Gregg
fonte
Bem, MacRuby está morto agora.
Banjocat de
0

Outro ponto pode ser a dependência da plataforma. C precisa ser compilado em código nativo. Este código não funciona em todas as plataformas.

As linguagens interpretadas são executadas onde quer que exista um intérprete. Muitos provedores, por exemplo, fornecem PHP-Interpreters instalados em seus servidores, mas com um sistema operacional Windows. Se você agora está desenvolvendo em uma máquina Linux. Você tem um problema.

Claro que este problema pode ser resolvido, mas você vê a vantagem de desenvolver em PHP neste caso particular.

Espero que isso ajude, respeito domachine

máquina
fonte
0

PHP, Python e assim por diante são fáceis de escalar usando o hardware para resolver o problema.

Suponha que custe 1 pessoa 1 ano de esforço para desenvolver um aplicativo em PHP e 3 anos para fazê-lo em C (já que C requer mais esforço para fazer a mesma coisa). Isso significa que a necessidade reduzida de hardware do código C deve representar 2 anos de salários para que o C se torne atraente. Na prática, isso (quase) nunca acontece.

Como toda regra, há uma exceção. A escala do Facebook é tão grande que o hardware é um custo grande o suficiente para cuidar. É por isso que eles desenvolveram o HipHop , que compila PHP para C ++. Ele traz o melhor dos dois mundos: a simplicidade da programação em PHP e o desempenho bruto do C ++. O Facebook ainda é desenvolvido em PHP, mas quando você o usa, é todo código nativo.

Joeri Sebrechts
fonte
0

No final, você pode usar absolutamente qualquer linguagem para desenvolver sites, incluindo assembler (via CGI etc.). Se você quis dizer por que não usamos uma linguagem compilada, bem, já temos .NET, Java e outras.

Andrei Rînea
fonte
0

Você tem que amar o que está fazendo para alcançar resultados. Linguagens como java e php foram criadas com muito esforço para tornar a vida das pessoas mais fácil. O Php tem beneficiado especialmente muitos programadores da web que aprendem sozinho hoje. Você pode ver o tipo de suporte que tem no mundo do desenvolvimento web.

O Java Iam foi escrito para ajudá-lo em tudo o que é possível no mundo de hoje. O enorme livro é uma indicação clara e é uma besta se você também estiver interessado em desenvolvimento para a web. O mesmo vale para Python. São linguagens e plataformas fantásticas. Não é de admirar que sejam extremamente populares.

Eu sou um devoto C e em parte isso se deve a certas limitações que me impediram de dar uma olhada em outras linguagens como php. Estou escrevendo em C diariamente e todos os dias tenho orgulho de ee aprender algo novo também. Isso me faz sentir muito bem e também comecei a aprender como C era a escolha padrão ao escrever aplicativos para sites por meio do Cgi. Isso é abstraído em outras plataformas e quando você desenvolve sites que têm a ver com bancos de dados e serviços da web, você precisa saber o que está acontecendo nos bastidores.

No entanto, se você sabe de tudo isso e ainda deseja usar uma linguagem de script, deve haver um motivo válido e não precisamos de ninguém para aconselhar contra isso.

Viz
fonte