Cấp bậc tác giả:

TRAINING

Phân biệt biên dịch và thông dịch?

Được viết bởi webmaster ngày 02/08/2016 lúc 12:12 AM
Thông thường, một hệ điều hành nhất định chỉ có thể thực thi (execute) một chương trình được viết bằng mã máy mà bản thân hệ điều hành có thể "hiểu" được. Trong Windows là các file .exe, trong Linux là các file .bin hay file ko có đuôi luôn.
  • 0
  • 20989

Phân biệt biên dịch và thông dịch?

the-nao-la-trinh-bien-dich-va-trinh-thong-dich.jpg

1. Ngôn ngữ lập trình biên dịch (compiled language)

Ngôn ngữ lập trình biên dịch (compiled language) là loại ngôn ngữ được một chương trình khác gọi là Trình biên dịch (compiler) dịch (translate) thẳng từ file ngôn ngữ đó qua file mã máy. Nhờ đó mà hệ điều hành có thể hiểu và thực thi được file mã máy này.

compiler.png

Đây là 1 ví dụ dễ hiểu: các bạn viết chương trình C++ bằng Visual Studio, nhấn F5… chương trình của bạn sẽ được thực thi.

Trong ví dụ này, C++ là ngôn ngữ lập trình biên dịch, Visual Studio là trình biên dịch và Windows là hệ điều hành; quá trình đó được tóm tắt ngắn gọn như sau:

1. Viết code C++ bằng Visual Studio và nhấn F5 (hay 1 nút nào đó ra lệnh chạy).
2. Visual Studio dịch các file .cpp  của bạn ra các file .dll  và .exe .
3. Windows sẽ thực thi các file .dll  và .exe  cho bạn.

Đã nắm được chưa? Vậy tất cả các ngôn ngữ nào có cùng những đặc điểm trên với C++ sẽ là ngôn ngữ lập trình biên dịch:

Arduino, mấy đoạn mã Arduino .ino , .c , .cpp … phải được dịch ra file mã máy rồi upload file mã máy đó vào bảng mạch.
Swift, một thành phẩm sáng chói của Apple Inc, là một ví dụ khác cho nhóm này. Và nhờ được dịch thẳng ra mã máy mà Apple hứa hẹn chương trình cho iOS hay MacOSX sẽ đạt được tốc độ "thần thánh".
Vâng, đúng thế, tuy hạn chế về nền tảng, nhưng các loại ngôn ngữ này sẽ chạy cực nhanh.

2. Ngôn ngữ lập trình thông dịch (interpreted language)

Khác với NNLT biên dịch, loại này không được biên dịch thẳng ra mã máy. Ngược lại, nó được dịch ra 1 file mã trung gian và do một chương trình khác gọi là Trình thông dịch (hoàn toàn khác với trình biên dịch nhé) thực thi trên nền hệ điều hành.

trinh-thong-dich.png

Ví dụ: Java là một NNTL thông dịch điển hình. Các bạn viết mã nguồn Java bằng Netbean trên Linux và lại nhấn… F5, chương trình sẽ được thực thi. Vậy thì trong này, Netbean là trình biên dịch, Linux là hệ điều hành.

Vậy thì trình thông dịch đâu? Thôi đọc tiếp đi.

1. Viết code Java
2. Netbean sẽ dịch các file .java  thành các file .class … hay còn gọi là Java byte code
3. Các file Java byte code sẽ được thực thi bởi JVM (Java virtual machine). JVM chính là trình thông dịch mà mình chưa nhắc tới.
4. Và dĩ nhiên, JVM phải chạy trên nền Linux rồi.

Ngoài Java còn có 1 số NNLT thông dịch phổ biến khác như:
  • C#, cậu chàng nổi tiếng này lưu mã nguồn trong file .cs  và được .NET framework chạy (chủ yếu) trên nền Windows.
  • T-SQL và PL/SQL được SQL engine thực thi trên rất nhiều hệ điều hành khác nhau sau khi được biên dịch.
Thông thường, các ngôn ngữ lập trình thông dịch rất gần gũi với ngôn ngữ tự nhiên, dễ đọc, dễ hiểu, chạy trên nhiều hệ điều hành khác nhau… Nhưng mà nó… chậm lắm.

Tham khảo:
  • Trình biên dịch – Wikipedia: https://vi.wikipedia.org/wiki/Tr%C3%ACnh_bi%C3%AAn_d%E1%BB%8Bch
  • Trình thông dịch – Wikipedia: https://vi.wikipedia.org/wiki/Tr%C3%ACnh_th%C3%B4ng_d%E1%BB%8Bch
  • What’s the difference between a compiled and interpreted language?:http://www.programmerinterview.com/index.php/general-miscellaneous/whats-the-difference-between-a-compiled-and-an-interpreted-language/
  • A Brief Description: http://www.cplusplus.com/info/description/#cij
  • So sánh trình biên dịch và trình thông dịch: http://laptrinh.vn/d/5116-so-sanh-trinh-bien-dich-va-trinh-thong-dich.html
Thông dịch hay biên dịch chỉ là 1 khái niệm tương đối, tùy vào cách các nhà phát hành ngôn ngữ xây dựng nó. Trong một khía cạnh nào đó, một ngôn ngữ vẫn có thể nằm trong 2 nhóm.

Nguồn bài viết: Sưu tầm

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML