Trình biên dịch (compiler) và thông dịch (interpreter) đều có cách thức hoạt động tương tự như nhau. Cả hai đều chuyển đổi mã nguồn sang mã máy mà máy tính có thể hiểu được.
Nhìn chung, các chương trình máy tính tồn tại ở ngôn ngữ cấp cao, dễ hiểu với con người. Thế nhưng máy tính không thể hiểu cùng ngôn ngữ cấp độ cao đó. Vì thế, chúng ta phải chuyển đổi chúng sang học máy và làm chúng dễ đọc với máy tính. Dưới đây là chi tiết sự khác nhau giữa compiler và interpreter.
Compiler
Compiler là một trình biên dịch nhận đầu vào (ví dụ: ngôn ngữ cấp cao), và cho đầu ra của ngôn ngữ cấp thấp. Công việc của Compiler là chuyển đổi code được viết bằng ngôn ngữ lập trình thành machine code (định dạng 0s và 1s) để máy tính có thể hiểu.
- Một trình biên dịch thông minh hơn assembler, nó kiểm tra toàn bộ các kiểu giới hạn, phạm vi, lỗi…
- Nhưng thời gian chạy chương trình của nó dài hơn và chiếm nhiều bộ nhớ hơn. Nó có tốc độ chậm bởi trình biên dịch đi qua toàn bộ chương trình, sau đó biên dịch toàn bộ chương trình thành machine code.
Vai trò của Compiler
Chuyển đổi code được viết ở ngôn ngữ cấp cao thành ngôn ngữ cấp thấp cho máy tính dễ hiểu.
Ưu điểm của Compiler
- Code được biên dịch chạy nhanh hơn so với code được thông dịch.
- Trình biên dịch giúp cải thiện độ an toàn của ứng dụng.
- Vì Compiler cho các công cụ gỡ lỗi nên nó hỗ trợ sửa lỗi dễ dàng.
Nhược điểm của Compiler
- Chỉ bắt được lỗi cú pháp và một số lỗi ngữ nghĩa.
- Quá trình biên dịch có thể mất nhiều thời gian hơn trong trường hợp code cồng kềnh.
Interpreter
Interperter – Trình thông dịch là chương trình dịch ngôn ngữ lập trình thành một ngôn ngữ dễ hiểu. Interpreter chuyển đổi ngôn ngữ cấp cao thành ngôn ngữ trung gian. Nó chứa code được biên dịch trước, mã nguồn…
- Nó chỉ biên dịch một lệnh của chương trình tại một thời điểm.
- Trình thông dịch thường nhỏ hơn trình biên dịch.
Vai trò của Interpreter
Vai trò đơn giản của một trình thông dịch là dịch tài liệu sang ngôn ngữ mục tiêu. Một trình thông dịch hoạt động trên từng dòng code. Nó cũng chuyển đổi ngôn ngữ cấp cao thành ngôn ngữ máy tính.
Ưu điểm của Interperter
- Chương trình được viết bằng ngôn ngữ thông dịch thường dễ gỡ lỗi hơn.
- Trình thông dịch cho phép tự động quản lý bộ nhớ, giảm rủi ro lỗi bộ nhớ.
- Ngôn ngữ được thông dịch linh hoạt hơn ngôn ngữ được biên dịch.
Nhược điểm của Interprerter
- Trình thông dịch chỉ có thể chạy chương trình thông dịch tương ứng.
- Code trình thông dịch chạy chậm hơn so với code biên dịch.
Sự khác biệt chính giữa Compiler và Interpreter
Compiler | Interpreter |
Các bước lập trình
|
Các bước lập trình:
|
Lưu Machine Language dưới dạng Machine Code trên đĩa. |
Không lưu Machine Language. |
Code biên dịch chạy nhanh hơn code thông dịch. |
Code thông dịch chạy chậm hơn code biên dịch. |
Mô hình hoạt động cơ bản là Linking-Loading. |
Mô hình hoạt động cơ bản là thông dịch. |
Tạo kết quả dưới dạng (.exe). |
Không tạo đầu ra. |
Mọi thay đổi trong chương trình nguồn sau khi biên dịch đều cần biên dịch lại toàn bộ mã. |
Bất kỳ thay đổi nào trong chương trình nguồn trong quá trình dịch không cần dịch lại toàn bộ mã. |
Lỗi được hiển thị đồng thời trong Compiler sau khi biên dịch. |
Lỗi được hiện trên từng dòng. |
Có thể xem trước mã, điều này giúp chạy mã nhanh hơn nhờ thực hiện Tối ưu hóa. |
Hoạt động theo dòng làm việc của code, đó là lý do tại sao Tối ưu hóa chậm hơn một chút so với Trình biên dịch. |
Không cần code nguồn để chạy sau đó. |
Cần code nguồn để chạy. |
Chạy chương trình chỉ diễn ra sau khi được biên dịch hoàn toàn. |
Chạy chương trình sau khi đánh giá hay kiểm tra mỗi dòng code. |
Compiler mất nhiều thời gian phân tích code nguồn. |
Interpreter mất ít thời gian phân tích code nguồn hơn. |
Compiler dùng nhiều CPU hơn. |
Interpreter dùng ít CPU hơn. |
Chủ yếu dùng Compilers trong Production Environment. |
Chủ yếu dùng Interpreters trong Programming & Development Environments. |
Code đối tượng được lưu để dùng trong tương lai. |
Không lưu code đối tượng để sử dụng cho tương lai. |
C, C++, C#, … là các ngôn ngữ dựa trên Compiler. |
Python, Ruby, Perl, SNOBOL, MATLAB,… là ngôn ngữ dựa trên Interpreter. |