Czym różni się WORA JVM i Java od innych języków wysokiego poziomu?

12

W świecie Java często rozmawiamy o JVM, a gdy Java była nowa, miała rzekomo zabójczą funkcję „Napisz raz, uruchom gdziekolwiek”.

Sposób, w jaki ludzie mówią i piszą, wydaje się inny niż sposób, w jaki działa na przykład Python. Nie wiedziałem jednak, że napisany przeze mnie kod Python działałby inaczej na innym komputerze. (Chociaż nie napisałem zbyt wiele Python.)

Więc czego mi brakuje? Czym różni się JVM od interpretera języka Python? Czy istnieje sposób, aby Python nie był niezależny od platformy Java? Czy to tylko różnica kulturowa?

Eric Wilson
źródło
1
Podstawową różnicą jest ścisłość specyfikacji JVM. Jest po prostu bardzo dobrze określone, jak musi się (nie powinno) zachowywać.

Odpowiedzi:

17

Java wykonuje bardzo dobrą robotę, izolując cię od podstawowego systemu operacyjnego i zapewnia te same dokładne narzędzia na większości platform, na których pracuje, aby rozmawiać z rzeczami w podstawowym systemie operacyjnym.

Z drugiej strony Python nie radzi sobie tak dobrze z izolowaniem cię od podstawowego systemu operacyjnego, ani nie ma standardowego sposobu obsługi komunikacji procesowej (spójrz na różnice w module sys i module os między oknami i * Na przykład nix implementacja Pythona.)

Napisałem kod w Pythonie, który działałby tylko na pudełku * NIX lub Windows przy użyciu tylko dostępnych wywołań API w Pythonie, gdzie w Javie bardzo trudno byłoby napisać kod, który byłby tylko API Java, który nie działałby tak samo na obu Windows box lub * NIX box

mangelo
źródło
1
Pisanie kodu Java, który działa tylko w systemie Windows, wcale nie jest trudne; po prostu zakoduj na stałe ścieżkę do pliku Windows, np. „C: \ MyApp \ data”
kevin cline
@kevincline Ścieżki zakodowane są złą praktyką w każdym systemie operacyjnym. Ale Java nie wymaga tego, ponieważ oferuje niezależne od systemu operacyjnego metody pobierania popularnych katalogów, takich jak katalog użytkownika lub ścieżka instalacji bieżącego programu.
Philipp
3

Lokalnie i tylko z języka uruchomieniowego, różnica jest niewielka. W szczególności JVM został zaprojektowany nie tylko jako interpreter, ale również jako kompilator środowiska wykonawczego, wnioskowanie o kodzie, instrumentalna warstwa wirtualizacji, w której można zastosować dynamiczne przechwytywanie, różne semantyki GC i możliwość opisania ergonomii wirtualizacji, by wymienić tylko kilka. Python może działać w JVM? Czy Java może działać w interpretatorze Python?

Większość interpreterów to interpretery języka / tokena, JVM (i inne), jak wiadomo interpretuj / kompiluj / uruchamiaj kod pośredni. IBM na przykład robi to od dziesięcioleci poza Javą, nie jest to nic nowego. Nawet VB działał przez jakiś czas w kodzie pośrednim?

WORA jest obecnie głównie pasée, ponieważ wiele języków interpretowanych działa niemal w dowolnym miejscu bez zmian.

Jé Queue
źródło
3

Kiedy Java była nowa, WORA była czymś, czym można się pochwalić - w szczególności, że można skompilować na jednej platformie i uruchomić (skompilowany kod bajtowy) na innych platformach.

Oczywiście, języki interpretowane działają prawie podobnie, niezależnie od tego, na jakiej platformie działa tłumacz (o ile tłumacz jest dostępny dla tej platformy). Jednak systemy plików, problemy z uprawnieniami, kodowanie, zakończenia linii i niezliczone inne małe, ale irytujące problemy mogą powodować bóle głowy. Niektóre rzeczy zależne od platformy nie są łatwe do wyodrębnienia.

Joonas Pulakka
źródło
WORA sama w sobie nie wystarczy. Naprawdę ważne jest to, że jest bardzo dobrze zdefiniowane, jak działa wszędzie, dzięki czemu nie ma znaczenia, gdzie dokładnie był uruchamiany.
Thorbjørn Ravn Andersen
1

Czy Python ma niezależny od platformy GUI?

W każdym razie funkcja WORA miała - po raz kolejny - zwabić programistów C, ponieważ C zwykle modelował platformę bazową, a ponieważ platformy były różne (rozmiar słowa? Endianowość?), Tworzenie w pełni przenośnych programów C wymagało dużej uwagi i uwagi.

Obietnica Java była taka, że ​​cała ta żmudność nie musiała być wykonana, ponieważ platforma jest bardzo dobrze zdefiniowana i WIESZ, że char ma 16 bitów itp. Również GUI jest napisane w Javie i również w 100% przenośne, co oznacza, że ​​twój program może działać na komputerze, o którym nigdy nie słyszałeś, a nawet działać poprawnie.


źródło
6
Python ma kilka niezależnych od platformy alternatyw GUI: docs.python.org/faq/…
Joonas Pulakka 30.10.10
GUI Java są znane z tego, że nie wyświetlają się poprawnie na różnych platformach, więc nie pochwaliłbym się tym aspektem. Zgadzam się jednak z resztą twojego oświadczenia.
gniew
-4

Tyle że Java zdecydowanie nie jest WORA. Widziałem oprogramowanie Java, które zepsuło się po aktualizacji Java do wyższej wersji na mniejszym numerze wersji. IMHO, WORA to tylko chwyt marketingowy.

zvrba
źródło
1
To nie jest tak naprawdę odpowiedź na pytanie.
Eric Wilson,
-1, ponieważ Java jest WORA do wszystkich praktycznych celów. To będzie działać, jeśli uniknąć System specyficzne hacki i oczywiście natywną rzeczy jak JNI. Miałem ponad 50 000 aplikacji liniowych działających idealnie w systemach Windows, Mac i Linux, bez żadnych zmian, za pierwszym razem, z tym samym skompilowanym plikiem .jar. Jeśli trzymasz się czystej Java, wszystko po prostu działa.
mikera
1
Wygląda na to, że źle zrozumiałeś, co oznacza WORA.