Motivasi di balik J2ObjC

J2ObjC memulai dengan rasa frustrasi; perasaan frustrasi beberapa tim pengembangan harus mencoba untuk melakukan iterasi produk web dan seluler mereka dengan cepat tanpa mereka menghancurkan fungsionalitasnya. Banyak produk klien Google dibuat menggunakan GWT untuk aplikasi web (sekarang J2CL), dan Android API untuk perangkat seluler Android. Akhirnya, ada aplikasi iPod/iPad, yang harus berupa aplikasi web JavaScript, atau ditulis tangan dalam Objective-C. Meskipun aplikasi GWT dan Android dapat menggunakan kode logika bisnis (non-UI), tidak ada solusi untuk membagikan kode tersebut ke aplikasi iOS.

Beberapa pendekatan untuk memecahkan masalah ini telah diselidiki. XMLVM terlihat sangat menjanjikan, tetapi pada saat itu halaman penerjemah iOS menyatakan bahwa project tersebut ditangguhkan (sekarang aktif kembali, dan merupakan alternatif yang baik untuk project ini). Alat terjemahan lainnya melakukan konversi kode sekali pakai, sehingga memerlukan pengeditan tambahan sebelum output berhasil di-build dan dijalankan.

Proyek Baru Lahir

Sejak awal, banyak engineer mengira penerjemah seperti J2ObjC tidak memungkinkan. Membuat alat yang dapat menerjemahkan semua kode aplikasi Java secara akurat ke iOS sekaligus mempertahankan semantiknya secara sempurna sangatlah tidak mungkin. Hal itu karena iOS memiliki standar desain antarmuka pengguna yang ketat, dan penggunanya sangat sadar jika ada aplikasi yang tidak mematuhinya. Menurut pendapat kami, satu-satunya cara untuk mendapatkan UI iOS kelas dunia yang cepat adalah dengan menulisnya di Objective-C menggunakan framework SDK iOS Apple.

Namun, seperti yang dipelajari sebagian besar engineer dari batas-batas kalkulus diferensial, akan sangat berguna untuk mendekati sesuatu yang tidak mungkin. Oleh karena itu, kami menetapkan serangkaian batasan yang akan meningkatkan peluang keberhasilan J2ObjC:

  • Hanya mendukung pengembangan sisi klien. Alat command line dan kode server secara teori dapat diterjemahkan, tetapi kasus penggunaan tersebut cenderung memiliki masalah yang tidak ditangani oleh J2ObjC.
  • Hanya mendukung kode logika bisnis, dan menjauhlah jauh dari API antarmuka pengguna (seperti yang biasa dimiliki peta lama di sudut luarnya, "di sini ada monster").
  • Memerlukan Framework Dasar iOS, bukan basis yang lebih umum.
  • Gunakan Instrumen Xcode untuk memverifikasi performa dan penggunaan memori yang dapat diterima, setelah menerapkan praktik terbaik Apple untuk pengelolaan memori.
  • Hanya fokus pada apa yang dibutuhkan oleh developer aplikasi, bukan pada apa yang dibutuhkan untuk kelengkapan. Kebutuhan aplikasi yang nyata mendorong persyaratan project.

Kami Berguna, Mungkin Anda Juga Akan Ingin

Kami menjadikan J2ObjC sebagai open source karena beberapa project internal menganggapnya menyelesaikan masalah berbagi logika bisnis Java dengan aplikasi iOS mereka. Beberapa tim sekarang mengandalkan penerjemah, dan kami sibuk menambahkan fungsi baru serta memperbaiki banyak bug. Kami menyambut tim aplikasi seluler lainnya untuk mencobanya, dan memberi tahu kami apa saja yang berhasil dan apa yang perlu ditingkatkan.

Kami juga merasa bahwa pengerjaan proyek ini memberikan hasil yang memuaskan. Dua tugas tersulit untuk setiap penerjemah Java adalah 1) mengurai, memeriksa jenis dan menyelesaikan sumber Java dengan benar, serta 2) menyediakan lingkungan runtime Java yang sesuai. Tugas pertama ditangani dengan baik oleh compiler javac, dan lingkungan runtime (termasuk pengujian unitnya) didasarkan pada library libcore Android. Langkah ini menyisakan hal yang menyenangkan bagi kita: mengubah hierarki sintaksis abstrak dan menghasilkan output sumber yang umumnya mudah di-debug. Jika Anda tertarik dengan alat atau compiler Java, bergabunglah bersama kami. Masih banyak yang harus dilakukan, dan kami akan sangat mengharapkan bantuan Anda.