Perbedaan Android (Dalvik + Java vs Old School C ++)

8

Berkembang di Android akan berbeda bagi saya, setelah menghabiskan 10 tahun terakhir coding game di C ++. Apa perbedaan / jebakan / hambatan utama yang harus dikembangkan untuk Android? Kekhawatiran besar saya adalah pindah ke Jawa, apa yang paling saya rindukan?

Untuk lebih jelas: apa yang akan saya lewatkan jika saya mengkodekan semuanya di Jawa dibandingkan dengan cara saya biasanya kode C ++ untuk konsol?

Richard Fabian
sumber
Judul bisa sedikit lebih baik. Untuk lebih jelasnya apakah Anda bertanya "Apa perbedaan antara C ++ dan Java di Ponsel Android?"
Jesse Dorsey
6
Saya pikir jika Anda menggunakan NDK ( developer.android.com/sdk/ndk/index.html ) maka Anda dapat menulis sebagian besar kode Anda di C ++.
Chris Howe

Jawaban:

6

Satu-satunya hal terbesar yang mungkin Anda lewatkan adalah manajemen memori eksplisit. Di sisi positifnya, Java memiliki informasi jenis run-time dan generik nyata. Lihat juga: http://developer.android.com/guide/practices/design/performance.html untuk beberapa kiat dari Google tentang cara menjaga kode Java Anda tetap efisien.

Raymond Chen baru-baru ini telah melampiaskan pengumpulan sampah dan manajemen memori di CLR dan posting blognya sangat bagus untuk memahami cara kerjanya. (Saya tahu tautan berikut untuk CLR, tetapi masih relevan untuk pengembangan Java). Lihat khususnya: http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx dan http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10 /10048150.aspx

Yang sedang berkata, tidak ada banyak perbedaan antara Java dan C ++, dan seperti yang ditunjukkan Chris, Anda dapat kode dalam C / C ++ di Android menggunakan NDK.

brett
sumber
terima kasih, "Anda dapat kode dalam C / C ++ di Android menggunakan NDK", ya saya menghargai itu, tapi mengapa tetap berpegang pada senjata lama sepanjang waktu jika sesuatu benar-benar menghasilkan proyek yang lebih baik / lebih cepat.
Richard Fabian
2
Oh, aku mengerti maksudmu. Java memiliki bonus memiliki perpustakaan standar besar dan perpustakaan yang sangat kompeten untuk berurusan dengan XML. Platform Android memperluas perpustakaan standar dengan perpustakaan untuk semua barang perangkat keras mewah dan beberapa fungsionalitas sisi pengguna tambahan. Java juga mendukung kompilasi tambahan / pengecekan kesalahan, jadi Anda akan mendapatkan umpan balik tentang kesalahan segera setelah Anda mengetiknya. Sejujurnya, kamu juga tidak perlu takut dengan kinerja. Ini tidak akan secepat C pada logam biasa, tapi masih cukup cepat. Saya akan mengatakan bahwa tidak banyak yang perlu dikhawatirkan.
brett
4

Google Chris Pruett berbicara tentang menulis game waktu nyata untuk android di Google I / O 2009 dan lagi pada tahun 2010 . Dia berbicara tentang kinerja Java di Android di antara topik lainnya. Dia juga membuat gim, Pulau Replika , di Jawa dan Anda dapat mengunduh kode sumber untuk mendapatkan gambaran tentang bagaimana gim Android Java nantinya. Blog - nya tentang permainan juga memiliki beberapa artikel berwawasan.

Perangkap khas mirip dengan yang menulis dalam bahasa sampah yang dikumpulkan lainnya , Anda menggunakan kumpulan objek dan mengalokasikan hal-hal di muka untuk menghindari menjalankan GC ketika Anda tidak menginginkannya. Metode virtual secara default di Jawa dan membantu untuk menandainya sebagai final ketika Anda tidak perlu menimpanya. Plugin Android Eclipse hadir dengan beberapa alat yang rapi untuk membantu Anda membuat profil aplikasi dan memantau alokasi tumpukan.

Firas Assaad
sumber
2

Anda terlalu khawatir. API untuk OpenGL di Android, OpenGL-ES, sengaja dibuat seperti-C. Lihat spesifikasi OpenGL di http://www.khronos.org/opengles/ untuk detailnya.

Bahkan mungkin Anda tidak akan kehilangan banyak hal dari C ++. Banyak pengembang, bahkan penulis pemrograman terkenal Bruce Eckel ('Thinking in C ++', 'Thinking in Java'), telah menemukan Java bahasa yang jauh lebih efektif untuk pemrograman berorientasi objek. Sebagian besar karena hal-hal yang mereka 'lewatkan' pada awalnya ternyata tidak begitu penting.

Yang mengatakan, apa yang paling saya lewatkan adalah kemampuan untuk menimpa operator, bukan hanya metode. Sintaksnya benar-benar clumsier ketika Anda harus mendefinisikan / mengganti metode bukan operator.

Pertimbangkan, misalnya aritmatika bilangan kompleks. Ini sangat elegan di C ++. Tidak demikian halnya di Jawa. Tetapi ini ternyata memiliki dampak minimal pada sebagian besar proyek nyata.

Beberapa orang mengeluh tentang ketidakmampuan untuk melakukan multiple-inheritance. Tapi jenis pewarisan berganda yang paling berguna ADALAH jenis yang dilakukan Java dengan 'antarmuka', jadi Anda tidak boleh terlalu merindukannya.

pengguna1800
sumber