JVM ve Java'nın WORA'sının diğer üst düzey dillerden farkı nedir?


12

Java dünyasında sık sık JVM hakkında konuşuyoruz ve Java yeni olduğunda "Bir Kez Yaz, Her Yerde Çalıştır" sözde katil özelliğine sahipti.

İnsanların konuşma ve yazma tarzından, bu, örneğin Python'un çalışma şeklinden farklı görünüyor. Yine de, yazdığım Python kodunun başka bir makinede farklı şekilde çalışacağının farkında değildim. (O kadar Python yazmamış olsam da.)

O zaman neyi özlüyorum? JVM'nin bir Python yorumlayıcısından farkı nedir? Python'un Java'nın platform bağımsızlığından yoksun bir yolu var mı? Yoksa bu sadece kültürel bir fark mı?


1
Birincil fark, JVM spesifikasyonunun katı olmasıdır. Nasıl davranması gerektiği (olmaması gerektiği) çok iyi tanımlanmıştır.

Yanıtlar:


17

Java, sizi temel işletim sisteminden ayırmada çok iyi bir iş çıkarır ve temel işletim sistemindeki şeylerle konuşmak için üzerinde çalıştığı çoğu platformda aynı araçları sağlar.

Öte yandan Python, sizi temel işletim sisteminden izole etmede iyi bir iş yapmaz, Süreç iletişimleri arasında standart bir işlem yolu yoktur (Windows ve * arasındaki sys modülündeki ve os modülündeki farklılıklara bakın. örneğin Python'un nix uygulaması.)

Sadece Python kullanılabilir API çağrıları kullanarak sadece bir * NIX kutusu veya Windows kutusu üzerinde çalışacak python kod yazdım, nerede Java her ikisi de aynı işe yaramayacak sadece Java API kod yazmak çok zor olurdu Windows kutusu veya * NIX kutusu


1
Yalnızca Windows üzerinde çalışan Java kodu yazmak hiç de zor değil; "C: \ MyApp \ data" gibi bir Windows dosya yolunu kodlayın
kevin cline

@kevincline Sabit kodlanmış yollar, herhangi bir işletim sisteminde kötü bir uygulamadır. Ancak Java bunu yapmanızı gerektirmez, çünkü kullanıcı dizini veya geçerli programın yükleme yolu gibi ortak dizinleri almak için işletim sisteminden bağımsız yöntemler sunar.
Philipp

3

Topikal olarak ve sadece bir dil çalışma zamanından, çok az fark vardır. JVM özellikle sadece bir tercüman olarak değil, aynı zamanda bir çalışma zamanı derleyicisi, kod çıkarımı, dinamik kancalara sahip olabilen enstrümantal bir sanallaştırma katmanı, çeşitli GC semantiği ve sanallaştırma ergonomisini tanımlama yeteneği olarak tasarlanmıştır. Python JVM'de çalışabilir mi? Java bir Python yorumlayıcısında çalışabilir mi?

Tercümanların çoğu, çalışma kodu / jeton yorumlayıcıları, JVM'ler (ve diğerleri), bildiğiniz gibi, yorumlama / derleme / çalıştırma ara kodudur. Örneğin IBM bunu yıllardır Java dışında yapıyor, yeni bir şey değil. VB bile inanıyorum bir süre ara kodda koştu?

WORA, çoğunlukla yorumlanmış birçok dilin neredeyse hiçbir yerde değişmediği için çoğunlukla passé'dir.


3

Java yeni olduğunda, WORA övünecek bir şeydi - özellikle, bir platformda derleyebileceğiniz ve diğer platformlarda (derlenmiş bayt kodu) çalıştırabileceğiniz.

Elbette, yorumlanmış diller, yorumlayıcının hangi platformda çalıştığından bağımsız olarak (yorumlayıcı söz konusu platform için mevcut olduğu sürece) hemen hemen benzer şekilde çalışır. Ancak, dosya sistemleri, izin sorunları, kodlamalar, satır sonları ve sayısız diğer küçük ama rahatsız edici sorunlar baş ağrısına neden olabilir. Platforma bağlı bazı şeyleri soyutlamak kolay değildir.


Kendi başına WORA yeterli değildir. Gerçekten önemli olan nokta, her yerde nasıl çalıştığının çok iyi tanımlanmış olması ve tam olarak nerede çalıştığının önemsiz olması.
Thorbjørn Ravn Andersen

1

Python'un platformdan bağımsız bir GUI'si var mı?

Her neyse, WORA özelliği - C'nin altta yatan platformu yakından modelleme eğiliminde olduğu ve platformların farklı (kelime boyutu? Endianess?) Olduğu için C programcılarını cezbetmekti, tamamen taşınabilir C programları oluşturmak büyük özen ve dikkat gerektiriyordu.

Java vaadi, platform çok iyi tanımlandığından ve bir karakter 16 bit vb. Olduğunu bildiğinizden, tüm bu sıkıcılığın yapılması gerekmediğiydi. Ayrıca GUI, Java ve% 100 taşınabilir olarak yazılmıştır. programı hiç duymadığınız bir bilgisayarda çalışabilir ve hatta düzgün çalışabilir.


6
Python'un platformdan bağımsız birkaç GUI alternatifi vardır: docs.python.org/faq/…
Joonas Pulakka

Java GUI'leri çeşitli platformlarda düzgün görüntülenmediği için ünlüdür, bu yüzden tam olarak bu yönüyle övünmeyeceğim. Ancak, ifadenizin geri kalanına katılıyorum.
öfke

-4

Bunun dışında Java kesinlikle WORA değil . Java, küçük sürüm numarasında daha yüksek bir sürüme yükseltildikten sonra kırılan Java yazılımını gördüm . IMHO, WORA sadece bir pazarlama hilesi.


1
Bu gerçekten sorunun cevabı değil.
Eric Wilson

-1 çünkü Java tüm pratik amaçlar için WORA'dır. Bu olacak sistem özgü kesmek ve JNI gibi besbelli yerli şeyler kaçınmak eğer çalışır. Windows, Mac ve Linux'ta mükemmel çalışan 50.000+ satır uygulamam vardı, ilk kez aynı derlenmiş .jar dosyasıyla hiçbir değişiklik yapmadım. Saf Java'ya yapışırsanız hepsi işe yarar.
mikera

1
Görünüşe göre WORA'nın ne anlama geldiğini yanlış anladınız.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.