2009-08-03 25 views
164

Trong đó ngôn ngữ là trình biên dịch Java (javac), máy ảo (JVM) và bắt đầu viết java?Ngôn ngữ nào là trình biên dịch Java và JVM được viết?

+21

tôi làm việc trên java vì vậy tôi muốn biết về ngôn ngữ ... :) –

+0

Có, nhưng tôi không tham gia (cũng không phải là Rahul hoặc anh ấy sẽ không hỏi câu hỏi có lẽ) bằng cách viết trình biên dịch Java hoặc thông dịch viên . Tôi viết mã Java và rất hữu ích khi biết các bit cụ thể của nó hoạt động như thế nào (để chọn các lớp) nhưng cho dù nó được viết bằng C, BCPL hay COBOL, tôi không thực sự quan tâm. – paxdiablo

+24

Quan điểm của bạn. Nói rằng bạn đã làm việc trên một số công nghệ trong 20 năm và người phỏng vấn hỏi bạn ngôn ngữ nào được viết hoặc cách nó hoạt động thì bạn có thể nói bạn không quan tâm nó có nghĩa là bạn chỉ muốn viết nếu không có ngôn ngữ khác muốn thực sự hiểu ngôn ngữ. –

Trả lời

140

Các phân nhịp chính xác của câu hỏi là hơi sai lầm: nó không phải là "JVM" hoặc "trình biên dịch" như có nhiều nhà cung cấp JVM (JRockit là một, IBM khác) và nhiều trình biên dịch ngoài kia.

  • Sun JVM viết bằng C, mặc dù nhu cầu này không phải là trường hợp - JVM vì nó chạy trên máy tính của bạn là một nền tảng phụ thuộc vào thực thi và do đó thể đã được viết ban đầu Bằng bất kỳ ngôn ngữ nào. Ví dụ, bản gốc IBM JVM đã được viết trong Smalltalk

  • Các thư viện Java (java.lang, java.util vv, thường được gọi là Java API) đều được mình viết bằng Java, mặc dù phương pháp đánh dấu là native sẽ có được viết bằng C hoặc C++.

  • Tôi tin rằng trình biên dịch Java do Sun cung cấp cũng được viết bằng Java. (Mặc dù một lần nữa, có nhiều trình biên dịch ngoài đó)

+0

Tôi nghĩ anh ta có nghĩa là "java" chương trình mà bạn sử dụng để khởi động một JVM. –

+1

Trên thực tế, * một * thư viện trong JRE của Sun được viết bằng NetRexx. (Đó là một trong những thư viện toán chính xác tùy ý, BigInteger, BigNum hoặc BigDecimal. Tôi quên cái nào.) Về lý thuyết, bạn có thể sử dụng bất kỳ ngôn ngữ nào để thực thi JRE, miễn là nó có thể biên dịch thành một biểu diễn hiểu không. –

+18

Vui lòng cung cấp một tham chiếu đến Sun JVM được viết bằng C. –

7

Về nguyên tắc gần như bất cứ điều gì, thường là C

53

Từ Java Docs

Trình biên dịch được viết bằng Java và thời gian chạy được viết bằng ANSI C

+1

Trình biên dịch Java đầu tiên được phát triển bởi Sun Microsystems được viết bằng C sử dụng một số thư viện từ C++ http://en.wikipedia.org/wiki/Java_compiler –

+3

Đây thực sự là một tài liệu cũ (> 10 năm theo giao diện của sự vật). Ví dụ, nó nói * "bytecode Java được dịch trên bay đến hướng dẫn máy bản địa (giải thích) và không được lưu trữ bất cứ nơi nào" * mà đã không được đúng trong khoảng 5 năm! –

+2

Vâng, vì khi nào tài liệu được cập nhật thực sự, đặc biệt là sau những thay đổi lớn? :) – Esko

8

This link nên trả lời câu hỏi của bạn

Dường như trình biên dịch hiện được viết bằng Java, nhưng thời gian chạy được viết bằng A NSI C

3

Jikes RVM, một JVM tự lưu trữ được sử dụng rộng rãi cho các mục đích nghiên cứu được viết bằng Java. Nó không phải là một trong những người chạy trên máy tính để bàn của họ, nhưng nó lên trên đó trong danh sách của tôi "bây giờ chúng ta hãy thể hiện sức mạnh chung của ngôn ngữ."

+0

Đó là rùa * tất cả các con đường xuống *? Liệu nó có một số loại microkernel? Nếu vậy, ngôn ngữ đó được viết bằng gì? – Raedwald

2

Giả sử bạn đang nói về JVM Hotspot, được iirc cung cấp bởi Sun, nó được viết bằng C++. Để biết thêm thông tin về các máy ảo khác nhau cho Java, bạn có thể kiểm tra điều này link. javac, giống như hầu hết các trình biên dịch Java, được viết bằng Java.

-2

Hầu hết các hệ điều hành, JVM được viết bằng ISO C++. Tôi nghi ngờ ANSI C được sử dụng, một ngôn ngữ hoàn toàn khác biệt mà là khá cổ xưa ngày nay.

+20

Bạn phải đùa giỡn. Hầu hết các phiên bản của Linux được viết bằng C. Một số lượng lớn Windows được viết vào tháng mười một, cũng như nhiều hệ điều hành nhúng.Hầu hết các nhà văn hệ điều hành sẽ tránh xa các ngôn ngữ như C++, nơi những thứ như constructors và destructors không có trong mã nguồn được trình biên dịch tự động chèn vào. –

+0

linux được viết bằng "C". cho đến khi jrockit đôi khi jvm được viết bằng chữ "C". chỉ hotspot jvm được viết bằng "C++". – techcraver

46

Trình biên dịch Java đầu tiên được phát triển bởi Sun Microsystems và được viết bằng C sử dụng một số thư viện từ C++. Hôm nay, trình biên dịch Java được viết bằng Java, trong khi JRE được viết bằng C.

Chúng ta có thể tưởng tượng như thế nào trình biên dịch Java được viết bằng Java như thế này:

Trình biên dịch Java được viết như một chương trình Java và sau đó được biên dịch bằng trình biên dịch Java được viết bằng C (trình biên dịch Java đầu tiên). Vì vậy, chúng ta có thể sử dụng trình biên dịch Java vừa được biên dịch (viết bằng Java) để biên dịch các chương trình Java.

+19

+1 để giải thích cách trình biên dịch Java có thể được viết bằng Java :) –

Các vấn đề liên quan