Yanıtlar:
Java sanal bir makinede çalışırken C ++ doğrudan donanımda çalışır. Bunun anlamı, belleğinizin nereye gittiği ve C ++ ile neler yapıldığı üzerinde daha fazla kontrole sahip olmanızdır.
Java, çöp toplanmış bir dildir. Belleğiniz üzerinde doğrudan kontrolünüz yok. Yeni bellek parçaları ayırabilirsiniz, ancak silindiğinde (ince) kontrolünüz yoktur. Çöp toplayıcı, her x karede ayırdığınız her bellek parçasını kontrol eder ve çöp olup olmadığını veya kullanılmaya devam edeceğini belirler.
Oyunlar için bu felaket olabilir. Her birkaç karede bir çöp toplayıcı hala kullanılmakta olup olmadığını görmek için yaptığınız her tahsisi kontrol etmek için geliyor mu? Yavaşlama hakkında konuşun!
İkincisi, kullandığımız kitaplıkların çoğu ya C dilinde yazılmış ya da C ++ dilinde yazılmıştı. Scaleform, Havok fizik motoru, PhysX, SpeedTree vb. Hakkında konuşuyorum. Sektörde yaygın olarak kullanılan tüm profesyonel paketler. Başka bir dil kral olmak istiyorsa, onları desteklemesi daha iyi olur.
Kişisel görüşüm, Java'nın masaüstü uygulamaları ve uygulamaları için gerçekten iyi olduğu, ancak oyunlar için değil. Java, geliştiriciler için çok güzel araçlara sahiptir ve teorik olarak Java Sanal Makinesi uygulamasına sahip herhangi bir platformda çalıştırılabilir, ancak yine de C ++'ı tercih ederim çünkü hafızam üzerinde bu kontrole ihtiyacım var. Özellikle egzotik veri yapıları ile çalışmaya başladığınızda (kırmızı-siyah ağaç, çift bağlantılı liste vb.) Tüm bellek ayırmalarınız hakkında iyi bir genel bakış elde etmenize yardımcı olur.
Söylemiyorum: Java kullanma. Diyorum ki: Java'yı neden kullandığınızı düşünün. Minecraft Java ile oluşturulmuştur, bu yüzden Java'da oyun oluşturmak kesinlikle mümkündür. Ama daha iyi bir oyun olurdu, C ++ ile inşa edilmiş miydi? Eh, büyük üç (Windows, MacOS, Linux) üzerinde çalışmasını sağlamak o kadar ucuz olmazdı, ancak buna rağmen, geliştirilmesinde platforma özgü birçok hatayla karşılaştı, Java'nın düzgünleştiremediği hatalar bitmiş.
Şimdi programcıları başlatmak için tonlarca C ++ çerçevesi var. Özellikle sektördeki kariyerinizi ilerletmek istiyorsanız, bunu öğrenmemek için hiçbir bahane yoktur.
Kısa cevap: C ++ yerel kodu derler, bu nedenle performans bir çalışma zamanı veya VM değil, geliştiriciye bağlıdır.
Uzun cevap:
C ++ 'ın "daha hızlı" olmasının C ++ ile ilgisi yoktur. Şu anda, birden fazla platform için bağımsız, yerel kod üreten araçlar tarafından desteklenen çok az dilde biridir.
Gün içinde, C, C ++, BASIC / 2, Delphi, vb. Kullanabilir ve verimli, bağımsız yürütülebilir dosyalar elde edebilirsiniz. Dil seçimi kişisel tercih ve pazar güçleri meselesiydi.
Bu günlerde, LLVM bir zamanlar olduğu gibi ayrıştırıcı grubuna giren her şeyi yaptığı için bunu değiştirmek için iyi bir konumda olmasına rağmen, "C ++ daha hızlıdır" varsayımı aslında kendi kendini gerçekleştiren bir kehanettir.
Borland haklıydı: Ayrıştırılan birden fazla dil, önce optimizasyonlar uygulandı, daha sonra ortak bir arka uç derleyicisine ve bağlayıcısına geçti. Hangi etkili LLVMs büyük başarılarından biridir.
Java, JVM olmadan uygulanması çok zor olacak şekilde yapılandırılmıştır. Garip bir şekilde, C #, yaygın ve yanlış, Java'ya kabaca eşdeğer olduğu varsayılır, zaten iOS da dahil olmak üzere çeşitli platformlarda yerel kodu derler.
Noel listemin en üstünde mi? C ++ 'a geri dönüp özellikler, gerçek istisna işleme ve gerçek ÇALIŞMA polimorfizmini eklemek ve ayrıştırıcının kendi başına çözebileceği f "d yukarı ok sözdizimi bokundan kurtulmak için bir zaman makinesi. 10 yıl boyunca bir önişlemci yazdım önce aptalca bir şey çünkü.