Pracuję na Javie, więc chcę wiedzieć o języku ... :)
Rahul Garg
26
To twoja perspektywa. Powiedzmy, że pracujesz nad jakąś technologią przez 20 lat, a ankieter pyta cię, w jakim języku jest napisany lub jak on działa, możesz powiedzieć, że cię to nie obchodzi, oznacza to, że po prostu chcesz pisać, jeśli w innym języku nie chcesz naprawdę zrozumieć język.
Rahul Garg
22
a co więcej, myślę, że wiedza nigdy się nie marnuje. Więc wiedza o czymś nie jest stratą czasu.
Rahul Garg
1
... inżynier mechanik lub kierowca wyścigowy (aby
rozwinąć
2
@paxdiablo prowadzenie samochodu to coś, co robisz, ale nie twój zawód. Kierowcy samochodów wyścigowych mogą dbać o to, jak działają silniki. Nie twierdzę, że wszyscy się tym przejmują ... ale jeśli kierowca wyścigowy chciałby dowiedzieć się więcej o tym, jak silnik pracował w samochodzie, za który płacił mu za kierowanie, czy uważasz, że to nieuzasadnione?
JD Isaacks,
Odpowiedzi:
171
Precyzyjne sformułowanie pytania jest nieco mylące: nie jest „JVM” ani „kompilator”, ponieważ istnieje wielu dostawców JVM (jrockit to jeden, IBM inny) i wiele kompilatorów .
Sun JVM jest napisany C, chociaż nie musi tak być - JVM działający na twoim komputerze jest wykonywalnym programem zależnym od platformy i dlatego mógł być pierwotnie napisany w dowolnym języku. Na przykład oryginalny IBM JVM został napisany w języku Smalltalk
Biblioteki Java (java.lang , java.utiletc, często określane jako Java API ) sami są napisane w Javie, chociaż metody oznaczone jako nativebędą zostały napisane w Club C++.
Wierzę, że kompilator Java dostarczony przez Sun jest również napisany w Javie. (Chociaż znowu istnieje wiele kompilatorów)
Myślę, że ma na myśli „java” program, którego używasz do uruchomienia JVM.
Stephen C
1
W rzeczywistości jedna biblioteka w środowisku JRE firmy Sun jest napisana w NetRexx. (Jest to jedna z bibliotek matematycznych o dowolnej precyzji, BigInteger, BigNum lub BigDecimal. Zapomniałem, która z nich.) Teoretycznie możesz użyć dowolnego języka do implementacji środowiska JRE, o ile można go skompilować do reprezentacji, którą program Java może Rozumiesz.
Jörg W Mittag
18
Proszę podać odniesienie do Sun JVM napisanego w C.
Pierwszy kompilator Java został opracowany przez Sun Microsystems i został napisany w C przy użyciu niektórych bibliotek z C ++. Obecnie kompilator Java jest napisany w Javie, a środowisko JRE w C.
Możemy sobie wyobrazić, jak kompilator Java został napisany w Javie w następujący sposób:
Kompilator Java jest zapisywany jako program Java, a następnie kompilowany za pomocą kompilatora Java napisanego w C (pierwszy kompilator Java). W ten sposób możemy użyć nowo skompilowanego kompilatora Java (napisanego w Javie) do kompilacji programów Java.
+1 za wyjaśnienie, w jaki sposób można napisać kompilator Java w Javie :)
Eduard Luca
2
fyi ten proces „uaktualniania” do nowych kompilatorów poprzez kompilowanie ich kodu w bardziej podstawowych kompilatorach nazywa się „ładowaniem”, podobnie jak „wciąganie się za bootstrapy”, z którego pochodzi „ładowanie” komputera. Computerphile na YouTube ma dobre wideo na ten temat i „T diagramy”
iono
Czy to również rozwiązuje problem z kurczakiem i jajami :)
Pierwszy kompilator Java opracowany przez Sun Microsystems został napisany w C przy użyciu bibliotek C ++ en.wikipedia.org/wiki/Java_compiler
Rahul Garg
4
To naprawdę stary dokument (z wyglądu 10 lat). Na przykład napisano: „Kody bajtowe Java są tłumaczone w locie na instrukcje natywnej maszyny (interpretowane) i nigdzie nie przechowywane”, co nie było prawdą przez około 5 lat!
oxbow_lakes
2
Od kiedy dokumentacja jest naprawdę aktualna, szczególnie po dużych zmianach? :)
Esko
Cóż - odpowiedź nie jest prawdziwa; Sun JVM jest napisany w C, a kompilator Sun Java jest napisany w Javie. Pierwszy IBM JVM został napisany w języku Smalltalk.
oxbow_lakes
8
Co kompiluje Javę? Jawa. Jak zdobyć Javę? Skompiluj to. Co?
18
W rzeczywistości Oracle JVM jest napisany w C ++, a nie w C.
Jikes RVM , samodzielna JVM, szeroko wykorzystywana do celów badawczych, jest napisana w Javie. To nie jest jedna osoba, która działa na swoich komputerach, ale jest tam na mojej liście „teraz pokażmy ogólną moc języka”.
Żółwie są na dole ? Czy ma jakieś mikrojądro? Jeśli tak, w jakim języku to jest napisane?
Raedwald
3
Załóżmy, że mówisz o JVM Hotspot, który jest dostarczany przez Sun, napisany jest w C ++. Aby uzyskać więcej informacji na temat różnych maszyn wirtualnych dla Java, możesz sprawdzić ten link .
javac , podobnie jak większość kompilatorów Java, jest napisany w Javie.
Kiedy Sun Microsystem wprowadza Javę, kompilator Java został napisany w C przy użyciu niektórych bibliotek z C ++.
Ponieważ w projekcie kompilatora istnieje koncepcja o nazwie Bootstapping, głównie jest ona wykorzystywana w rozwoju kompilatora, Bootstrapping to proces pisania kompilatora (lub asemblera) w źródłowym języku programowania, który ma zostać skompilowany. Służy do tworzenia kompilatora samoobsługowego. Opracowanie kompilatorów dla nowych języków programowania najpierw opracowano w istniejącym języku, a następnie przepisano w nowym języku i skompilowano samodzielnie.
Dlatego dzisiaj kompilator Java jest napisany w samej Javie .
Wirtualna maszyna Java : wirtualna maszyna Java jest maszyną abstrakcyjną. Podobnie jak prawdziwa maszyna komputerowa, ma zestaw instrukcji i manipuluje różnymi obszarami pamięci w czasie wykonywania. Zazwyczaj JVM interpretuje kod bajtu w kod maszynowy.
Odpowiedzi:
Precyzyjne sformułowanie pytania jest nieco mylące: nie jest „JVM” ani „kompilator”, ponieważ istnieje wielu dostawców JVM (jrockit to jeden, IBM inny) i wiele kompilatorów .
Sun JVM jest napisany
C
, chociaż nie musi tak być - JVM działający na twoim komputerze jest wykonywalnym programem zależnym od platformy i dlatego mógł być pierwotnie napisany w dowolnym języku. Na przykład oryginalny IBM JVM został napisany w języku SmalltalkBiblioteki Java (
java.lang
,java.util
etc, często określane jako Java API ) sami są napisane w Javie, chociaż metody oznaczone jakonative
będą zostały napisane wC
lubC++
.Wierzę, że kompilator Java dostarczony przez Sun jest również napisany w Javie. (Chociaż znowu istnieje wiele kompilatorów)
źródło
Pierwszy kompilator Java został opracowany przez Sun Microsystems i został napisany w C przy użyciu niektórych bibliotek z C ++. Obecnie kompilator Java jest napisany w Javie, a środowisko JRE w C.
Możemy sobie wyobrazić, jak kompilator Java został napisany w Javie w następujący sposób:
Kompilator Java jest zapisywany jako program Java, a następnie kompilowany za pomocą kompilatora Java napisanego w C (pierwszy kompilator Java). W ten sposób możemy użyć nowo skompilowanego kompilatora Java (napisanego w Javie) do kompilacji programów Java.
źródło
Z dokumentów Java
źródło
W rzeczywistości Oracle JVM jest napisany w C ++, a nie w C.
Spójrz na kod JVM HotSpot tutaj: http://openjdk.java.net/groups/hotspot/
źródło
Ten link powinien odpowiedzieć na twoje pytanie
Wygląda na to, że kompilator jest teraz napisany w Javie, ale środowisko wykonawcze jest napisane w ANSI C.
źródło
W zasadzie prawie wszystko, zwykle C
źródło
Jikes RVM , samodzielna JVM, szeroko wykorzystywana do celów badawczych, jest napisana w Javie. To nie jest jedna osoba, która działa na swoich komputerach, ale jest tam na mojej liście „teraz pokażmy ogólną moc języka”.
źródło
Załóżmy, że mówisz o JVM Hotspot, który jest dostarczany przez Sun, napisany jest w C ++. Aby uzyskać więcej informacji na temat różnych maszyn wirtualnych dla Java, możesz sprawdzić ten link . javac , podobnie jak większość kompilatorów Java, jest napisany w Javie.
źródło
(Aby uzyskać więcej informacji, możesz sprawdzić ten link: https://docs.oracle.com/javase/specs/jvms/se7/html/ )
źródło