Trước hết, một ngôn ngữ lập trình có thể được suy ra và biên dịch. Giải thích và biên dịch chỉ là phương pháp tạo mã thực thi từ mã nguồn. Với một trình thông dịch, mã nguồn đang được đọc và giải thích bởi một trình thông dịch, sau đó thực thi mã khi nó diễn giải nó. Mặt khác, trình biên dịch đọc mã nguồn và tạo tệp nhị phân thực thi từ mã nguồn - để chương trình có thể được chạy như một quy trình riêng biệt một cách độc lập.
Bây giờ trước khi bất cứ ai thắc mắc ... Có, C / C ++ / C # / Java có thể được diễn giải và có, các tập lệnh JavaScript và Bash có thể được biên dịch. Cho dù có phiên dịch làm việc hoặc trình biên dịch cho các ngôn ngữ này là một câu hỏi khác mặc dù.
Bây giờ để thực sự trả lời câu hỏi khi chúng ta sử dụng "ngôn ngữ được giải thích" trên "ngôn ngữ được biên dịch". Bản thân câu hỏi hơi khó hiểu, nhưng tôi cho rằng nó có nghĩa là khi nào thích diễn giải hơn biên soạn. Một trong những nhược điểm của quá trình biên dịch là nó tạo ra một số chi phí do quá trình biên dịch - mã nguồn phải được biên dịch thành mã máy thực thi để không phù hợp với các tác vụ yêu cầu độ trễ tối thiểu khi gọi mã nguồn để thực thi chương trình. Mặt khác, mã nguồn được biên dịch hầu như luôn luôn nhanh hơn mã nguồn được giải thích tương đương do chi phí gây ra bởi việc diễn giải mã. Mặt khác, thông dịch viên có thể gọi và chạy mã nguồn với rất ít chi phí gọi, nhưng với chi phí thực hiện thời gian chạy.
Cuối cùng, gần như không thể đề cập đến bất kỳ trường hợp sử dụng xác định nào khi thích cái này hơn cái khác, nhưng ví dụ một trường hợp (với trường hợp rất không thực tế của tôi) sẽ là khi mã nguồn chương trình thay đổi linh hoạt giữa các yêu cầu chương trình và quá trình biên dịch quá cao cho nó là sự lựa chọn khả thi. Trong trường hợp đó, việc giải thích mã nguồn thay vì biên dịch có lẽ là điều mong muốn.
Tuy nhiên, có một thứ có thể được coi là một ví dụ trong thế giới thực: mã nguồn hidnig khi triển khai. Với nguyên bảnmã được biên dịch, nhà phát triển triển khai mã macine thực thi của chương trình và dữ liệu. Với mã được giải thích, chính mã nguồn phải được triển khai, sau đó có thể được kiểm tra và thiết kế ngược với nỗ lực ít hơn nhiều so với mã máy kỹ sư đảo ngược. Một ngoại lệ cho điều này là các ngôn ngữ như C # và Java sẽ biên dịch thành ngôn ngữ / mã byte ngay lập tức (MSIL cho C # và mã byte Java cho Java) sau đó được triển khai và biên dịch "ngay lúc đó", giống như một trình thông dịch. Tuy nhiên, tồn tại cái gọi là bộ dịch ngược cho MSIL và Java Bytecode, có thể tái tạo lại mã nguồn gốc với độ chính xác tương đối tốt và do đó các sản phẩm kỹ thuật đảo ngược như vậy tầm thường hơn nhiều so với các sản phẩm kỹ thuật đảo ngược được triển khai trong mã máy gốc.