Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Máy tính chỉ hiểu mã máy, còn bạn viết bằng ngôn ngữ giống tiếng Anh. Cần một "người phiên dịch" ở giữa, và có hai kiểu làm việc khác nhau: biên dịch cả cuốn một lần, hoặc dịch và nói từng câu một. Đó là compiler và interpreter.
Compiler (trình biên dịch) đọc toàn bộ mã nguồn và tạo ra một file thực thi bằng mã máy. Sau đó bạn chạy file đó mà không cần mã nguồn hay trình biên dịch nữa. Ví dụ điển hình: C, C++, Go, Rust.
gcc chuong_trinh.c -o chuong_trinh
./chuong_trinhGiống như dịch nguyên cuốn sách sang tiếng khác rồi phát hành. Ưu điểm và nhược điểm:
Interpreter (trình thông dịch) đọc mã nguồn và thực thi từng phần ngay, không tạo file thực thi riêng. Python và Ruby theo cách này (phần nhiều); JavaScript trong trình duyệt cũng được thông dịch/biên dịch tức thời.
python chuong_trinh.pyGiống như phiên dịch viên dịch trực tiếp từng câu khi hai bên đang trò chuyện.
Ranh giới giữa hai kiểu không còn tuyệt đối:
Điều quan trọng cần nhớ: "biên dịch hay thông dịch" là đặc điểm của cách triển khai hơn là của bản thân ngôn ngữ. Cùng một ngôn ngữ có thể có cả trình biên dịch lẫn trình thông dịch.
| Tiêu chí | Compiler | Interpreter |
|---|---|---|
| Cách làm | Dịch toàn bộ trước | Dịch và chạy dần |
| Kết quả | File thực thi | Chạy trực tiếp |
| Tốc độ chạy | Thường nhanh hơn | Thường chậm hơn |
| Phát hiện lỗi | Nhiều lỗi trước khi chạy | Phần nhiều khi chạy |
| Ví dụ | C, C++, Go, Rust | Python, Ruby, PHP |
Bạn có thể tận mắt thấy "bước biên dịch ngầm" của Python bằng module dis:
import dis
def cong(a, b):
return a + b
dis.dis(cong)Kết quả liệt kê các lệnh bytecode đơn giản như nạp hai biến, cộng chúng, trả về kết quả (tên lệnh cụ thể khác nhau giữa các phiên bản Python). Máy ảo Python sau đó thực thi từng lệnh này. Đây là minh họa rõ nhất rằng ranh giới "thông dịch hay biên dịch" không tuyệt đối.
Bạn cũng có thể thử so sánh hai kiểu làm việc trên cùng một bài toán:
gcc -O2.time (Linux, macOS) hoặc công cụ tương đương.Thông thường bản C nhanh hơn nhiều lần, vì mã máy được tối ưu và không có chi phí thông dịch từng lệnh. Nhưng đổi lại, bản Python ngắn hơn, dễ viết hơn và dễ thay đổi. Chọn công cụ là chọn sự đánh đổi phù hợp với bài toán.
Compiler dịch cả cuốn rồi mới phát hành, interpreter dịch tới đâu chạy tới đó, còn thực tế nhiều ngôn ngữ kết hợp cả hai bằng bytecode và JIT. Hiểu điều này giúp bạn đọc thông báo lỗi đúng ngữ cảnh và chọn công cụ hợp lý. Hãy thử biên dịch một chương trình C và chạy một script Python để tự cảm nhận sự khác biệt.
Bạn có thể tiếp tục hành trình với những khóa học lập trình trên codebem.com, học theo tốc độ của riêng mình.
Nguyễn Đình Cường
0 comment