Używanie Clojure do tworzenia natywnych aplikacji na Androida
rozwój Clojure na platformie Android postępuje niezwykle w ciągu ostatnich kilku lat, umożliwiając programistom korzystanie z niego w pełnoprawnych aplikacjach, takich jak klawiatura Clarity SwiftKey. Tutaj przejrzymy aktualny stan narzędzi obsługujących Clojure na platformie Android.
historycznie, Clojure na Androidzie cierpiał na powolne uruchamianie, które może trwać do 4-10 razy dłużej niż Java podczas korzystania ze standardowego upstream Clojure. Problem ten jest rozwiązywany przez skummet, fork Clojure, który optymalizuje kompilator Clojure tak, że tworzy bardziej kompaktowy, szybszy do załadowania kod bajtowy. Oprócz zapewnienia optymalizującego kompilatora, Skummet zawiera również zoptymalizowaną wersję środowiska wykonawczego Clojure, która jest zbudowana przez ten pierwszy.
Skummet ma na celu zapewnienie maksymalnej kompatybilności i chociaż mogą występować problemy z kodem, który opiera się na bezpośrednim odwołaniu do Vars
, większość kodu Clojure powinna być kompatybilna po wyjęciu z pudełka, zgodnie z twórcą Skummeta, Alexem Yakushevem.
Ogólnie Rzecz Biorąc, Skummet jest w stanie przynieść 4X skrócenie czasu ładowania na pierwszym uruchomieniu prostej aplikacji porównawczej, i 2x kurczy się zarówno w rozmiarze APK, jak i użyciu sterty. Według Adama Clementsa i Bena Leavetta, użycie Skummet pozwoliło im zachować czas ładowania klawiatury Clarity około 1,5-2 sekund, a dalsze ulepszenia są możliwe.
inne przydatne narzędzia do tworzenia Clojure na Androida są pakowane w ramach projektu parasolowego Clojure-Android Initiative i obejmują:
- lein-droid: wtyczka Leiningen, która działa jako narzędzie do budowania projektów Clojure-Android i zajmuje się procesem pakowania zasobów, tworzeniem pliku APK, podpisywaniem go itp.
- Neko: zestaw narzędzi, który owija niektóre części Java API Androida, aby uczynić je bardziej idiomatycznymi do użycia z Clojure.
Zach Oakes, autor aplikacji Nightweb dla Androida, mówi, że Clojure może zmniejszyć bazę kodu aplikacji “szokująco”, włączając zwięzłe idiomy, a także poprawić responsywność aplikacji, ułatwiając programiście uruchamianie zadań asynchronicznych.
według inżynierów SwiftKey użycie Clojure do zbudowania aplikacji na Androida może mieć ogromny wpływ na projekt aplikacji. W szczególności, w przypadku Clarity Keyboard, umożliwiło to przyjęcie konstrukcji w pełni “event driven”, co w połączeniu z wykorzystaniem niezmiennej struktury danych pozwala na łatwe przechowywanie i” odtwarzanie ” dowolnych działań użytkownika. Korzystanie z niezmiennych danych pomogło również zbudować wysoce modułową aplikację i sprawić, że każda operacja będzie domyślnie asynchroniczna.