Compiler và Interpreter
Hiện tại có rất nhiều ngôn ngữ lập trình tạo nên ứng dụng ( có thể là ứng dụng web, application, app mobile,... ) Một số ngôn ngữ thì được gọi là ngôn ngữ biên dịch (compiler) - phần mềm sẽ chuyển đổi code sang mã máy sau đó mới chạy được. Một số ngôn ngữ thì được gọi là ngôn ngữ thông dịch (Interpreter).
Ngôn ngữ biên dịch compiler
Ngôn ngữ biên dịch là ngôn ngữ mà trước khi ra thành phẩm bạn phải biên dịch nó ra mã máy trước. Sẽ có rất nhiều ngôn ngữ vừa biên dịch vừa thông dịch, tùy vào cách chúng ta hiện thực nó. Như java là 1 ngôn ngữ vừa biên dịch vừa thông dịch.
Java là 1 ngôn ngữ vừa biên dịch vừa thông dịch, vì:
Trình BIÊN DỊCH của Java (Java compiler), nó sẽ chuyển đổi các file code thành java byte-code. => cái này chưa phải mã máy. Rồi sau đó Java Virtual Machine (JVM) mới thông dịch chạy java byte code thành ngôn ngữ máy.
1 ví dụ khác, C++ là ngôn ngữ biên dịch, khi chúng ta học C++ chúng ta phải có 1 trình soạn thảo để compile code đó mới chạy được. nhưng chúng ta cũng có thể biến C++ thành trình thông dịch bằng UnderC, Cint, ...
Ngôn ngữ thông dịch Interpreter
Với 1 số ngôn ngữ thông dịch chúng ta lại có 1 trình thông dịch, khi chương trình chạy thì trình thông dịch sẽ thực thi từng dòng code dẫn đến việc 1 trình biên dịch sẽ chiếm ưu thế tốc độ hơn trình thông dịch.
bạn có thể tưởng tượng có 1 thằng nước ngoài ( đóng vai trò như hệ điều hành ) còn mình là người việt nam không biết nói tiếng anh ( đóng vai trò như 1 ngôn ngữ lập trình ). Trường hợp 1, bạn viết 1 bài văn xong bạn đem cho 1 đơn vị dịch thuật ra tiếng anh cho thằng kia đọc thì đơn vị dịch thuật là trình biên dịch từ tiếng việt ra tiếng anh. Trường hợp 2, bạn kêu đại 1 thằng nào đó đứng kế bên bạn, mỗi lần bạn nói kết thúc bằng dấu chấm phẩy thì nó dịch ra tiếng anh rồi nói lại cho thằng nước ngoài nghe. => mỗi lần nó nói cho thằng người nước ngoài nghe thì bạn im cho nó nói ( chậm hơn đó )
ví dụ: PHP là ngôn ngữ thông dịch, Python là ngôn ngữ thông dịch với trình thông dịch Cython, nhưng pyThon sẽ là ngôn ngữ biên dịch nếu sử dụng implementation là PyPy
Cảnh báo hiểu nhầm về thông dịch và biên dịch
Các định nghĩa về thông dịch và biên dịch của riêng 1 ngôn ngữ nào đó thì khá mơ hồ. giống như Python có thể sẽ là biên dịch cũng có thể là thông dịch đó thôi, chỉ là chúng ta thường sử dụng trình thông dịch Python hơn thôi.
Ngôn ngữ bậc thấp chạy nhanh hơn ngôn ngữ bậc cao.
Cái này mình thấy cũng đúng nhưng mà lý do thì không phải do biên dịch hay thông dịch mà ra đâu. Việc chạy chậm hơn là do kiểm tra nhiều hơn. Ví dụ ngôn ngữ PHP bạn được support về việc đóng mở kết nối db 1 cách tự động nhưng khi học java thầy cô lại khuyên phải mở kết nối db, sài xong nhớ đóng kết nối. điều này lại liên quan đến trình implementation
Hình ảnh trên mô tả quá trình thực thi mã code compiler. Vậy bạn thấy có 2 hình tròn màu cam và màu xanh, màu cam ý nói code sẽ được chuyển đổi thành bytecode và chỉ thế thôi.
Vậy điều khác biệt của các ngôn ngữ biên dịch có cái nhanh hơn có cái chậm hơn nằm ở implementation của từng ngôn ngữ. implementation nào kiểm tra cho lắm vào thì đồng nghĩa với việc chấp nhận chậm hơn thôi. mà nó kiểm tra dùm mình thì sẽ thân thiện và dễ code hơn với lập trình viên.