Utilisation de Clojure pour créer des applications Android natives
Le développement de Clojure sur la plate-forme Android a considérablement progressé ces dernières années, permettant aux développeurs de l’utiliser dans des applications à part entière telles que le clavier Clarity de SwiftKey. Ici, nous allons passer en revue l’état actuel des outils prenant en charge Clojure sur la plate-forme Android.
Historiquement, Clojure sur Android a souffert d’un démarrage lent, qui pourrait durer jusqu’à 4 à 10 fois plus longtemps que Java lors de l’utilisation de Clojure en amont standard. Ce problème est résolu par Skummet, un fork Clojure qui optimise le compilateur de Clojure afin qu’il produise un bytecode plus compact et plus rapide à charger. En plus de fournir un compilateur d’optimisation, Skummet inclut également une version optimisée du runtime de Clojure qui est construite par le premier.
Skummet vise à assurer une compatibilité maximale et, bien qu’il puisse y avoir des problèmes avec le code qui repose directement sur le référencement Vars
, la plupart des codes Clojure devraient être compatibles dès la sortie de la boîte, selon le créateur de Skummet, Alex Yakushev.
Dans l’ensemble, Skummet est capable de réduire de 4 fois le temps de chargement lors du premier lancement d’une application de référence simple, et de réduire de 2 fois la taille des APK et l’utilisation du tas. Selon Adam Clements et Ben Leavett de SwiftKey, l’utilisation de Skummet leur a permis de conserver le temps de chargement du clavier Clarity autour de 1,5 à 2 secondes, et d’autres améliorations sont possibles.
D’autres outils utiles pour le développement de Clojure sur Android sont regroupés sous le projet parapluie de Clojure- Android Initiative et comprennent:
- lein-droïde: un plugin Leiningen qui fonctionne comme un outil de construction pour les projets Clojure-Android et traite du processus d’emballage des ressources, de création d’un fichier APK, de signature, etc.
- Neko: une boîte à outils qui enveloppe certaines parties de l’API Java d’Android pour les rendre plus idiomatiques à utiliser à partir de Clojure.
Zach Oakes, auteur de l’application Nightweb pour Android, dit que Clojure peut réduire de manière “choquante” la base de code d’une application en permettant des idiomes laconiques, ainsi qu’améliorer la réactivité de l’application en facilitant l’exécution de tâches asynchrones par le programmeur.
Selon les ingénieurs de SwiftKey, l’utilisation de Clojure pour créer une application Android peut avoir un impact énorme sur la conception de l’application. Plus précisément, dans le cas de Clarity Keyboard, il a permis d’adopter une conception entièrement “événementielle”, qui couplée à l’utilisation d’une structure de données immuable permet de stocker et de “rejouer” facilement toutes les actions de l’utilisateur. L’utilisation de données immuables a également permis de créer une application hautement modulaire et de rendre chaque opération asynchrone par défaut.