Search…

Phân Biệt Compile và Interpret

07/08/20207 min read
Phân biệt 2 khái niệm Compile và Interpret, sự khác nhau và giống nhau giữa Compiler và Interpreter.

Hiện tại có rất nhiều ngôn ngữ lập trình để tạo ra ứng dụng; Một số được gọi là ngôn ngữ biên dịch, phần mềm để chuyển đổi mã lập trình sang mã máy cho ngôn ngữ đó được gọi là trình biên dịch (compiler). Một số ngôn ngữ được gọi là ngôn ngữ thông dịch và phần mềm hiện thực ngôn ngữ đó được gọi là trình thông dịch (Interpreter).

2 khái niệm này cũng không hoàn toàn chính xác bởi biên dịch và thông dịch chỉ là những cách hiện thực của một ngôn ngữ. Về mặt lý thuyết, ngôn ngữ nào cũng có thể là ngôn ngữ biên dịch hay là ngôn ngữ thông dịch và nó phụ thuộc vào cách mà bạn hiện thực hóa ngôn ngữ đó thành ngôn ngữ máy.

Ngôn ngữ biên dịch

Ngôn ngữ biên dịch là ngôn ngữ lập trình mà những trình biên dịch có thể biên dịch mã nguồn thành ngôn ngữ máy. Ngôn ngữ biên dịch cũng có thể là ngôn ngữ thông dịch, C++ là một ngôn ngữ biên dịch nhưng nó cũng có nhiều trình thông dịch cho ngôn ngữ này, chẳng hạn như là UnderC, Cint, hay Ch, ...

Tại sao ngôn ngữ biên dịch lại có trình thông dịch nhưng không có điều ngược lại xảy ra? Bởi vì các ràng buộc trong ngôn ngữ máy và ngôn ngữ biên dịch được tạo ra để thỏa mãn các ràng buộc này trong khi các ngôn ngữ thông dịch thì không có tính chất đó.

Quá trình biên dịch của trình biên dịch.
Quá trình biên dịch

Ngôn ngữ thông dịch

Với một số ngôn ngữ, mã nguồn có thể được thực thi từng dòng một bởi một chương trình được gọi là trình thông dịch. Đây là một trong những lý do khiến cho ngôn ngữ lập trình thông dịch xử lý chậm hơn ngôn ngữ biên dịch.

Ngoài ra, các ngôn ngữ thông dịch như ngôn ngữ lập trình Java, C# hỗ trợ thêm nhiều công cụ, kiểu dữ liệu động, thông tin về các kiểu dữ liệu này sẽ được lưu trữ trong trình thông dịch làm giảm hiệu suất xử lý của các chương trình được viết bằng ngôn ngữ thông dịch. Một điểm bất lợi nữa của những ngôn ngữ thông dịch là trình thông dịch phải được cài đặt trên máy tính hoặc đóng gói đi cùng với ứng dụng sử dụng ngôn ngữ thông dịch, và điều đó có thể gây khó khăn cho người sử dụng.

Một vài trình biên dịch sẽ chuyển đổi mã nguồn của ngôn ngữ lập trình nhất định thành ngôn ngữ trung gian (intermediate language) hoặc là bytecode và nhúng vào file thực thi. Sau đó máy ảo hoặc trình thông dịch sẽ thi hành ngôn ngữ trung gian này trong suốt thời gian thực thi của chương trình, đây là nguyên tắc hoạt động của bộ thư viện .NET của Microsoft. Ngôn ngữ lập trình Java còn có một dạng thực thi khác là bytecode sẽ được chuyển đổi thành ngôn ngữ máy bởi trình thông dịch và thực thi.

Quá trình thông dịch ngôn ngữ lập trình.
Quá trình thông dịch

Từ đoạn TRÌNH THÔNG DỊCH sẽ sinh ra MÃ THỰC THI để thực thi trên MÁY TÍNH.

Ưu điểm ngôn ngữ lập trình biên dịch

Một trong những lý do khi sử dụng ngôn ngữ lập trình biên dịch vì tốc độ thực thi. Ngôn ngữ lập trình biên dịch có được tính chất này bởi vì được thực thi trực tiếp bởi máy tính. Tốc độ và hiệu suất xử lý đôi khi được các lập trình viên đánh giá cao trong việc giải quyết các bài toán. Nhất là trong các dự án lớn thì tốc độ và hiệu suất xử lý là một phần không thể thiếu. Tốc độ của chương trình ảnh hưởng trực tiếp đến trải nghiệm của người sử dụng và doanh thu của công ty phát triển phần mềm. Sau mã Assembly, C là ngôn ngữ lập trình nhanh nhất được cả thế giới biết đến. Lợi điểm khác của các ngôn ngữ biên dịch đó là độ bảo mật cao, mặc dù các ứng dụng viết bằng ngôn ngữ này có thể bị disassembly nhưng mã Assembly thu được không rõ ràng và mã nguồn càng khó thể bị lộ. Chúng ta có thể dịch được mã nguồn C# từ mã .NET Assembly bằng cách sử dụng các công cụ hỗ trợ, tuy nhiên dịch mã nguồn C/C++ từ file thực thi là điều mà các máy tính hiện tại chưa làm được.

Những phần mềm lớn và những dự án tiền tỷ thường được viết bằng ngôn ngữ biên dịch bởi tốc độ và hiệu suất xử lý mà nó mang lại. Có thể dễ dàng tìm thấy một ứng dụng được viết bằng ngôn ngữ lập trình biên dịch trong máy tính. Ngay cả trình duyệt web đang sử dụng để xem bài viết này cũng có thể được viết bằng ngôn ngữ lập trình biên dịch.

Tuy nhiên, các ứng dụng lớn cũng có thể được viết 1 phần bởi ngôn ngữ lập trình thông dịch. Chẳng hạn như trình duyệt web sử dụng các ngôn ngữ thông dịch như JavaScript để xử lý cho các trang web tại client.

Ưu điểm ngôn ngữ lập trình thông dịch

Mặc dù ngôn ngữ lập trình thông dịch có những bất lợi nhất định nhưng cũng không thể không chú ý tới những tính năng ưu việt mà nó mang lại. Ngôn ngữ lập trình thông dịch làm giảm thời gian biên dịch do đó nó làm cho việc phát triển ứng dụng trở nên nhanh chóng.

Ngoài ra, ngôn ngữ lập trình thông dịch cũng giúp chúng ta giải quyết những khó khăn khi phải lập trình ứng dụng đa nền tảng. Thực thi mã nguồn bằng trình thông dịch sẽ không lệ thuộc vào bất kỳ nền tảng nào nếu như trong mã nguồn của chúng ta không sử dụng những tính năng đặc thù của nền tảng đó.

Java và .NET cung cấp một chức năng là reflection. Với việc sử dụng chức năng này, có thể tạo ra các phương thức và các lớp trong quá trình chương trình đang thực thi. Tuy nhiên cũng cần phải lưu ý rằng các mã Assembly của .NET và Java có thể bị dịch ngược lại bằng chức năng này, điều này có thể khắc phục bằng cách sử dụng các Obfuscator.

Việc không chuyển đổi mã nguồn thành mã máy, các ứng dụng viết bằng ngôn ngữ lập trình như .NET và Java có thể chạy trên nhiều thiết bị di động, ngay cả khi nó không phải là smart phone. Nó cho phép sử dụng sức mạnh của ngôn ngữ hướng đối tượng lên các thiết bị lỗi thời. Chẳng hạn như Java đã cam đoan rằng được sử dụng trên 3 tỷ thiết bị. Và không ai có thể biên dịch một ứng dụng chạy trên thiết vị J2ME, bởi vì nó không phải là một hệ điều hành thật sự.

Khi viết một chương trình bằng ngôn ngữ biên dịch, các bugs thường là vấn đề gây nhiều ức chế cho lập trình viên nhất, tuy nhiên các ngôn ngữ thông dịch đã cung cấp các công cụ cho phép bắt các bugs này rất dễ hơn. Nó đưa ra các thông báo cụ thể và rõ ràng về các bugs trong một hộp thoại. Không giống như các ngôn ngữ biên dịch khi báo lỗi chỉ đơn thuần đưa ra mã lỗi và đôi khi không chỉ ra được vị trí gây ra bugs. Việc thông báo lỗi bằng các hộp thoại giúp cho việc tương tác giữa lập trình viên và người sử dụng trở nên dễ dàng hơn qua việc người sử dụng sẽ thông báo nhanh và cụ thể về bugs. Nhờ đó việc tìm và sửa các bugs trong mã nguồn trở nên nhanh chóng.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024