Sự Khác Nhau Giữa “Interpreter” – “Compiler” Và “Code” – “Script” – “Program”
--- Bài mới hơn ---
Cũng khá lâu rồi mới có dịp viết bài cho Blog của mình, hôm nay mình sẽ nói 1 chút về sự khác nhau giữa “Compiler” – “Interpter” và “Code” – “Script” – “Program”. Các khái niệm này thường bị các lập trình viên hiểu nhầm và sử dụng không đúng, tuy có thể không mang lại hậu quả gì ở hiện tại nhưng nó làm chệch hướng tư duy của lập trình viên và hệ quả là hệ lụy không nhỏ khi ngộ nhận những thứ vốn nó không phải như vậy.
Interpter – Trình thông dịch
Trình thông dịch biên dịch một chương trình nguồn theo từng phân đoạn. Sau đó, thực thi các đoạn mã đã được biên dịch. Hoàn toàn khác với trình biên dịch (biên dịch hoàn toàn rồi mới thực thi chương trình).
Đặc điểm:
- Có thể chỉnh sửa mã nguồn bất cứ khi nào bạn muốn.
- Ngôn ngữ lập trình có thể sử dụng 1 cách uyển chuyển và mềm dẻo (tính tùy biến cao).
- Có thể chạy trên mọi nền tảng nếu có trình thông dịch tương ứng, do mã nguồn chỉ ở dạng văn bản nên không phụ thuộc vào hệ điều hành.
- Không hỗ trợ đa luồng (multi-thread), giao tác (transaction). Tuy nhiên vẫn có ngoại lệ, chẳng hạn như: PHP, MySQL.
- Tốc độ thực thi không nhanh bằng các chương trình viết bằng ngôn ngữ hỗ trợ trình biên dịch.
Compiler – Trình biên dịch
Đặc điểm:
- Khả năng bảo mật tốt (không thể xâm phạm mã nguồn và làm thay chức năng của chương trình).
- Rằng buộc chặt chẽ về kiểu trong ngôn ngữ lập trình (tính tùy biến thấp).
- Mã được biên dịch cho hệ thống có cùng ngôn ngữ máy nên phải phụ thuộc vào 1 hệ điều hành nhất định, bù lại sẽ giúp chương trình tận dụng được tính năng đặc trưng của hệ điều hành.
- Hỗ trợ đa luồng (multi-thread) và giao tác (transaction).
- Tốc độ thực thi rất nhanh (do ko phải tốn thời gian biên dịch nhiều lần như Trình thông dịch).
Nhiều người còn phân chia các ngôn ngữ lập trình cấp cao thành các ngôn ngữ biên dịch và các ngôn ngữ thông dịch. Mặc dù vậy, rất hiếm khi một ngôn ngữ lại đòi hỏi là loại biên dịch hay loại thông dịch. Các trình biên dịch và các phần mềm thông dịch là phương thức thực hiện của các ngôn ngữ chứ không phải bản thân ngôn ngữ buộc phải như vậy (rất nhiều lập trình viên thường ngộ nhận điều này).
Việc phân chia này chỉ phản ánh thực trạng phổ biến về phương thức thực hiện của các ngôn ngữ, chẳng hạn như BASIC được nhiều người cho là một ngôn ngữ thông dịch và C thì lại được xem là ngôn ngữ biên dịch nhưng thực tế ra vẫn tồn tại các trình biên dịch cho BASIC và các phần mềm thông dịch cho C.
Code – Mã lệnh
Là những hướng dẫn đơn giản để tạo thành một Script hoặc một Program. Nói cách khác Code là thành phần nhỏ nhất tạo nên Script/Program hoàn chỉnh, và nó giải thích cách thức mà một Script hoặc Program hoạt động như thế nào.
Script – Kịch bản
Là một chuỗi các hướng dẫn, được Interpter biên dịch từng phần mỗi lần chạy, rồi mới được thực thi bởi vi xử lý. (Ví dụ: PHP, Javascript,…)
Program – Chương trình
Là (một hoặc nhiều) chuỗi các hướng dẫn, nó được biên dịch trực tiếp toàn bộ, và sau đó thực thi bởi vi xử lý. Tuy nhiên cũng có ngoại lệ khi Script viết bằng ngôn ngữ thông dịch (ví dụ: PHP) để thực hiện một số chức năng ở cấp độ cao và đủ phức tạp thì vẫn được gọi là một Program.
Lời kết: hi vọng qua bài viết này sẽ giúp bạn hiểu rõ hơn về một vài thuật ngữ mà lập trình viên hay sử dụng sai, và có cái nhìn khái quát hơn về thế giới của ngôn ngữ lập trình. Hẹn gặp lại các bạn trong bài viết kế tiếp 🙂
--- Bài cũ hơn ---