"Công cụ sai" ở đây có nghĩa là chi phí cần thiết cho trình thông dịch phân tích và xử lý mã. Nó được kết nối với khái niệm về ngôn ngữ được dịch và so sánh. Có một số mô hình dịch mã đang được sử dụng, gần như thuộc một trong các loại sau:
- Biên dịch gốc - mã nguồn được biên dịch trực tiếp thành mã máy. Hiệu suất tốt nhất với chi phí di động. Thường được liên kết với C và C ++,
- Biên dịch trung gian - mã nguồn được biên dịch thành ngôn ngữ trung gian đơn giản hóa (mã byte), sau này được giải thích hoặc biên dịch (biên dịch đúng lúc) thành mã máy trong khi thực hiện. Tính di động tốt hơn mã gốc, hiệu suất tốt hơn so với giải thích thuần túy trong khi vẫn giữ một số mặt tích cực của giải thích (như ràng buộc muộn). Ví dụ bao gồm C #, Java và các ngôn ngữ khác nhắm mục tiêu JVM và .NET CLR,
- Giải thích - mã nguồn không được dịch trực tiếp thành mã máy, thay vào đó, nó được diễn giải và thực thi bởi một chương trình thông dịch chuyên dụng. Các thông dịch viên khác nhau về độ tinh vi, trong cách triển khai ngây thơ, tuy nhiên, nó tập trung vào phân tích cú pháp, phân tích và thực thi từng dòng mã nguồn. Giải thích cho phép linh hoạt hơn so với biên dịch, do đó, các ngôn ngữ được giải thích sử dụng rộng rãi hơn cho việc gõ hoặc phản chiếu động, chẳng hạn. Các ngôn ngữ được giải thích thường được xem là mang lại năng suất cho nhà phát triển tăng lên, vì chúng yêu cầu ít mã soạn sẵn hơn và cho vay chính xác để tạo mẫu nhanh. Nhược điểm là giảm hiệu suất. Thường được liên kết với JavaScript, Ruby hoặc Python.
Do đó, sự lựa chọn giữa ngôn ngữ được giải thích và biên dịch tập trung vào câu hỏi, chúng ta đánh giá cao hơn điều gì, năng suất hay hiệu suất của nhà phát triển? Việc di chuyển được mô tả trong bài viết dường như đi theo cùng một dòng suy nghĩ, với ngôn ngữ tạo mẫu mạnh mẽ Ruby được thay thế bằng Scala dựa trên JVM do các cân nhắc về hiệu năng.