Câu trả lời ngắn gọn là: chúng ta không biết , hãy hỏi lại sau 100 năm nữa. (Chúng ta có thể vẫn chưa biết sau đó; có thể chúng ta sẽ không bao giờ biết.)
Về lý thuyết, điều này là có thể. Lấy tất cả các chương trình đã từng được viết, dịch thủ công chúng sang mã máy hiệu quả nhất có thể và viết một trình thông dịch ánh xạ mã nguồn thành mã máy. Điều này là có thể vì chỉ có một số lượng chương trình hữu hạn đã được viết (và khi nhiều chương trình được viết, hãy theo kịp các bản dịch thủ công). Tất nhiên, điều này cũng hoàn toàn ngu ngốc về các điều khoản thực tế.
Sau đó, một lần nữa, theo lý thuyết, các ngôn ngữ cấp cao có thể đạt được hiệu suất của mã máy, nhưng chúng sẽ không vượt qua nó. Điều này vẫn còn rất lý thuyết, bởi vì trong điều kiện thực tế, chúng tôi rất hiếm khi sử dụng để viết mã máy. Đối số này không áp dụng để so sánh các ngôn ngữ cấp cao hơn: nó không ngụ ý rằng C phải hiệu quả hơn Python, chỉ có điều mã máy không thể làm tồi hơn Python.
Đến từ phía bên kia, về các thuật ngữ thử nghiệm thuần túy, chúng ta có thể thấy rằng hầu hết thời gian , các ngôn ngữ cấp cao được giải thích hoạt động kém hơn so với các ngôn ngữ cấp thấp được biên dịch. Chúng tôi có xu hướng viết mã không nhạy cảm với thời gian bằng các ngôn ngữ cấp cao và các vòng lặp bên trong quan trọng về thời gian trong tập hợp, với các ngôn ngữ như C và Python nằm ở giữa. Mặc dù tôi không có bất kỳ số liệu thống kê nào để sao lưu điều này, tôi nghĩ rằng đây thực sự là quyết định tốt nhất trong hầu hết các trường hợp.
Tuy nhiên, có những trường hợp không thể kiểm chứng trong đó các ngôn ngữ cấp cao đánh bại mã mà người ta sẽ viết một cách thực tế: môi trường lập trình có mục đích đặc biệt. Các chương trình như Matlab và Mathematica thường giải quyết tốt hơn các loại vấn đề toán học nhất định so với những gì người phàm có thể viết. Các chức năng của thư viện có thể đã được viết bằng C hoặc C ++ (vốn là nhiên liệu đối với các ngôn ngữ cấp thấp có hiệu quả hơn trại hè), nhưng đó không phải là việc của tôi nếu tôi viết mã Mathicala, thư viện là một hộp đen.
Về mặt lý thuyết có thể là Python sẽ tiến gần hơn, hoặc thậm chí gần hơn, với hiệu suất tối ưu hơn C? Như đã thấy ở trên, có, nhưng chúng ta rất xa ngày hôm nay. Sau đó, một lần nữa, trình biên dịch đã đạt được rất nhiều tiến bộ trong những thập kỷ qua, và tiến trình đó không bị chậm lại.
Các ngôn ngữ cấp cao có xu hướng làm cho nhiều thứ tự động hơn, do đó chúng có nhiều công việc hơn để thực hiện và do đó có xu hướng kém hiệu quả hơn. Mặt khác, chúng có xu hướng có nhiều thông tin ngữ nghĩa hơn, do đó có thể dễ dàng phát hiện tối ưu hóa hơn (nếu bạn đang viết trình biên dịch Haskell, bạn không phải lo lắng rằng một luồng khác sẽ sửa đổi một biến dưới mũi của bạn). Một trong nhiều nỗ lực để so sánh táo và cam các ngôn ngữ lập trình khác nhau là Trò chơi Điểm chuẩn Ngôn ngữ Máy tính (trước đây gọi là loạt đá luân lưu). Fortran có xu hướng tỏa sáng ở các nhiệm vụ số; nhưng khi nói đến việc thao túng dữ liệu có cấu trúc hoặc chuyển đổi luồng tốc độ cao, F # và Scala làm tốt. Đừng coi những kết quả này là phúc âm: rất nhiều điều họ đang đo lường là tác giả của chương trình kiểm tra tốt như thế nào trong mỗi ngôn ngữ.
Một lập luận ủng hộ các ngôn ngữ cấp cao là hiệu suất trên các hệ thống hiện đại không tương quan mạnh với số lượng lệnh được thực thi và ít hơn theo thời gian. Các ngôn ngữ cấp thấp là kết hợp tốt cho các máy tuần tự đơn giản. Nếu một ngôn ngữ cấp cao thực thi gấp đôi số lệnh, nhưng quản lý để sử dụng bộ đệm một cách thông minh hơn, do đó, một nửa số bộ nhớ cache bị mất, nó có thể sẽ giành chiến thắng.
Trên nền tảng máy chủ và máy tính để bàn, CPU gần như đã đạt đến một cao nguyên nơi chúng không nhận được bất kỳ tốc độ nào nhanh hơn (nền tảng di động cũng đang đến đó); điều này ủng hộ các ngôn ngữ mà sự song song dễ khai thác. Rất nhiều bộ xử lý dành phần lớn thời gian của họ để chờ phản hồi I / O; thời gian dành cho việc tính toán ít quan trọng so với lượng I / O và một ngôn ngữ cho phép lập trình viên giảm thiểu giao tiếp là một lợi thế.
Nói chung, trong khi các ngôn ngữ cấp cao bắt đầu bằng một hình phạt, chúng có nhiều chỗ hơn để cải thiện. Làm thế nào gần họ có thể nhận được? Hỏi lại sau 100 năm nữa.
Lưu ý cuối cùng: thông thường, so sánh không phải là giữa chương trình hiệu quả nhất có thể được viết bằng ngôn ngữ A và cùng ngôn ngữ B, cũng không phải giữa chương trình hiệu quả nhất từng được viết bằng mỗi ngôn ngữ, mà là giữa chương trình hiệu quả nhất có thể được viết bởi một con người trong một khoảng thời gian nhất định trong mỗi ngôn ngữ. Điều này giới thiệu một yếu tố không thể được phân tích về mặt toán học, ngay cả về nguyên tắc. Về mặt thực tế, điều này thường có nghĩa là hiệu suất tốt nhất là sự thỏa hiệp giữa mức độ mã bạn cần viết để đáp ứng mục tiêu hiệu suất và mức độ mã thấp bạn có thời gian để viết để đáp ứng ngày phát hành.