-thông dịch(interpreter) dịch từng lệnh 1 thông qua chương trình ta gọi là trình thông dịch(interpreter) lần sau chạy lại thì phải trình thông dịch lại. file.Biên dịch(compiler) dịch toàn bộ thông qua chương trình ta gọi là trình biên dịch(compiler), dịch 1 lần và sử dụng mãi mãi không cần biên dịch nữa.
-(compiler) giống như nhà biên dịch dịch cuốn sách tiếng anh sang tiếng việt chỉ dịch 1 lần nhưng có thể in bán ra hàng ngàn cuốn.
- Khác biệt giữa biên dịch và thông dịch
- Ngôn ngữ biên dịch và thông dịch
- Ngôn ngữ C++
- Ngôn ngữ Java
- Bảng so sánh
Chúng ta khi nhắc đến các ngôn ngữ lập trình thường nhắc đến cụm từ biên dịch (compiled) và thông dịch (interpreted). Vậy thực sự chúng là gì?
Khả năng nhận thức của con người và một thiết bị điện tử như máy tính là khác nhau. Con người có thể hiểu bất cứ điều gì thông qua các ngôn ngữ tự nhiên, nhưng một máy tính thì không thể. Máy tính cần một trình dịch để chuyển đổi các ngôn ngữ được viết ở dạng mà con người có thể đọc thành dạng mà máy tính có thể đọc.
Khác biệt giữa biên dịch và thông dịch
Trình biên dịch (compiler) và trình thông dịch (interpreter) là các loại trình dịch ngôn ngữ chuyển đổi các đoạn mã lập trình sang ngôn ngữ máy. Điểm khác nhau giữa biên dịch và thông dịch nằm ở quá trình chuyển đổi và thực thi.
- Thông dịch là khi chạy chương trình, ngôn ngữ mới được dịch sang ngôn ngữ máy và thực thi
- Biên dịch là trước khi chạy, chương trình sẽ dịch toàn bộ thành mã máy rồi mới tiến hành thực thi.
Chính vì vậy ngôn ngữ thông dịch sẽ dễ hiện thực hơn do bỏ qua việc kiểm tra lỗi và tối ưu code thường được thực hiện trong quá trình compiled. Đồng thời hỗ trợ hoạt động đa nền tảng, mã nguồn có thể thực thi mọi nơi mọi lúc mà không cần biên dịch.
Tuy nhiên nhược điểm của thông dịch là:
- Độ tin cập thấp hơn do không qua bước check syntax tại quá trình complier
- Tốc độ thực thi chậm hơn đáng kể so với các ngôn ngữ trình biên dịch
- Dễ bị lọt lộ dịch ngược code
Ngôn ngữ biên dịch và thông dịch
Ngôn ngữ C++
Trong ví dụ này, C++ là ngôn ngữ lập trình biên dịch, Visual Studio là trình biên dịch và Windows là hệ điều hành; quá trình đó được tóm tắt ngắn gọn như sau:
- 1. Viết code C++ bằng Visual Studio và nhấn F5 (hay 1 nút nào đó ra lệnh chạy).
- 2. Visual Studio dịch các file .cpp của bạn ra các file .dll và .exe .
- 3. Windows sẽ thực thi các file .dll và .exe cho bạn.
Ngôn ngữ Java
Java là một ngôn ngữ thông dịch điển hình. Các bạn viết mã nguồn Java bằng Netbean trên Linux và lại nhấn… F5, chương trình sẽ được thực thi. Vậy thì trong này, Netbean là trình biên dịch, Linux là hệ điều
hành.
Vậy thì trình thông dịch đâu? Thôi đọc tiếp đi.
- Viết code Java
- Netbean sẽ dịch các file .java thành các file .class … hay còn gọi là Java byte code
- Các file Java byte code sẽ được thực thi bởi JVM (Java virtual machine). JVM chính là trình thông dịch mà mình chưa nhắc tới.
- Và dĩ nhiên, JVM phải chạy trên nền Linux rồi
Ngoài Java còn có 1 số NNLT thông dịch phổ biến khác như:
- C#, cậu chàng nổi tiếng này lưu mã nguồn trong file .cs và được .NET framework chạy (chủ yếu) trên nền Windows.
- T-SQL và PL/SQL được SQL engine thực thi trên rất nhiều hệ điều hành khác nhau sau khi được biên dịch.
Thông thường, các ngôn ngữ lập trình thông dịch rất gần gũi với ngôn ngữ tự nhiên, dễ đọc, dễ hiểu, chạy trên nhiều hệ điều hành khác nhau… Nhưng mà nó… chậm lắm.
Bảng so sánh
Đầu vào | Toàn bộ trường trình | Chỉ một dòng code |
Đầu ra | Mã đối tượng trung gian | Không tạo ra bất kì mã đối tượng trung gian nào |
Cơ chế hoạt động | Việc biên dịch sẽ phải hoàn thành công việc trước khi thực thi | Việc biên dịch và thực thi sẽ là đồng thời |
Tốc độ | Nhanh hơn | Chậm hơn |
Bộ nhớ | Yêu cầu bộ nhớ nhiều hơn do việc tạo mã đối tượng | Nó đòi hỏi ít bộ nhớ hơn vì nó không tạo mã đối tượng trung gian |
Errors | Hiển thị tất cả các lỗi sau khi biên dịch, tất cả cùng một lúc | Hiển thị lỗi của từng dòng một |
Phát hiện error | Rất khó khăn | Tương đối dễ |
Các ngôn ngữ lập trình | C, C++, C#, Scala, typescript | PHP, Perl, Python, Ruby |