Android'in Dalvik VM'sini derleyen İşlevsel Diller? [kapalı]


16

Programlamaya işlevsel yaklaşıma uyan bir yazılım sorunum var, ancak hedef pazar Android işletim sisteminde olacak. Soruyorum çünkü Java'nın VM'sine derleyen işlevsel diller var, ancak Dalvik bayt kodu! = Java bayt kodu.

Alternatif olarak, dxyardımcı programın .classScala gibi fonksiyonel dillerden oluşturulan dosyaları akıllıca dönüştürüp dönüştüremeyeceğini biliyor musunuz ?

Düzenleme : Topluluğa biraz daha yardımseverlik katmak ve daha iyi seçim yapmama yardımcı olmak için, soruyu biraz hassaslaştırabilir miyim?

  • Dalvik ile alternatif diller kullandınız mı? Hangileri?
  • Karşılaşabileceğim bazı "sorun" (sorunlar) nelerdir?
  • Performans kabul edilebilir mi? Bununla birlikte, uygulama hala kullanıcıya yanıt veren hisseder.

Asla cep telefonu geliştirme yapmadım, ancak kısıtlı cihazlarda büyüdüm ve platformla standart olmayan dilleri kullanmanın bir maliyeti olduğu konusunda hiçbir yanılsamam yok. Sadece maliyetin, varsayılan dile yaklaşımımı (yani OOP dilinde işlevsel ilkeleri uygulayabilmem) gerektiği gibi olup olmadığını bilmem gerekir.


Soruyu güncelledim. İlk cevabınız için @geekosaur teşekkür ederiz. Aradığım bilgiler buydu.
Berin Loritsch

Haskell kafesinde FFI + Haskell + Cesaret ile bunu yapan insanların fısıltılarını duydum. Ben bunun için github / hackage üzerinde bir kütüphane olduğunu düşünüyorum
Daniel Gratzer

Yanıtlar:


7

Christian Neukirchen tarafından Android için Scala programlarının nasıl oluşturulacağını gösteren Scala ile Android için Programlama adlı bir blog yazısı var . dexScala'yı işleyebilir gibi görünüyor , ancak Scala sınıf kitaplığını boyutuna kesmek için ProGuard gibi bir araç kullanmanız gerekiyor çünkü dexaksi takdirde tüm Scala çalışma zamanını içe aktaracak.

Erjang ve Clojure ile Android programlama konusunda da devam eden çalışmalar var .


1
Verdiğiniz hemen hemen tüm seçeneklerin ciddi performans cezaları olduğu görülüyor. Bu, seçeneklerin henüz ilk kez yeterince olgun olmadığını söylüyor. Belki bir yıl sonra?
Berin Loritsch

Scala'nın sınıf kütüphanesinin büyük bölümlerini kullanmadığınız sürece, önemli bir performans cezası olmamalıdır. Ayrıca, tüm süreci maven ile otomatikleştirebilirsiniz.
Kim

@Berin: Geleceğin JVM hedefleme dillerini kullanmadığını düşünüyorum - dexsonuçta sadece Java bayt kodu ile değil, Java'nın bayt kodu kurallarıyla da başa çıkmak için optimize edildi (daha önce verdiğim bağlantılarda bununla ilgili bir tartışma göreceksiniz) - ancak hedefleme doğrudan Dalvik VM. Muhtemelen bu, Java dexrotasından daha hızlı olabilir .
geekosaur

1
Merak edenler için: Dalvik VM bayt kodu belgelenmiştir: opcodes , komut formatları . Doğrudan Dalvik mimarisini kullanarak daha akıllı optimizasyonlar yapmanın yanı sıra, JVM'yi hemen hedefleyerek gözetleme deliği optimizasyonları için bazı olasılıklar görüyorum.
geekosaur

@Kim, bulduğum makalede performans sorununun Java ve Dalvik için sınıf yükleme algoritmaları arasındaki farklarda olduğunu söyledi. Scala'nın dinamik dil özelliklerinden uzak durursam, sınıf yükleme sorunlarından kaçınabilmeliyim. Aynı sorun diğer seçenekleri de rahatsız etti. Şu anda hala oldukça yeni. Yine de bu projede denemeye devam edebilirim - bu herhangi bir şekilde bir kavram kanıtıdır.
Berin Loritsch

7

Kawa , yıllarca sessizce var olan ve hem JVM hem de Dalvik'te doğal olarak çalışan güzel ama az bilinen bir Scheme çeşididir . Bu nedenle, Mirah'a benzer şekilde, çıkışı ekstra VM içermez ve yalnızca açıkça içe aktarılan kütüphaneleri içerir. Kawa, güzel ve temiz bir sözdizimi (parantezlerden kaçındığı varsayılarak) yapan çok sayıda standart makroya (Android API'lara özgü olanlar da dahil) sahiptir ve "vaatler" (tembel değerlendirme ve vadeli işlemler gibi) Şema'nın üstüne bazı lezzetli hediyeler ekler birinde). Dil oldukça sağlam ve iyi belgelenmiştir ve Java'nın ilk günlerinden beri aktif olarak korunmakta ve gelişmektedir.

Java Advent Takvimi, Kawa'nın değerlerini bazı bilgilendirici örnekler ve bağlantılar ile özetler.


Vay canına, beni Kawa'ya yönlendirdiğin için teşekkürler! Bazı Java dışı Android geliştirme yapmak için kaşıntı yaptım ve bu gerçekten umut verici görünüyor.
Evicatos

1

Scala'nın yanında Android'de mirah'a bakmanızı önerebilirim, işte bazı detaylar: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

Peki bu yaklaşımı diğer dillerden daha iyi yapan nedir? Mirah, yakutla benzerlik gösteren statik bir dildir. Bu, bazı işlevsel stillerin java'dan tartışmalı olarak daha iyi olmasına izin verir.Genellikle bir dili android'e 'taşımak' sorunludur, çünkü standart kütüphaneyi de taşımanız gerekir. Mirah, standart bir lib'e sahip olmaktan kaçınarak bundan kaçınır. Başvurulan malzemede Android'de mirah çalışan REAL WORLD deneyiminden güzel bir genel bakış ve nasıl ortaya çıktı. (2'yi deneyin)


1
Lütfen yok bunu ılımlılık ilgi için bayrak bunu etmekti düzenlenmiş sonrasında aynı cevabı Repost, size cevap istemek için yapmak zorunda tüm silinmemiş edilecek.
yannis


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.