Bahasa Fungsional yang dikompilasi ke Dalvik VM Android? [Tutup]

16

Saya memiliki masalah perangkat lunak yang sesuai dengan pendekatan fungsional untuk pemrograman, tetapi target pasar akan berada di OS Android. Saya bertanya karena ada bahasa fungsional yang mengkompilasi ke VM Java, tetapi bytecode Dalvik! = Java bytecode.

Atau, apakah Anda tahu jika dxutilitas dapat secara cerdas mengkonversi .classfile yang dihasilkan dari bahasa fungsional seperti Scala?

Sunting : Untuk menambah sedikit lebih banyak manfaat bagi komunitas, dan juga untuk membantu saya memilih yang lebih baik, dapatkah saya menyaring sedikit pertanyaan?

  • Sudahkah Anda menggunakan bahasa alternatif dengan Dalvik? Yang mana
  • Apa saja "gotchas" (masalah) yang mungkin saya hadapi?
  • Apakah kinerja dapat diterima? Maksud saya, aplikasi masih terasa responsif terhadap pengguna.

Saya tidak pernah melakukan pengembangan ponsel, tetapi saya tumbuh dengan perangkat yang terbatas dan saya tidak beranggapan bahwa ada biaya untuk menggunakan bahasa yang tidak standar dengan platform. Saya hanya perlu tahu apakah biayanya sedemikian rupa sehingga saya harus menggunakan pendekatan saya ke bahasa default (yaitu menerapkan prinsip-prinsip fungsional dalam bahasa OOP).

Berin Loritsch
sumber
Saya telah memperbarui pertanyaan. Terima kasih @geekosaur atas jawaban awal Anda. Itulah informasi awal yang saya cari.
Berin Loritsch
Saya pernah mendengar bisikan di kafe Haskell tentang orang-orang yang melakukan ini dengan FFI + Haskell + Courage. Saya percaya ada perpustakaan di github / hackage untuk itu
Daniel Gratzer

Jawaban:

7

Ada posting blog oleh Christian Neukirchen yang disebut Programming for Android with Scala yang menunjukkan bagaimana membangun program Scala untuk Android. Tampaknya dexdapat menangani Scala, tetapi Anda perlu menggunakan alat seperti ProGuard untuk memotong pustaka kelas Scala ke ukuran karena dexjika tidak akan mengimpor seluruh runtime Scala.

Ada juga beberapa pekerjaan yang sedang berlangsung pada pemrograman Android dengan Erjang dan Clojure .

geekosaurus
sumber
1
Tampaknya hampir semua opsi yang Anda berikan memiliki penalti performa serius. Itu memberitahu saya bahwa opsi belum cukup matang untuk prime time dulu. Mungkin satu tahun lagi?
Berin Loritsch
Selama Anda tidak menggunakan sebagian besar perpustakaan kelas scala, seharusnya tidak ada penalti kinerja yang signifikan. Anda juga dapat mengotomatiskan seluruh proses dengan pakar.
Kim
@Berin: Saya pikir masa depan tidak menggunakan bahasa penargetan JVM - dexsetelah semua dioptimalkan untuk berurusan dengan tidak hanya Java bytecode tetapi juga konvensi bytecode Java (Anda akan melihat beberapa diskusi tentang ini di tautan yang saya berikan sebelumnya) - tetapi menargetkan VM Dalvik secara langsung. Dapat dibayangkan itu bisa menjadi lebih cepat dari pada dexrute Java .
geekosaur
1
Dan bagi mereka yang bertanya-tanya: bytecode VM Dalvik didokumentasikan: opcodes , format instruksi . Saya melihat beberapa kemungkinan untuk optimasi lubang intip tidak mungkin dengan menargetkan JVM segera, apalagi optimasi cerdas menggunakan arsitektur Dalvik secara langsung.
geekosaur
@ Kim, artikel yang saya temukan mengatakan masalah kinerja ada pada perbedaan antara algoritma pemuatan kelas untuk Java dan Dalvik. Jika saya menjauh dari fitur bahasa dinamis Scala, saya harus dapat menghindari masalah pemuatan kelas. Masalah yang sama mengganggu opsi lain. Ini masih agak baru sekarang. Saya masih mungkin akhirnya mencobanya pada proyek ini - itu adalah bukti konsep dengan cara apa pun.
Berin Loritsch
7

Kawa adalah varian yang indah tetapi sedikit diketahui dari Skema yang telah ada diam-diam selama bertahun-tahun dan berjalan pada JVM dan Dalvik, secara asli . Oleh karena itu, mirip dengan Mirah, outputnya tidak menyertakan VM tambahan dan hanya mencakup perpustakaan yang diimpor secara eksplisit. Kawa memiliki banyak makro standar (termasuk beberapa khusus untuk API Android) yang menghasilkan sintaksis bersih yang bagus (dengan asumsi seseorang tidak menolak tanda kurung), dan menambahkan beberapa barang lezat di atas Skema, seperti "janji" (eval dan masa depan yang malas) jadi satu). Bahasa ini cukup kuat dan terdokumentasi dengan baik, dan telah secara aktif dipelihara dan berkembang sejak masa awal Jawa.

Kalender Java Advent merangkum keunggulan Kawa dengan beberapa contoh dan tautan informatif.

bug
sumber
Wow, terima kasih telah mengarahkan saya ke Kawa! Saya sudah gatal untuk melakukan beberapa pengembangan Android non-Jawa dan ini terlihat sangat menjanjikan.
Evicatos
1

Selain scala, saya dapat menyarankan Anda untuk melihat mirah di android, berikut beberapa detailnya: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

Jadi apa yang membuat pendekatan ini 'lebih baik' daripada bahasa lain? Mirah adalah bahasa yang diketik statis dengan kemiripan dengan ruby. Yang memungkinkan untuk beberapa gaya fungsional bisa dibilang lebih baik daripada java. Biasanya 'porting' bahasa ke Android bermasalah karena Anda perlu port perpustakaan standar juga. Mirah menghindari ini dengan menghindari memiliki lib standar. Dalam materi yang direferensikan ada gambaran bagus dari pengalaman DUNIA NYATA menjalankan mirah di android dan bagaimana hasilnya. (coba 2)

Andreas Secheert
sumber
1
Tolong jangan mem-posting ulang jawaban yang sama, yang harus Anda lakukan untuk meminta jawaban Anda dihapuskan setelah Anda mengeditnya adalah menandainya untuk perhatian moderat.
yannis