Tararear...
Parece que llegué un poco tarde en esta discusión, pero lo acabo de descubrir ahora. Y les agradezco a todos ustedes por tanto aporte.
Soy el autor de G-WAN, lo que deja en claro que he trabajado seriamente en el asunto: G-WAN es más rápido que todos los demás servidores web (sin procesamiento) y todos los demás servidores de aplicaciones web (cualquier procesamiento que pueda imaginar).
Sí, ANSI C también hizo posible procesar más contenido estático, con CPU menos potentes (ANSI C no se trata solo de hacer volar los contenidos dinámicos).
Por cierto, G-WAN usa scripts C (no se necesita compilador y enlazador de C) por lo que el ciclo de compilación / enlace / retraso no existe.
En el proceso de comparar G-WAN con .NET Java y PHP, escribí aplicaciones similares en los 4 idiomas: http://gwan.ch/source/
Y, para mi consternación, los lenguajes de programación modernos no eran más fáciles de usar.
Una parte del trabajo que es especialmente frustrante es buscar desesperadamente la llamada API "mágica" que hará lo que quieres hacer.
Piense en cómo hacer 'bonitos miles' en:
C#
String.Format("{0:n}"...
Java
new DecimalFormat("0.00"); ...
PHP
number_format($amount, 2); ...
ANSI C
sprintf("%'.2f", amount);
El "..." significa que es necesaria alguna preconfiguración o procesamiento posterior. ANSI C es claramente más fácil de usar y recordar.
Cuando PHP tiene más de 5900 llamadas API (C # y Java no muy lejos), encontrar la llamada API correcta es un desafío por sí solo. El tiempo perdido para encontrar esto (y luego para descubrir qué tan mal está implementada la llamada a la API nativa ), el tiempo para aprender a hacerlo para la próxima vez que lo necesite, todo este tiempo lo está privando del tiempo necesario para resolver su aplicación problemas.
He leído (arriba) que PHP es más conciso que ANSI C? ¿Por qué entonces usar en "//:: this is a comment ::"
lugar de "// this is a comment"
? ¿Por qué tener una sintaxis tan estúpidamente compleja de "miles de personas"?
El otro argumento habitual es que Java y similares proporcionan llamadas dedicadas para aplicaciones web.
No pude encontrar nada para escapar de HTML en Java, así que escribí mi versión:
// 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();
}
¿De verdad cree que el mismo código en ANSI C sería más complejo? No, sería inmensamente más sencillo y rápido.
Java (derivado de C) requiere que los programadores vinculen cadenas de varias líneas con un '+'
C # (derivado de C) requiere que los programadores vinculen cadenas de varias líneas con un '+'
PHP (derivado de C) requiere que los programadores enlazar cadenas de varias líneas con un '.'
ANSI C no tiene este requisito ahora completamente estúpido (obsoleto).
Entonces, ¿es el progreso tan obvio que reclaman las lenguas modernas? Todavía lo estoy buscando.
Sinceramente,
Pierre.