Từ bao lâu nay việc tương tác giữa người và máy tính như một điều hiển nhiên mà chẳng ai quan tâm đến phương thức tương tác đó là gì.
Máy tính thật ra là vật vô tri vô giác không thể suy nghĩ và hành động được như con người chúng ta.
Nhưng nhờ các lập trình viên mà máy tính đã làm nên những điều thực sự kỳ diệu.
Chúng ta thường hay hiểu nhầm rằng là máy tính hiểu được những gì chúng ta ra lệnh cho nó, nhưng bản chất bên trong không phải như thế.
Cơ chế giao tiếp giữa người với máy tính phải thông qua một quá trình biên dịch và thông dịch, quá trình này chúng ta không thể nhìn thấy được và cũng không phải là khái niệm dành cho người dùng phổ thông.
Đặc biệt là trong lập trình, chúng ta thường xuyên nghe đến khái niệm trình biên dịch, vậy trình biên dịch là gì? Và cụ thể, trình biên dịch Java hoạt động như thế nào?
Cách trình biên dịch Java hoạt động
Trình biên dịch Java hoạt động như thế nào?
Thực tế, trình biên dịch trong Java cũng là một chương trình máy tính – làm nhiệm vụ dịch mã nguồn từ ngôn ngữ Java của bạn sang một thứ ngôn ngữ mà máy tính có thể hiểu và thực thi được hay còn được gọi là ngôn ngữ máy.
Giống như việc bạn đang nói chuyện với một người Mỹ tên là Michael:
-
Mỗi người nói một thứ tiếng khác nhau và bạn cần một người phiên dịch để bạn và Michael có thể giao tiếp được với nhau thuận tiện hơn, thì trình biên dịch cũng đóng vai trò như người phiên dịch trên.
Trình biên dịch còn được giao nhiệm vụ đảm bảo rằng các câu lệnh bạn viết ra phải đúng cú pháp, nó giống như được tạo ra để vừa biên dịch và vừa kiểm tra chính tả cho lập trình viên vậy.
Nó vốn được viết ra từ một loại ngôn ngữ khác, nên cũng giống như bao ngôn ngữ lập trình mà bạn đã biết, trình biên dịch làm mọi việc theo một trình tự logic và khoa học dưới dạng một bộ khung đã thiết kế sẵn.
Cách trình biên dịch Java hoạt động
Đầu tiên, với các mã nguồn Java được viết ra, IDE - cái vốn đã được tích hợp trình biên dịch, cứ mỗi ký tự code được viết ra, nó sẽ tự kiểm tra cú pháp và thông báo để người lập trình có thể sửa kịp thời.
> Đọc thêm: TOP IDE Java tốt nhất
File code trong Java sẽ được lưu dưới dạng [tên-class].java
Tiếp đến, khi code được xem như là hoàn thành, bạn cần thực thi mã code bạn viết ra.
Trình biên dịch tiến hành compile (translate) mã nguồn thành mã máy dưới dạng byte code.
Tức là từ mà nguồn dạng [tên-class].java
sẽ được biên dịch thành [tên-class].class
.
Cuối cùng, file Java dạng [tên-class].class
sẽ được thực thi tại bất cứ hệ điều hành nào, từ Windows, Linux đến MacOs, chỉ cần có cài sẵn máy ảo JVM là được.
Chẳng hạn như với File nguồn (Ahehe.java
) có mã như sau:
public class Ahehe {
public static void main(String[] args) {
System.out.println(3 + 4);
}
}
Thì sau khi biên dịch thành công, ta nhận được một File Ahehe.class
mà khi xem thì nội dung chỉ nhìn thấy được như sau:
Ví dụ nội dung trong file Java class
Nội dung này rất ít lập trình viên có thể hiểu được. Nhưng JVM lại hiểu được và biết cần làm gì với chúng.
Trong ví dụ trên, ta có thể hiểu nôm na theo ngôn ngữ tự nhiên rằng là trình biên dịch sẽ chuyển lần 3
, 4
và dấu cộng (+
) vào một ngăn xếp (stack).
Phương thức p
rintln()
sẽ lấy các giá trị từ trên xuống trong ngăn xếp, thực thi phép tính và in kết quả ra màn hình, sau đó ngăn xếp lại rỗng.
Thông dịch và Biên dịch khác nhau ở điểm nào?
Nhiều bạn đã code Java được một thời gian nhưng vẫn nhầm lẫn giữa trình biên dịch và thông dịch.
Vậy, cụ thể chúng khác nhau như thế nào?
Như đã nói, trình biên dịch có chức năng dịch mã nguồn thành ngôn ngữ máy để máy tín có thể hiểu và thực thi.
Trình biên dịch vừa phân tích từ ngữ, cú pháp và ngữ nghĩa ->
tạo mã trung gian đến tối ưu và mã hoá thì mới xong một quy trình biên dịch và xem như hoàn thành nhiệm vụ.
Trình thông dịch là một thay thế để thực thi một ngôn ngữ lập trình và thực hiện công việc tương tự như một trình biên dịch.
Nhưng trình thông dịch xử lý cây cú pháp trực tiếp để truy cập các biểu thức và thực thi câu lệnh thay vì tạo mã trung gian.
Một trình thông dịch có thể yêu cầu xử lý cùng một cây cú pháp nhiều lần, đó là lý do tại sao tốc độ sẽ đối chậm hơn so với thực hiện chương trình được biên dịch.
Cả trình biên dịch và trình thông dịch đều có cùng một công việc nhưng khác nhau về quy trình vận hành.
Trình biên dịch lấy mã nguồn theo cách tổng hợp (lấy một cục và thực thi hết)
Trong khi Trình thông dịch lấy các phần cấu thành của mã nguồn (lấy và thực thi từng ít một).
Mặc dù cả trình biên dịch và trình thông dịch đều có những ưu điểm và nhược điểm nhất định.
Với trình thông dịch thì mã nguồn có thể thực thi ở mọi nơi mà không cần phải biên dịch trước.
Nhưng bù lại thì trình biên dịch sẽ tiết kiệm thời gian thực thi hơn.
Tổng kết
Trên đây là một chút kiến thức về trình biên dịch Java. Hi vọng nó không khiến bạn hoa mắt, chóng mặt.
Khi bạn mới Học Java thì bạn cũng không cần hiểu quá nhiều về trình biên dịch Java đâu.
Vì hầu hết, các lập trình viên Java như chúng ta không mấy bận tâm đến cách chúng hoạt động như thế nào và hoạt động ra sao.
Nhưng nó sẽ hữu ích và rất cần thiết nếu bạn là một kiến trúc sư phần mềm – người thiết kế và đưa ra các giải pháp cho các chương trình.
> Đọc thêm: 10 Thư viện Java thường sử dụng nhất
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Dạy học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543 - 0353655150
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python