Sự khác nhau giữa thông dịch và biên dịch?

Em nghe nói Python là ngôn ngủ thông dịch vậy nó có những khác biệt nào so với các ngôn ngử thông dịch như pascal, c++, c# … Các bạn giải thích giùm mình nhé! Cảm ơn!

Hiểu nôm na thì biên dịch là dịch một lần hết toàn bộ mã nguồn của một chương trình còn thông dịch là chạy đến câu lệnh nào thì dịch câu lệnh đó. Ví dụ cổ điển là thông dịch giống như một thông dịch viên dịch tiếng Việt sang tiếng Anh cho một người nước ngoài trong khi giao tiếp trực tiếp, khi họ nghe đến câu nào thì dịch đến câu đó, còn biên dịch giống như dịch một cuốn sách, sau khi dịch toàn bộ cuốn sách mới đem tới cho người đọc.

Vậy dịch mã nguồn của một ngôn ngữ về thứ gì? Có thể dịch về mã máy (hợp ngữ), dịch về mã trung gian (như bytecode của java, hay mã trung gian của .Net) v.v…

Thực tế không có ngôn ngữ nào hoàn toàn là ngôn ngữ thông dịch hay biên dịch cả, chỉ là ngôn ngữ đó “ưu tiên” sử dụng cách nào hơn thôi. Mọi ngôn ngữ biên dịch đều có thể thông dịch. Chiều ngược lại thì có thể không đúng, vì một số ngôn ngữ thông dịch có khả năng thay đổi mã nguồn của mình trong quá trình chạy, Trong khi chạy, giai đoạn dịch về mã máy đối với các chương trình cấp cao đều là quá trình thông dịch.

18 Likes

Theo mình nghĩ một cách đơn giản thì trong dịch thuật:

  • Biên dịch là giống như bạn soạn thảo ra bản dịch trước.
  • Thông dịch là người khác nói gì thì bạn dịch ra ngay lập tức.
    Tương tự trong lập trình theo mình thì:
  • Python là ngôn ngữ thông dịch vì khi bạn gõ code xong trong Terminal hay trong IDE thì Python báo lỗi ngay (nếu có lỗi).
  • Còn các ngôn ngữ khác như Pascal, C hay C++ thì bạn phải compile trước, sau đó nếu có lỗi thì IDE mới báo.
7 Likes

Giải thích rất dễ hiểu, phải đăng nhập để like ngay :smiley:

mình thấy trong visual studio thì chưa cần compile nó cũng báo lỗi rồi mà ,thấy nó gạch đỏ dưới chân là có lỗi rồi

IntelliSense của VS :smiley: mà cái này ko liên quan thật, RubyMine nó còn gạch chân được mà. Vì lệnh thì có thể động nhưng ngữ pháp thường là tĩnh :slight_smile:

3 Likes

cảm ơn bạn, rất dễ hiểu và chính xác

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?