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 dx
narzędzie może inteligentnie konwertować .class
pliki 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).
źródło
Odpowiedzi:
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
dex
poradzi sobie ze Scalą, ale musisz użyć narzędzia takiego jak ProGuard, aby zmniejszyć bibliotekę klas Scali do rozmiarów, ponieważ wdex
przeciwnym razie zaimportujesz cały środowisko wykonawcze Scali.Trwają także prace nad programowaniem na Androida z Erjangiem i Clojure .
źródło
dex
jest 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żdex
trasa Java .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.
źródło
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)
źródło
Na Clojure na Androida dużo się zmieniło ( https://github.com/clojure-android/neko ) Neko .
Występują problemy z wydajnością związane z Dalvik VM i Clojure Compiler; problemy te są powoli rozwiązywane.
Prezentacja na temat obecnego stanu (lipiec 2015 r.): Https://www.youtube.com/watch?v=mVXTcAEKgF8&index=9&list=PLZdCLR02grLoBx0Y5ZrpdmLxc160PIwzQ
źródło
Jeszcze nie jest, ale Miguel de Icaza, facet, który wie coś o maszynie wirtualnej Davlik, mówi: „ F # dla droida znajduje się na ich liście rzeczy do zrobienia ”. Więc powiedziałbym, że nadchodzi oficjalna paczka.
źródło