01/10/2018, 08:18

Thông dịch và biên dịch trong Java

Xin chào mọi người,
Mình mới tìm hiểu về Java nên mình có một thắc mắc về vấn đề thông dịch và biên dịch trong Java.
Theo như mình được học thì: Mã nguồn được Javac BIÊN DỊCH thành dạng bytecode. sau đó được chạy trên từng hệ điều hành cụ thể nhờ trình THÔNG DỊCH java.
Thế tại sao không phải là: Mã nguồn được Javac BIÊN DỊCH thành dạng bytecode. sau đó được chạy trên từng hệ điều hành cụ thể nhờ trình BIÊN DỊCH java. ?
hoặc: Mã nguồn được Javac THÔNG DỊCH thành dạng bytecode. sau đó được chạy trên từng hệ điều hành cụ thể nhờ trình THÔNG DỊCH java. ?
mọi người giải đáp giúp mình với, mình cám ơn !

anon52681320 viết 10:21 ngày 01/10/2018

Do dịch sang tiếng Việt nó vậy thôi, và người đọc không hiểu được từ THÔNG và từ BIÊN thôi(hoặc cố tình tự vẽ vời thêm để làm rối bản thân).

Thực chất trình BIÊN DỊCH của Java được gọi là Java compiler, nó sẽ chuyển đổi các file code thành java byte-code. Để làm gì ?

Để trình THÔNG DỊCH, được gọi là Java Virtual Machine (JVM) thông dịch (chạy) byte-code này thành ngôn ngữ máy (machine-code) để chạy. Tại sao ?

Vì có nhiều Os khác nhau về nền tảng bên dưới, nên JVM sẽ viết riêng cho những OS đó (Windows, Linux và MAC). Và JVM riêng cho từng OS này sẽ biên dịch cùng java byte-code thành machine code riêng của OS đó để thực thi đoạn lệnh. Bởi vậy, mới có định nghĩa Write Once, Run Everywhere (In theory) của Java.

Got it ?

*grab popcorn* viết 10:27 ngày 01/10/2018

Bây giờ mình có 1 tài liệu tiếng Anh, mình đưa một người dịch giùm mình rồi hôm sau đưa cho mình thì người đó gọi là Biên dịch viên. Cuốn sách sau khi dịch là sản phẩm của Biên dịch.

Nhưng giả sử bây giờ mình đi gặp mấy người nước ngoài để nc mà không biết tiếng Anh. Thì lúc này mình sẽ thuê một người thể dịch song song và liên tục cho mình với người nước ngoài kia. Thì người này được gọi là Thông dịch viên.

Vậy Biên dịch là khi bạn chuyển từ ngôn ngữ này sang ngôn ngữ khác một cách không song song. Còn thông dịch thì nó xảy ra song song; tức bạn nói “xin chào”, thì bên kia sẽ nhận được ngay là “hello”.


Tương tự như vậy cho Java.

Từ file .java ta nhờ java compiler biên dịch ra file .class chứa bytecode. Java compiler ở đây giống như anh Biên dịch viên dịch cuốn sách từ ngôn ngữ Java sang Bytecode.

Sau đó mỗi lần chạy chương trình, Java Virtual Machine mới thông dịch cho máy hiểu để có thể chạy chương trình. Thằng JVM bây giờ như anh Thông dịch viên, thông dịch cuốn sách ngôn ngữ Bytecode sang mã máy.

Tại sao lại viết ra cuốn sách Bytecode chi cho mệt vậy?
Đơn giản là khi viết ra cuốn sách Bytecode rồi, thì sau đó ta đem đi đâu mà có thằng JVM nhờ nó vừa đọc vừa dịch cho thằng mã máy nào cũng được. Đỡ phải viết tùm lum cuốn sách cho từng thằng mã máy khác nhau.

cdxf viết 10:26 ngày 01/10/2018

Đặc điểm nhận dạng:
Biên dịch: chỉ cần dịch 1 lần (java code sang bytecode, sau khi dịch xong thì có thể vứt mịa cái source đi).
Thông dịch: cần dịch nhiều lần (mỗi lần muốn chạy class file là phải gõ lệnh java helloworld.class chẳng hạn)

X viết 10:18 ngày 01/10/2018

Một topic khá thú vị có liên quan:

Vừa rồi có đi phỏng vấn, một bác chắc làm cũng được 10 năm, hỏi Java là thông dịch hay biên dịch. Mình trả lời là biên dịch, bác ấy trơn mắt nhìn mình hỏi lại lần nữa. Vẫn trả lời là biện dịch vì tin rằng mình trả lời đúng. Mặc dù biết khi chuyển sang bytecode JVM sẽ thông dịch từng dòng. anh em nào trên này biết câu trả lời chính xác không. - Java là ngôn ngữ biên dịch - Java vừa biện dịch vừa thông dịch Câu trả lời nào chính xác.

Reoteu Ray viết 10:25 ngày 01/10/2018

java là ngôn ngữ vừa thông dich vừa biên dịch , ide đóng vai trò biên dịch còn jvm là trình thông dịch , vì vậy java chạy được trên mọi nền tảng mà có jvm …

Bài liên quan
0