Języki funkcjonalne, które kompilują się z Dalvik VM w Androidzie? [Zamknięte]

16

Mam problem z oprogramowaniem, który pasuje do funkcjonalnego podejścia do programowania, ale rynek docelowy będzie dotyczył systemu operacyjnego Android. Pytam, ponieważ istnieją języki funkcjonalne, które kompilują się do maszyny wirtualnej Java, ale kod bajtowy Dalvik! = Kod bajtowy Java.

Alternatywnie, czy wiesz, czy dxnarzędzie może inteligentnie konwertować .classpliki generowane z funkcjonalnych języków, takich jak Scala?

Edycja : Czy mogę nieco zawęzić pytanie, aby dodać społeczności nieco więcej pomocy, a także pomóc mi w lepszym wyborze?

  • Czy korzystałeś z alternatywnych języków w Dalvik? Które?
  • Jakie są „gotchas” (problemy), na które mogę natknąć się?
  • Czy wydajność jest akceptowalna? Rozumiem przez to, że aplikacja nadal reaguje na użytkownika.

Nigdy nie zajmowałem się projektowaniem telefonów komórkowych, ale dorastałem na urządzeniach z ograniczeniami i nie mam złudzeń, że korzystanie z niestandardowych języków na platformie kosztuje. Muszę tylko wiedzieć, czy koszt jest taki, że powinienem podważyć moje podejście do języka domyślnego (tj. Zastosować zasady funkcjonalne w języku OOP).

Berin Loritsch
źródło
Zaktualizowałem pytanie. Dziękuję @geekosaur za twoją wstępną odpowiedź. To była informacja początkowa, której szukałem.
Berin Loritsch
Słyszałem szepty w kawiarni Haskell, że ludzie robią to z FFI + Haskell + Odwaga. Wierzę, że jest na to biblioteka github / hackage
Daniel Gratzer,

Odpowiedzi:

7

Istnieje post na blogu autorstwa Christiana Neukirchen pod tytułem Programowanie dla Androida ze Scalą, który pokazuje, jak budować programy Scala dla Androida. Wygląda na to, że dexporadzi sobie ze Scalą, ale musisz użyć narzędzia takiego jak ProGuard, aby zmniejszyć bibliotekę klas Scali do rozmiarów, ponieważ w dexprzeciwnym razie zaimportujesz cały środowisko wykonawcze Scali.

Trwają także prace nad programowaniem na Androida z Erjangiem i Clojure .

geekozaur
źródło
1
Wygląda na to, że prawie wszystkie opcje, które dałeś, są poważnie zagrożone. To mówi mi, że opcje nie są jeszcze wystarczająco dojrzałe, aby uzyskać najwyższy czas. Może za rok?
Berin Loritsch 30.03.11
Tak długo, jak nie korzystasz z dużych części biblioteki klas Scali, nie powinno być żadnych istotnych spadków wydajności. Możesz także zautomatyzować cały proces za pomocą maven.
Kim
@Berin: Myślę, że przyszłość nie będzie używać języków targetujących JVM - dexjest przecież zoptymalizowana pod kątem nie tylko kodu bajtowego Java, ale także konwencji kodu bajtowego Java (omówię to w linkach, które podałem wcześniej) - ale targetowanie Dalvik VM bezpośrednio. Można sobie wyobrazić, że może to być szybsze niż dextrasa Java .
geekozaur
1
A dla tych, którzy zastanawiają się: kod bajtowy Dalvik VM jest udokumentowany: kody operacyjne , formaty instrukcji . Widzę, że niektóre możliwości optymalizacji wizjera nie są możliwe poprzez natychmiastowe ukierunkowanie na JVM, nie mówiąc już o mądrzejszych optymalizacjach bezpośrednio przy użyciu architektury Dalvik.
geekozaur
@Kim, artykuł, który znalazłem, mówi, że problem z wydajnością polega na różnicach między algorytmami ładowania klas dla Java i Dalvik. Jeśli będę trzymać się z dala od dynamicznych funkcji językowych Scali, powinienem być w stanie uniknąć problemów z ładowaniem klasy. Ten sam problem dotyczył innych opcji. W tej chwili wciąż jest całkiem nowy. Nadal mogę go wypróbować w tym projekcie - jest to dowód koncepcji.
Berin Loritsch 30.03.11
7

Kawa jest piękny, ale mało znany wariant ze schematu, który istniał cicho przez wiele lat i działa zarówno na JVM i Dalvik, natywnie . Dlatego, podobnie jak Mirah, jego dane wyjściowe nie zawierają żadnej dodatkowej maszyny wirtualnej i zawierają tylko jawnie zaimportowane biblioteki. Kawa ma wiele standardowych makr (w tym niektóre specyficzne dla interfejsów API Androida), które tworzą ładną czystą składnię (zakładając, że nie ma nic przeciwko nawiasom okrągłym) i dodaje kilka smacznych dodatków do schematu, takich jak „obietnice” (leniwe eval i futures w jednym). Język jest dość solidny i dobrze udokumentowany, a od początku istnienia Java był aktywnie rozwijany i rozwijany.

Kalendarz adwentowy Java podsumowuje zalety Kawa z kilkoma pouczającymi przykładami i linkami.

pluskwa
źródło
Wow, dzięki za skierowanie mnie w stronę Kawy! Bardzo chciałem opracować program dla Androida inny niż Java i wygląda to naprawdę obiecująco.
Evicatos,
1

Oprócz Scali mogę zaproponować spojrzenie na Mirah na Androidzie, oto kilka szczegółów: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

Co sprawia, że ​​takie podejście jest „lepsze” niż w innych językach? Mirah to język o typie statycznym, podobny do ruby. Który pozwala na funkcjonalny styl, prawdopodobnie lepszy niż java. Zazwyczaj „przenoszenie” języka na Androida jest problematyczne, ponieważ musisz także przenieść standardową bibliotekę. Mirah unika tego, unikając standardowego lib. W przywoływanym materiale znajduje się ładny przegląd doświadczenia REAL WORLD z uruchomieniem Mirah na Androidzie i jak to się okazało. (spróbuj 2)

AndreasScheinert
źródło
1
Proszę nie przesyłać ponownie tej samej odpowiedzi, wystarczyło poprosić o usunięcie odpowiedzi po jej edycji, aby oflagować ją z uwagą moderacji.
yannis,