Hừ ...
Có vẻ như tôi hơi muộn trong cuộc thảo luận này - nhưng tôi mới phát hiện ra nó bây giờ. Và tôi biết ơn tất cả các bạn vì rất nhiều ý kiến đóng góp.
Tôi là tác giả của G-WAN, điều này nói rõ rằng tôi đã làm việc nghiêm túc về vấn đề này: G-WAN vừa nhanh hơn tất cả các Máy chủ Web khác (không xử lý) và tất cả các Máy chủ Ứng dụng Web khác (bất kỳ quá trình xử lý nào bạn có thể tưởng tượng).
Có, ANSI C cũng giúp xử lý nhiều nội dung tĩnh hơn - với các CPU ít mạnh hơn (ANSI C không chỉ giúp nội dung động bay).
Nhân tiện, G-WAN sử dụng tập lệnh C (không cần trình biên dịch C và trình liên kết) nên chu trình / độ trễ biên dịch / liên kết không tồn tại.
Trong quá trình so sánh G-WAN với .NET Java và PHP, tôi đã viết các ứng dụng tương tự bằng cả 4 ngôn ngữ: http://gwan.ch/source/
Và, tôi thất vọng, các ngôn ngữ viết kịch bản hiện đại không dễ sử dụng hơn.
Một phần của công việc đặc biệt khó chịu là tìm kiếm một cách tuyệt vọng lệnh gọi API 'ma thuật' sẽ thực hiện những gì bạn muốn.
Hãy suy nghĩ về cách thực hiện 'hàng nghìn' trong:
C #
String.Format("{0:n}"...
Java
new DecimalFormat("0.00"); ...
PHP
number_format($amount, 2); ...
ANSI C
sprintf("%'.2f", amount);
"..." có nghĩa là một số cấu hình trước hoặc xử lý sau là cần thiết. ANSI C rõ ràng là dễ sử dụng và dễ nhớ hơn.
Khi PHP có hơn 5900 lệnh gọi API (cách đó không xa là C # và Java), việc tìm kiếm lệnh gọi API phù hợp là một thách thức. Thời gian lãng phí để tìm cái này (và sau đó để tìm bản địa tệ hại như thế nào lệnh gọi API được triển khai đến mức nào), thời gian để tìm hiểu bằng cách sử dụng nó cho lần tiếp theo bạn cần, tất cả thời gian này đang tước đi của bạn thời gian cần thiết để giải quyết ứng dụng của mình các vấn đề.
Tôi đã đọc (ở trên) rằng PHP ngắn gọn hơn ANSI C? Tại sao lại sử dụng "//:: this is a comment ::"
thay vì"// this is a comment"
? Tại sao lại có một cú pháp 'khá nhiều nghìn' phức tạp đến vậy?
Lập luận thông thường khác là Java và những thứ tương tự cung cấp các lệnh gọi dành riêng cho các ứng dụng Web.
Tôi không thể tìm thấy bất kỳ thứ gì để thoát HTML trong Java nên tôi đã viết phiên bản của mình về 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();
}
Bạn có thực sự tin rằng cùng một đoạn mã trong ANSI C sẽ phức tạp hơn không? Không, nó sẽ đơn giản hơn và nhanh hơn.
Java (có nguồn gốc từ C) đang yêu cầu các lập trình viên liên kết các chuỗi nhiều dòng với một '+'
C # (bắt nguồn từ C) đang yêu cầu các lập trình viên liên kết các chuỗi nhiều dòng với một '+'
PHP (bắt nguồn từ C) đang yêu cầu các lập trình viên phải liên kết các chuỗi nhiều dòng bằng dấu '.'
ANSI C không có yêu cầu hoàn toàn ngu ngốc (lỗi thời) này.
Vì vậy, có phải là sự tiến bộ rõ ràng mà các ngôn ngữ hiện đại tuyên bố không? Tôi vẫn đang tìm kiếm nó.
Trân trọng,
Pierre.