scala on android
DESCRIPTION
My presentation for Droidcon London, 2009TRANSCRIPT
![Page 1: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/1.jpg)
ANDROID AND SCALA: IS ANDROID READY FOR A SCALA INVASION?Presented by Akshay Dashrath
![Page 2: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/2.jpg)
Which approach?
![Page 3: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/3.jpg)
Performance
• Google Best Practices (http://developer.android.com/guide/practices/design/performance.html)
• NDK
![Page 4: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/4.jpg)
For example…………
![Page 5: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/5.jpg)
What's wrong with Java?
![Page 6: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/6.jpg)
What about exploring alternative languages?
![Page 7: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/7.jpg)
What about exploring alternative languages?
![Page 8: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/8.jpg)
Abstraction Performance
![Page 9: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/9.jpg)
Scala allows the programmer……
to write Clearer and more concise code
![Page 10: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/10.jpg)
Scala is……
• Its Functional and OO• Statically typed• Supports type inference
• val file = new File("/sdcard/list.txt")
• Everything is an object• No primitives• x + 1 is the same as x .+(1)
• Supports Traits
![Page 11: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/11.jpg)
So what's this “Trait”?• Similar to mixin• Nothing but an interface that supports concrete methods• Can “extend” multiple traits
![Page 12: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/12.jpg)
For example…….• trait Similarity { def isSimilar(x: Any): Boolean def isNotSimilar(x: Any): Boolean = !isSimilar(x) }
• class Point(xc: Int, yc: Int) extends Similarity { var x: Int = xc var y: Int = yc def isSimilar(obj: Any) = obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x }
• object TraitsTest extends Application { val p1 = new Point(2, 3) val p2 = new Point(2, 4) val p3 = new Point(3, 3) println(p1.isNotSimilar(p2)) println(p1.isNotSimilar(p3)) println(p1.isNotSimilar(2)) }
![Page 13: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/13.jpg)
Flexibility of Scala makes………• Its quite possible to develop internal DSL (Domain
Specific Languages)• Example
val name = “scala”
name contains “a” rather than name.contains(“a”)
• Wrappersclass ShouldWrapper(s: String) { def should = "should was invoked on " + s }
implicit def convert(s: String) = new ShouldWrapper(s)
“scala”.should
Output = java.lang.String = should was invoked on scala
![Page 14: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/14.jpg)
Scala also………• Allows use of Scala as well as Java and Android APIs
seamlessly
![Page 15: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/15.jpg)
A.scalaB.scala
A.classB.class
AB.dex AB.apkscalac dex zip
![Page 16: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/16.jpg)
Scala is also designed with………• Message passing in mind
• Between threads
• So is Android• Between processes/applications
![Page 17: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/17.jpg)
vs
• Java• public static LinkedList<RandomString> quicksort(LinkedList<RandomString> list) {
if (list.size() <= 1)return list;int pivot = list.size() / 2;LinkedList<RandomString> lesser = new LinkedList<RandomString>();LinkedList<RandomString> greater = new LinkedList<RandomString>();int sameAsPivot = 0;for (RandomString number : list) {if (number.getNum() > list.get(pivot).getNum())greater.add(number);else if (number.getNum() < list.get(pivot).getNum())lesser.add(number);elsesameAsPivot++;}lesser = quicksort(lesser);for (int i = 0; i < sameAsPivot; i++)lesser.add(list.get(pivot));greater = quicksort(greater);LinkedList<RandomString> sorted = new LinkedList<RandomString>();for (RandomString number : lesser)sorted.add(number);for (RandomString number: greater)sorted.add(number);return sorted;}}
![Page 18: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/18.jpg)
vs
• Scala• def quicksort(l: List[RandomString]): List[RandomString] = {
l match {case List() => lcase _ => quicksort(for(x <- l.tail if x.num < l.head.num) yield x) :::
List(l.head) ::: quicksort(for(x <- l.tail if x.num >= l.head.num) yield x)}}
OR
• def quicksort(unsorted:List[RandomString]):List[RandomString] = { val len = unsorted.length if (len<2) unsorted else { val (left,right) = unsorted.splitAt(len/2) val pivot = right.head val rest = left ::: right.tail val (less,more) = rest.partition(_.num <= pivot.num) quicksort(less) ::: List(pivot) ::: quicksort(more) } }
![Page 19: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/19.jpg)
And finally the shortcomings……• Performance on the Dalvik Virtual Machine
• Quick Sort of 100 integers and search for a string in Scala = 15.2 sec (java = 5.9 sec)
• Quick Sort method in Scala = 5.32 sec (Java = 1.051 sec)
• Memory• Lack of support• Learning curve
![Page 20: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/20.jpg)
But Why?.........
• Boxing/Unboxing• Anonymous classes created for closures• Recursion?• Solution
• Scala 2.8• Dalvik JIT• ProGuard
![Page 22: Scala On Android](https://reader034.vdocuments.site/reader034/viewer/2022042715/558c03f7d8b42a62788b45e7/html5/thumbnails/22.jpg)
Questions