Clojure在Android开发中的应用情况
要说最近Android开发中的新语言谁最火,毫无疑问是Kotlin,不过对于函数式编程爱好者,Clojure才算他们的心头好。 Clojure是一种运行在Java平台上的Lisp方言,有人对它的评价是这样的: 构建于JVM之上,Clojure就是一门“严肃”的语言,而非很多人眼中的Lisp“玩具”语言,你学习后可以马上使用并且实践。但是Clojure又是Lisp方言,Lisp的神奇能力它还都保留,这样兼具美学和实用的语言如何让人不爱?我相信很多熟悉Scheme之类方言的童鞋,并且有Java背景的,都会对Clojure有相见恨晚的感觉。 在Android平台上使用Clojure进行开发,在过去几年中取得了长足的进步,让开发人员可以把它用于开发完整的应用,比如SwiftKey的Clarity Keyboard。在本文中,我们将检阅当前在Android平台上支持Clojure的工具的情况。 在Android平台上,使用来自标准升级渠道的Clojure历来都要遭受缓慢的启动,相比Java这可长达4-10倍的时间。此问题可由Skummet(http://clojure-android.info/skummet/)来解决,这是Clojure的分支,它优化了Clojure的编译器,从而可以产生更精简、加载更快的字节码(bytecode)。Skummet还包括一个用Skummet构建的经过优化的Clojure运行时版本。 据Skummet的作者Alex Yakushev说,Skummet旨在确保最大的兼容性,尽管依赖直接引用Vars的代码可能会有问题,大部分Clojure代码默认应该是兼容的。 总的来说,对一个简单的基准应用,Skummet能够使首次加载时间缩短到1/4,使APK大小和堆的使用减小到一半。据SwiftKey的 Adam Clements和Ben Leavett说,使用Skummet让他们可以把Clarity Keyboard的加载时间保持在1.5–2秒,更进一步的优化也是可能的。在它的官网上有一个benchmark表格,相对于Clojure,表现相当惊人。: 在Android平台上用Clojure开发的其它有用的工具包括在Clojure-Android Initiative(https://github.com/clojure-android)项目中,有: lein-droid(https://github.com/clojure-android/lein-droid):一个Leiningen插件,作为Clojure-Android项目的构建工具,处理打包资源、创建APK文件、进行数字签名、等等这些过程。 Neko(https://github.com/clojure-android/neko):封装了Android某些部分Java API的工具包,使得它们的使用更符合Clojure的习惯。 Zach Oakes,Android版本Nightweb应用的作者,认为Clojure通过使用简洁的语法可以使应用的代码量得到“惊人的”缩减,而且让程序员更容易地执行异步任务,从而也可以改善应用的响应。 据SwiftKey的工程师们说,使用Clojure创建Android应用,对应用的设计会产生巨大的影响。特别是,就Clarity Keyboard而言,这让他们可以采用完全的“事件驱动”设计,再结合不可变更的数据结构,从而可以轻易地保存和“重放”用户的任何动作。使用不可变的数据也有助于构建高度模块化的应用,使得每项操作默认都是异步的。 参考链接: http://clojure-android.info/#applications http://swiftkey.com/en/blog/what-makes-clarity-keyboard-tick-clojure/ http://blog.ndk.io/2014/03/12/clojure-android-startup-benchmarks.html https://github.com/alexander-yakushev/clojure/tree/skummet https://sekao.net/nightweb/blog/clojure-on-android.html 来源:移动开发前线/ Sergio 关于阿里百川 阿里百川(baichuan.taobao.com)是阿里巴巴集团“云”+“端”的核心战略是阿里巴巴集团无线开放平台,基于世界级的后端服务和成熟的商业组件,通过“技术、商业及大数据”的开放,为移动创业者提供可快速搭建App、商业化APP并提升用户体验的解决方案;同时提供多元化的创业服务-物理空间、孵化运营、创业投资等,为移动创业者提供全面保障。 (编辑:PHP编程网 - 襄阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |