Có một vấn đề chung với câu hỏi này là nó quá tuyệt đối. Thật không có nghĩa gì khi nói "ngôn ngữ X nhanh hơn ngôn ngữ Y". Bản thân một ngôn ngữ máy tính không "nhanh" hay "chậm" vì đó chỉ là cách thể hiện một thuật toán. Câu hỏi thực tế phải là một cái gì đó theo thứ tự "tại sao việc triển khai X1 của ngôn ngữ X nhanh hơn thực hiện Y1 của ngôn ngữ Y cho miền vấn đề cụ thể này?"
Một số khác biệt về tốc độ chắc chắn sẽ rơi ra khỏi ngôn ngữ vì các ngôn ngữ nhất định dễ thực hiện một số miền nhất định hơn các ngôn ngữ khác. Nhưng phần lớn những gì làm cho việc thực hiện nhanh không phải là ngôn ngữ. Chẳng hạn, bạn thực sự không thể nói "Python chậm hơn Java" mà không xem xét liệu bạn đang nói về CPython, IronPython hay PyPy. Điều này đặc biệt đúng đối với các ngôn ngữ sử dụng VM vì tốc độ sẽ bị ảnh hưởng trực tiếp bởi chất lượng của VM.
Bên cạnh đó, tôi làm việc với một hệ thống vì nhiều lý do không thể sử dụng JIT trên thiết bị của chúng tôi với máy ảo JavaScript rất phổ biến thường hỗ trợ nó. Điều này có nghĩa là JavaScript của chúng tôi chạy rất xa, chậm hơn nhiều so với trên PC có bộ xử lý tương tự. Một thay đổi đó, không liên quan trực tiếp đến chính ngôn ngữ, đưa JavaScript từ "chậm hơn vài lần so với C ++" thành "các lệnh có cường độ chậm hơn C ++" cho các nhiệm vụ chúng ta quan tâm.
Cũng xem xét là các ngôn ngữ khác nhau về đặc điểm hiệu suất theo những cách không thể so sánh trực tiếp. Quá nhiều điểm chuẩn chỉ cần dịch một chương trình từ ngôn ngữ A sang ngôn ngữ B và không tính đến việc ngôn ngữ khác nhau về những tính năng nhanh. .
Ví dụ: Lấy mã Java này:
for(int i=0;i<10;i++) {
Object o = new Object;
doSomething(o);
}
Sẽ rất hấp dẫn khi "viết lại" điều này trong C ++ và so sánh thời gian chạy:
for(int i=0;i<10;i++) {
Object *o = new Object;
doSomething(o);
delete(o);
}
Vấn đề là, bất kỳ lập trình viên C ++ có thẩm quyền nào cũng sẽ thấy ngay rằng trong C ++, đây không phải là cách nhanh nhất để làm điều gì đó. Bạn có thể dễ dàng tăng tốc mọi thứ bằng cách thay đổi nó để phù hợp hơn với C ++:
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
Vấn đề không phải là C ++ có thể nhanh mà là viết điểm chuẩn để so sánh các ngôn ngữ thực sự rất khó. Để làm điều đó một cách thích hợp, bạn phải là một chuyên gia trong cả hai ngôn ngữ và viết từ đầu bằng cả hai ngôn ngữ. Thậm chí sau đó, bạn có thể dễ dàng chạy vào các khu vực nơi một ngôn ngữ vượt trội trong một nhiệm vụ cụ thể. Ví dụ: tôi có thể viết một phiên bản Towers of Hanoi bằng C ++ sẽ chạy nhanh hơn Java trên bất kỳ trình biên dịch hợp lý nào. Tôi có thể làm điều đó bằng cách gian lận, bằng cách sử dụng các mẫu C ++, được đánh giá tại thời điểm biên dịch (http://forums.devshed.com/c-programming-42/c-towers-of-hanoi-USE-temsheet-424148.html)
Vấn đề là tôi không thể nói rằng "C ++ nhanh hơn Java" bởi vì chương trình của tôi đã quay lại ngay lập tức trong khi phiên bản Java chạy trong vài phút (và hy vọng không ai nhận thấy chương trình của tôi mất nửa giờ để xây dựng.) trường hợp hẹp khác nhau, C ++ là nhanh hơn. Đối với các trường hợp hẹp khác, nó có thể là cách khác. Vì vậy, nó không phải là "C ++ nhanh hơn", mà là "C ++ nhanh hơn trong các trường hợp bạn có thể đánh giá biểu thức khi xây dựng bằng cách sử dụng các mẫu". Ít thỏa mãn, nhưng đúng.
Sự khác biệt về tốc độ trong các ngôn ngữ chủ yếu là về việc thực hiện. Ngôn ngữ biên dịch sẽ nhanh hơn ngôn ngữ được dịch. Biên dịch thành mã gốc sẽ nhanh hơn biên dịch thành mã byte. Điều này sẽ có tác dụng hơn nhiều so với các câu hỏi như liệu ngôn ngữ có được gõ tĩnh hay không. Và tất nhiên, việc triển khai tốt sẽ nhanh hơn những điều xấu.
Và đừng quên rằng các lập trình viên giỏi sẽ tạo ra mã nhanh hơn các lập trình viên xấu, thường đến một mức độ khá lớn hơn sự khác biệt về ngôn ngữ.