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(" "); else
if(c == '"') sb.append("""); else
if(c == '&') sb.append("&"); else
if(c == '<') sb.append("<"); else
if(c == '>') sb.append(">"); else
if(c == '\n') sb.append("<br/>"); 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.