Thông dịch và biên dịch

Chúng ta khi nhắc đến các ngôn ngữ lập trình thường nhắc đến cụm từ biên dịch (compiled) và thông dịch (interpreted). Vậy thực sự chúng là gì?

Khả năng nhận thức của con người và một thiết bị điện tử như máy tính là khác nhau. Con người có thể hiểu bất cứ điều gì thông qua các ngôn ngữ tự nhiên, nhưng một máy tính thì không thể. Máy tính cần một trình dịch để chuyển đổi các ngôn ngữ được viết ở dạng mà con người có thể đọc thành dạng mà máy tính có thể đọc.

Khác biệt giữa biên dịch và thông dịch

Trình biên dịch (compiler) và trình thông dịch (interpreter) là các loại trình dịch ngôn ngữ chuyển đổi các đoạn mã lập trình sang ngôn ngữ máy. Điểm khác nhau giữa biên dịch và thông dịch nằm ở quá trình chuyển đổi và thực thi.

  • Thông dịch là khi chạy chương trình, ngôn ngữ mới được dịch sang ngôn ngữ máy và thực thi
  • Biên dịch là trước khi chạy, chương trình sẽ dịch toàn bộ thành mã máy rồi mới tiến hành thực thi.

Chính vì vậy ngôn ngữ thông dịch sẽ dễ hiện thực hơn do bỏ qua việc kiểm tra lỗi và tối ưu code thường được thực hiện trong quá trình compiled. Đồng thời hỗ trợ hoạt động đa nền tảng, mã nguồn có thể thực thi mọi nơi mọi lúc mà không cần biên dịch.

Tuy nhiên nhược điểm của thông dịch là:

  • Độ tin cập thấp hơn do không qua bước check syntax tại quá trình complier
  • Tốc độ thực thi chậm hơn đáng kể so với các ngôn ngữ trình biên dịch
  • Dễ bị lọt lộ dịch ngược code

Ngôn ngữ biên dịch và thông dịch

Ngôn ngữ C++

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.

Ngôn ngữ Java

Java là một ngôn ngữ 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.

Bảng so sánh

Tiêu chíTrình biện dịchTrình thông dịch
Đầu vàoToàn bộ trường trìnhChỉ một dòng code
Đầu raMã đối tượng trung gianKhông tạo ra bất kì mã đối tượng trung gian nào
Cơ chế hoạt độngViệc biên dịch sẽ phải hoàn thành công việc trước khi thực thiViệc biên dịch và thực thi sẽ là đồng thời
Tốc độNhanh hơnChậm hơn
Bộ nhớYêu cầu bộ nhớ nhiều hơn do việc tạo mã đối tượngNó đòi hỏi ít bộ nhớ hơn vì nó không tạo mã đối tượng trung gian
ErrorsHiển thị tất cả các lỗi sau khi biên dịch, tất cả cùng một lúcHiển thị lỗi của từng dòng một
Phát hiện errorRất khó khănTương đối dễ
Các ngôn ngữ lập trìnhC, C++, C#, Scala, typescriptPHP, Perl, Python, Ruby

Leave a Reply

Your email address will not be published. Required fields are marked *