Trình biên dịch là gì?
Trình biên dịch là một chương trình máy tính biến mã được viết bằng ngôn ngữ lập trình cấp cao thành mã máy. Nó là một chương trình dịch mã có thể đọc được của con người sang ngôn ngữ mà bộ xử lý máy tính hiểu được (bit nhị phân 1 và 0). Máy tính xử lý mã máy để thực hiện các tác vụ tương ứng.
Một trình biên dịch phải tuân thủ quy tắc cú pháp của ngôn ngữ lập trình mà nó được viết. Tuy nhiên, trình biên dịch chỉ là một chương trình và không thể sửa chữa các lỗi được tìm thấy trong chương trình đó. Vì vậy, nếu bạn mắc lỗi, bạn cần thực hiện các thay đổi trong cú pháp của chương trình của mình. Nếu không, nó sẽ không biên dịch.
Phiên dịch là gì?
Trình thông dịch là một chương trình máy tính, bao gồm từng câu lệnh chương trình cấp cao thành mã máy. Điều này bao gồm mã nguồn, mã được biên dịch trước và các tập lệnh. Cả trình biên dịch và thông dịch viên đều thực hiện cùng một công việc đó là chuyển đổi ngôn ngữ lập trình cấp cao hơn sang mã máy. Tuy nhiên, một trình biên dịch sẽ chuyển đổi mã thành mã máy (tạo exe) trước khi chương trình chạy. Thông dịch viên chuyển đổi mã thành mã máy khi chương trình được chạy.
SỰ KHÁC BIỆT CHÍNH
- Trình biên dịch chuyển đổi mã được viết bằng ngôn ngữ lập trình cấp cao thành mã máy ngay lập tức trước khi chương trình chạy, trong khi Trình thông dịch chuyển từng câu lệnh chương trình cấp cao, từng câu một, thành mã máy, trong quá trình chạy chương trình.
- Mã đã biên dịch chạy nhanh hơn trong khi mã được thông dịch chạy chậm hơn.
- Trình biên dịch hiển thị tất cả các lỗi sau khi biên dịch, mặt khác Trình thông dịch hiển thị lỗi của từng dòng một.
- Trình biên dịch dựa trên mô hình tải liên kết bản dịch, trong khi Trình thông dịch dựa trên Phương pháp thông dịch.
- Trình biên dịch lấy toàn bộ chương trình trong khi Trình thông dịch lấy một dòng mã.
Sự khác biệt giữa Trình biên dịch và Trình thông dịch
Cơ sở của sự khác biệt | Trình biên dịch | Thông dịch viên |
---|---|---|
Các bước lập trình |
|
|
Lợi thế | Mã chương trình đã được dịch thành mã máy. Do đó, thời gian thực thi mã sẽ ít hơn. | Thông dịch viên dễ sử dụng hơn, đặc biệt là đối với người mới bắt đầu. |
Bất lợi | Bạn không thể thay đổi chương trình mà không quay lại mã nguồn. | Các chương trình được thông dịch có thể chạy trên các máy tính có trình thông dịch tương ứng. |
Mã máy | Lưu trữ ngôn ngữ máy dưới dạng mã máy trên đĩa | Hoàn toàn không lưu mã máy. |
Thời gian chạy | Mã đã biên dịch chạy nhanh hơn | Mã được thông dịch chạy chậm hơn |
Mô hình | Nó dựa trên mô hình tải liên kết dịch ngôn ngữ. | Nó dựa trên Phương pháp Diễn giải. |
Tạo chương trình | Tạo chương trình đầu ra (ở dạng exe) có thể chạy độc lập với chương trình gốc. | Không tạo chương trình đầu ra. Vì vậy, họ đánh giá chương trình nguồn tại mọi thời điểm trong quá trình thực thi. |
Chấp hành | Việc thực thi chương trình tách biệt với việc biên dịch. Nó chỉ thực hiện sau khi toàn bộ chương trình đầu ra được biên dịch. | Thực thi chương trình là một phần của quá trình Phiên dịch, vì vậy nó được thực hiện từng dòng một. |
Yêu cầu bộ nhớ | Chương trình đích thực thi độc lập và không yêu cầu trình biên dịch trong bộ nhớ. | Trình thông dịch tồn tại trong bộ nhớ trong quá trình diễn giải. |
Phù hợp nhất cho | Bị giới hạn với máy mục tiêu cụ thể và không thể được chuyển. C và C ++ là ngôn ngữ lập trình phổ biến nhất sử dụng mô hình biên dịch. | Đối với môi trường web, nơi mà thời gian tải rất quan trọng. Do tất cả các phân tích toàn diện đã được thực hiện, các biên dịch mất thời gian tương đối lớn hơn để biên dịch ngay cả những đoạn mã nhỏ có thể không được chạy nhiều lần. Trong những trường hợp như vậy, thông dịch viên là tốt hơn. |
Tối ưu hóa mã | Trình biên dịch xem toàn bộ mã trả trước. Do đó, họ thực hiện nhiều tối ưu hóa để làm cho mã chạy nhanh hơn | Trình thông dịch xem từng dòng mã và do đó tối ưu hóa không mạnh mẽ như trình biên dịch |
Nhập động | Khó thực hiện vì trình biên dịch không thể dự đoán điều gì xảy ra vào thời điểm đó. | Các ngôn ngữ được thông dịch hỗ trợ tính năng Nhập động |
Sử dụng | Nó phù hợp nhất cho Môi trường sản xuất | Nó phù hợp nhất với chương trình và môi trường phát triển. |
Thực thi lỗi | Trình biên dịch hiển thị tất cả các lỗi và cảnh báo tại thời điểm biên dịch. Do đó, bạn không thể chạy chương trình mà không sửa lỗi | Trình thông dịch đọc một câu lệnh duy nhất và hiển thị lỗi nếu có. Bạn phải sửa lỗi để diễn giải dòng tiếp theo. |
Đầu vào | Nó mất cả một chương trình | Nó cần một dòng mã duy nhất. |
Đầu ra | Máy tính tạo mã machnie trung gian. | Thông dịch viên không bao giờ tạo bất kỳ mã machnie trung gian nào. |
Lỗi | 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ị tất cả các lỗi của từng dòng một. |
Thúc đẩy ngôn ngữ lập trình | C, C ++, C #, Scala, Java đều sử dụng trình biên dịch. | PHP, Perl, Ruby sử dụng trình thông dịch. |
Vai trò của trình biên dịch
- Máy tính đọc mã nguồn, xuất mã thực thi
- Chuyển phần mềm được viết bằng ngôn ngữ cấp cao hơn thành các hướng dẫn mà máy tính có thể hiểu được. Nó chuyển đổi văn bản mà một lập trình viên viết thành một định dạng mà CPU có thể hiểu được.
- Quá trình biên dịch tương đối phức tạp. Nó dành nhiều thời gian để phân tích và xử lý chương trình.
- Kết quả thực thi là một số dạng mã nhị phân dành riêng cho máy.
Vai trò của thông dịch viên
- Trình thông dịch chuyển đổi mã nguồn từng dòng trong Thời gian RUN.
- Phiên dịch hoàn toàn dịch một chương trình được viết bằng ngôn ngữ cấp cao sang ngôn ngữ cấp máy.
- Trình thông dịch cho phép đánh giá và sửa đổi chương trình trong khi nó đang thực thi.
- Tương đối ít thời gian dành cho việc phân tích và xử lý chương trình
- Thực thi chương trình tương đối chậm so với trình biên dịch
NGÔN NGỮ CẤP CAO
Các ngôn ngữ cấp cao, như C, C ++, JAVA, v.v., rất gần với tiếng Anh. Nó làm cho quá trình lập trình trở nên dễ dàng. Tuy nhiên, nó phải được dịch sang ngôn ngữ máy trước khi thực thi. Quá trình dịch này được tiến hành bởi trình biên dịch hoặc thông dịch viên. Còn được gọi là mã nguồn.
MÃ MÁY
Ngôn ngữ máy rất gần với phần cứng. Mỗi máy tính đều có ngôn ngữ máy của nó. Một chương trình ngôn ngữ máy được tạo thành từ các chuỗi mẫu nhị phân. (Ví dụ: 110110) Nó đại diện cho các hoạt động đơn giản mà máy tính phải thực hiện. Các chương trình ngôn ngữ máy có thể thực thi được để chúng có thể được chạy trực tiếp.
MÃ ĐỐI TƯỢNG
Khi biên dịch mã nguồn, mã máy được tạo cho các bộ vi xử lý khác nhau như Intel, AMD, ARM là khác nhau. Để làm cho mã di động, mã nguồn trước tiên được chuyển đổi thành Mã đối tượng. Nó là một mã trung gian (tương tự như mã máy) mà không bộ xử lý nào hiểu được. Tại thời điểm chạy, mã đối tượng được chuyển đổi thành mã máy của nền tảng bên dưới.
Java được biên dịch và thông dịch.
Để khai thác lợi thế tương đối của trình biên dịch là trình thông dịch, một số ngôn ngữ lập trình như Java vừa được biên dịch vừa được thông dịch. Bản thân mã Java được biên dịch thành Mã đối tượng. Tại thời điểm chạy, JVM thông dịch mã Đối tượng thành mã máy của máy tính đích.