images
28/09/2020 07:34 am

Compiler vs. Interpreter

Biên dịch các dòng code do người dùng tạo ra (high level language) thành ngôn ngữ mà máy tính có thể thực thi được (machine code). Máy tính sẽ thực thi các dòng lệnh này để trả về kết quả.

Compiler


Biên dịch các dòng code do người dùng tạo ra (high level language) thành ngôn ngữ mà máy tính có thể thực thi được (machine code). Máy tính sẽ thực thi các dòng lệnh này để trả về kết quả.


Quá trình biên dịch và quá trình chạy là 2 bước tách biệt.


Interpreter


Dịch các dòng code do người dùng tạo ra (high level language) thành ngôn ngữ mà máy tính có thể thực thi được (machine code). Tuy nhiên quá trình dịch và quá trình chạy diễn ra chung một thời điểm.

Sự khác biệt


Compiler

Interpreter

Code cần phải được biên dịch sang ngôn ngữ máy. 

Ngôn ngữ máy sau đó được thực thi ở giai đoạn khác.

Tại thời điểm thực thi, code sẽ được chuyển sang ngôn ngữ máy sau đó sẽ được thực thi

Compiler sẽ hỗ trợ kiểm tra các lỗi nếu có. Nếu không biên dịch được chương trình dừng lại. Hạn chế lỗi khi thực thi chương trình: ví dụ lỗi về logic

Có thể xảy ra lỗi khiến dừng chương trình nếu có lỗi về cú pháp.


Việc biên dịch được thực hiện với toàn bộ source code

Các dòng code được biên dịch và thực thi tuần tự từng dòng

Code chỉ cần biên dịch 1 lần, có thể chạy với code đã biên dịch nhiều lần

Mỗi lần chạy là một lần biên dịch và thực thi đồng thời.


Ưu nhược điểm


Yếu tố

Compiler

Interpreter

Tốc độ thực thi



Ưu: 

Tốc độ chương trình chạy nhanh do đã được biên dịch sẵn sang mã máy

Nhược: 

Tốc độ chương trình khá chậm do vừa biên dịch và chạy code

Đơn giản

Nhược: Cấu trúc chương trình và cú pháp thường phức tạp

Các phép toán thường bị ràng buộc logic chặt chẽ (ví dụ: kiểm tra kiểu dữ liệu)

Ưu: Phù hợp với các chương trình có logic đơn giản. Code ngắn gọn, nhanh.

Bài toán phức tạp

Ưu: 

Do có các tổ chức và liên kết các file chặt chẽ. Có kiểm tra khi biên dịch nên chương trình tổ chức tốt. Không có lỗi cú pháp. 

- Không bị xung đột kiểu dữ liệu

Nhược: 

Tổ chức các bài toán lớn gặp nhiều khó khăn vì các liên kết các file source code thường hạn chế. Không check được các lỗi cú pháp hoặc lỗi về kiểu dữ liệu nên khó kiểm soát.

Bảo mật mã nguồn

Phần mềm khi chạy là code đã biên dịch nên khả năng lộ code thấp


Không bảo mật được mã nguồn.


Ngôn ngữ


Compiler

Interpreter

C, C++, Golang, Rust, Java...

PHP, Ruby, Python, Javascript...


Java và một số ngôn ngữ như Scala sẽ được biên dịch thành bytecode và chạy trên máy ảo (JVM) trước khi được dịch sang ngôn ngữ máy khi chạy để đảm bảo tính linh hoạt (Write once - run everywhere)


Lưu ý Compiler hay Interpreter là cách thực thi code, không phải là đặc trưng của ngôn ngữ. Bạn có thể biên dịch Python để chạy.


Tham khảo:

https://www.guru99.com/difference-compiler-vs-interpreter.html

https://calavikevin.wordpress.com/2016/07/13/su-khac-nhau-giua-interpreter-compiler-va-code-script-program/


- Tech Zone

Thư giãn chút nào!!!

Bài viết liên quan