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?
fonte
Respostas:
É 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.
fonte
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 #
Java
PHP
ANSI C
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:
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.
fonte
, 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.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).
fonte
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.
fonte
C não é uma linguagem conveniente para manipular strings.
Compare C #:
C correspondente:
fonte
printf
deve fazer o trabalho.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.
fonte
fonte
eval
e php'sinclude
? Por favor, em C / C ++ você não afirma que deseja executar código arbitrário, apenas o faz.eval
nã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 brincandoeval
.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.
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.
fonte
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.
fonte
@Joeri Sebrechts
FUD em ação:
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.
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.
Pure FUD (veja a resposta acima).
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:
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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:
fonte
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.
fonte
Eu usaria C para um aplicativo da web se:
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.
fonte
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):
Mas imagine ter que fazer todos os elementos de que essas coisas são compostas. (C / ++)
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!
fonte
O manuseio de strings em C pode ser facilitado usando:
ou:
Biblioteca de String Gerenciada (para C)
http://www.cert.org/secure-coding/managedstring.html
fonte
"domachine" escreveu:
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 .
fonte
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.
fonte
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
fonte
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.
fonte
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.
fonte
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.
fonte