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?
java
python
cross-platform
jvm
Eric Wilson
źródło
źródło
Odpowiedzi:
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
źródło
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.
źródło
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.
źródło
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
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.
źródło