Bahasa apa yang harus saya gunakan untuk membuat perpustakaan lintas platform? [Tutup]

10

Saya ingin membangun parsing perpustakaan SyncML ( tidak ada UI ) yang seharusnya dapat membangun pesan berdasarkan informasi yang disediakan oleh aplikasi host, dimasukkan oleh metode perpustakaan. Juga, perpustakaan harus dapat melakukan panggilan balik ke metode dalam aplikasi host.

Saya ingin dapat mengkompilasi ini dan membuatnya tersedia di banyak platform mungkin: Windows, OS Windows Phone 7, OSX, iOS, Linux, Android, BlackBerry. Pada dasarnya platform sebanyak mungkin.

Prioritasnya adalah agar ini tersedia di perangkat seluler.

Pertanyaan:

  1. Pengaturan apa yang harus saya gunakan? (bahasa pemrograman, kompiler, IDE, dll.)
  2. Bagaimana saya mengkompilasi pustaka ini untuk platform yang berbeda ini dan bagaimana saya akan terhubung dengannya?
  3. Ada info lain? mis. artikel yang membahas tentang pengembangan lintas platform?

Saya belum pernah melakukan proyek lintas platform semacam ini sebelumnya, sehingga informasi yang tersedia untuk menempatkan saya di arah yang benar akan disambut.

Saya sendiri, saya memiliki latar belakang di C # /. NET dan Objective-C.

Andrei
sumber

Jawaban:

8

Menggunakan platform Java / JVM akan menjadi pilihan yang jelas - ia memiliki cakupan lintas-platform terluas dari bahasa apa pun, dan jika Anda memiliki latar belakang C # /. Net, konsepnya akan sangat akrab.

Perhatikan bahwa Anda tidak harus menggunakan bahasa Java untuk mendapatkan manfaat dari platform Java - pada kenyataannya saat ini, jika memulai proyek dari awal saya mungkin akan merekomendasikan salah satu dari yang berikut:

  • Scala - jika Anda ingin langauge multi-paradigma yang kuat, diketik secara statis, dengan kinerja hebat di JVM. Bisa cocok untuk Anda jika Anda memiliki latar belakang C #.
  • Clojure - jika Anda lebih suka pemrograman fungsional, seperti bahasa yang dinamis dan nikmati hidup di ujung tombak. Clojure memiliki kemampuan konkurensi yang sangat baik yang mungkin menarik - video yang terhubung layak untuk ditonton untuk beberapa wawasan mendalam.
  • Groovy - jika Anda menginginkan bahasa skrip berorientasi objek dinamis sederhana namun efektif yang akan terasa sangat akrab bagi pengembang C # / Java.

Semua bahasa ini mendapatkan semua manfaat berada di JVM (kompiler JIT yang fantastis, pengumpulan sampah yang sangat efektif, satu set perpustakaan yang sangat besar) tetapi merupakan bahasa yang jauh lebih produktif untuk digunakan.

Omong-omong, sudah ada pustaka SyncML open source yang tersedia di Java bernama Funambol . Tidak yakin sejauh mana ini berguna secara langsung untuk Anda, tetapi ini adalah contoh dari fakta bahwa biasanya ada perpustakaan Java open source untuk hampir semua hal .......

Pikiran tentang opsi lain:

  • C / C ++ tentu bisa bekerja lintas platform, tetapi membutuhkan kompilasi ulang (dan pengujian selanjutnya) ke dalam kode asli untuk setiap platform. Dengan bahasa JVM yang tidak perlu karena bytecode yang dikompilasi itu sendiri portabel. Kecuali Anda benar-benar membutuhkan C / C ++ untuk kinerja atau akses ke fitur perangkat keras, saya pikir itu adalah sakit kepala yang harus Anda hindari.
  • C # dalam bentuk Mono dapat berfungsi (saksikan keberhasilan Unity sebagai pustaka lintas platform), tetapi tidak ada ekosistem JVM dalam hal kematangan, ketersediaan perpustakaan, atau bahkan kinerja mentah. Juga tidak akan 100% kompatibel dengan Microsoft. Net karena. Net memiliki fitur khusus windows yang merupakan mimpi buruk bagi portabilitas. Namun, layak dipertimbangkan jika Anda bertekad untuk tetap menggunakan C #.
  • Javascript mungkin merupakan opsi luar jika Anda tertarik menggunakan pustaka di sisi klien dan server.
mikera
sumber
1
Terima kasih atas jawabannya. Apakah Anda tahu seberapa baik seseorang dapat port Java ke iPhone, dalam bentuk perpustakaan atau kerangka kerja? Juga, tidak bisa menggunakan Funambol, intinya adalah membuat perpustakaan saya sendiri.
Andrei
2
Saya mengerti Apple sedang sangat membatasi tentang Java pada iPhone saat ini. Saya berharap tekanan pasar akan menyebabkannya terjadi lebih banyak di masa depan - artikel ini theserverside.com/discussions/thread.tss?thread_id=63072 misalnya berbicara tentang Oracle yang mendemonstrasikan aplikasi berbasis Java di iPod Touch.
mikera
+1 untuk mendidik saya tentang tidak perlu menggunakan Java sendiri, tetapi orang dapat menggunakan Scala, Clojure, Groovy. Jawaban yang menarik.
Anthony
3

Anda mungkin ingin mencoba Java - Java Runtime Environment (mesin virtual) adalah lintas platform, Java dapat digunakan di perangkat seluler dengan Android (atau dengan Java ME) dan .NET sangat mirip dengan itu.

malejpavouk
sumber
3

Ini bukan satu pilihan tetapi banyak. Meskipun tergoda untuk menemukan satu hal yang bisa dibawa kemana-mana, itu tidak selalu merupakan cara terbaik untuk melakukannya.

  1. Misalnya, walaupun dimungkinkan untuk memeras kode C ++ di platform Windows mobile, apa pun. NET akan selalu lebih mudah di sini daripada bagian lawannya dari sudut pandang dukungan.

  2. Demikian pula, kita perlu membuat pilihan besar apakah Anda ingin itu asli atau sedang berjalan dan apakah Anda benar-benar terbatas pada Web sentris atau lebih kuat generik? Sebagai contoh, Adobe Runtime lebih di mana-mana tetapi akan membatasi apa yang dapat Anda lakukan dibandingkan dengan bahasa pemrograman inti.

  3. Yang paling penting menurut saya, adalah jenis dan level GUI yang ingin Anda bangun.

Sekarang datang ke pilihan yang paling menjanjikan.

Sebuah. Untuk Symbian, Blackberry, Android, BREW dan Bada (samsung) Java / J2ME adalah cara yang paling umum. Padahal, Anda mungkin lebih baik menggunakan C / C ++ dalam banyak kasus, untuk hal-hal inti asli di beberapa platform.

b. Untuk Windows .NET dengan bahasa yang didukung akan lebih baik.

c. Untuk iOS - tidak ada pilihan selain Objective C. Ini TIDAK terlalu banyak C ++ jadi saya tidak akan menghitungnya sebagai tujuan

Berikut ini adalah referensi wiki yang memperlihatkan sekumpulan semua platform yang menunjukkan kepada Anda semua opsi dan di mana mereka berlaku.

Berkat pertanyaan Anda, saya belajar dari tautan wiki di atas bahwa sekarang ada SDK, yang mencoba memecahkan masalah di atas. Dua yang paling dekat adalah:

  1. Marmalade: http://www.madewithmarmalade.com/marmalade/supported-platforms ini secara menarik mendukung hampir semua platform. Windows baru saja ditambahkan untuk membuat lingkaran lengkap.

  2. Kode Partikel: http://www.particlecode.com/

Saya belum menggunakannya, tapi kedengarannya menarik.

Dipan Mehta
sumber
Android menyediakan Bada dan iOS memungkinkan C ++.
Klaim
3

NET hampir tidak tersedia di banyak platform, dan Objective-C bahkan lebih buruk, ditambah. NET agak lambat dan ObjC pada dasarnya tidak memiliki dukungan di luar Apple. C sebagai bahasa pada dasarnya bahkan tidak layak dipertimbangkan kecuali beberapa faktor eksternal membuat Anda menggunakannya.

Satu-satunya hasil bahasa yang layak adalah C ++.

DeadMG
sumber
2
Apakah Anda tahu sesuatu tentang keuntungan menggunakan proyek Mono dalam kombinasi dengan C #? Mengapa C tidak layak dipertimbangkan?
Andrei
2
@Andrei: Sejauh yang saya tahu, Mono bukanlah gambaran ketersediaan di semua platform yang Anda daftarkan. Dan C tidak layak dipertimbangkan karena sama seperti C ++, tetapi dengan semua fitur bagus dipotong, yang jelas merupakan hal yang bodoh untuk dilakukan jika Anda dapat menggunakan C ++.
DeadMG
4
@DeadMG: Saya ingin melihat Anda berdebat tentang hal itu dengan Linus Torvalds: thread.gmane.org/gmane.comp.version-control.git/57643/… - tidak mengatakan bahwa ia harus 100% benar, saya akan hanya ingin menonton flamewar.
Michael Borgwardt
2
@ DeadMG C bukan C ++ dengan fitur yang bagus; C ++ adalah C dengan fitur mengerikan yang ditambahkan. Tidak ada yang salah dengan C.
rightfold
2
@WTP: Dia meminta rekomendasi, bukan kisah hidup saya. Fakta sederhananya adalah bahwa apa pun yang Anda pikirkan tentang fitur tambahan C ++, faktanya adalah mereka ada dan mereka membuat C ++ - hanya kode yang dapat diakses, yang merupakan bonus, dan C bukan apa-apa C ++ bukan- sebaliknya tidak benar. Saat Anda menggunakan C ++ lebih dari C, Anda hanya menambahkan pilihan. Oleh karena itu, menurut definisi, C ++ adalah bahasa yang unggul, dan Anda selalu dapat memilih untuk tidak menggunakan fitur C ++. Yang akan menjadi gila, tetapi Anda bisa.
DeadMG