New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. ·...
Transcript of New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. ·...
![Page 1: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/1.jpg)
Scala - the scalable language
Daniel Ploetzer and Eric Heder
Seminar on scientific languagesAICES, RWTH Aachen University
19.12.2013
1 / 23
![Page 2: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/2.jpg)
Table of contents
1. MotivationWhat is scientific computing?What do we want from a language?
2. ScalaIntroductionFunctional programmingObject-orientedFeaturesPerformance
3. SummaryDoes Scala meet the requirements?Is Scala usable for scientific computing?
2 / 23
![Page 3: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/3.jpg)
MotivationWhat is scientific computing?
transdisciplinarymathematicsinformaticsfield of application
use of computers to analyze and solve scientific problemscomputer simulationnumerical computationsdata analysiscomputational optimization (HPC)
→ way to obtain knowledge apart from experiment
3 / 23
![Page 4: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/4.jpg)
MotivationWhat do we want from a language?
Must-havesfast and easy prototypinghigh performancelow memory usagesupport of
parallel programmingmathematical calculations/expressionsgraphic plotting
Nice-to-havesnative parallel programming supportportablefree licenseactive community
4 / 23
![Page 5: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/5.jpg)
ScalaIntroduction
italian for stairwayscalable language
under BSD licensecreated by Martin Odersky
german computer scientistprofessor in the programming reasearch group atSwiss Federal Institute of Technology in Lausannedeveloper of the current version of javac
history in a nuthsell2001: project started2004: first version on the java plattform2006: version 2.02011: launch of Typesafe Inc.⇒ commercial support, services and training for Scala2013: latest version 2.10.3
5 / 23
![Page 6: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/6.jpg)
ScalaIntroduction
What is Scala?programming language, which extends java⇒ any existing java library can be used
Scala source code Java byte code JVMscalac scala
+ scala-compiler.jarjava + scala-core jarsjava
also usable as interactive shell
hybrid language:functionalobject-oriented
6 / 23
![Page 7: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/7.jpg)
ScalaFunctional programming
based on the lambda calculus → formal system in logic and cs fromthe 1930severything is a function (esp. values are 0-ary functions)results only depend on input parametersno side effectsavoid reuse of variables
⇒ treat functions like mathematical functionse.g. x1 = x + 1 instead of x = x + 1
7 / 23
![Page 8: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/8.jpg)
ScalaFunctional programming
based on the lambda calculus → formal system in logic and cs fromthe 1930severything is a function (esp. values are 0-ary functions)results only depend on input parametersno side effectsavoid reuse of variables
⇒ treat functions like mathematical functionse.g. x1 = x + 1 instead of x = x + 1
7 / 23
![Page 9: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/9.jpg)
ScalaFunctional programming
common way: code depends on how to do it
def sumOfEquals(xs: List[Int]): Int = {var sum = 0
for (x <- xs)if (x%2 == 0)
sum += xsum
}
functional way: code depends on what to do
def sumOfEquals(xs: List[Int]) = xs filter{_%2 == 0} sum
8 / 23
![Page 10: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/10.jpg)
ScalaFunctional programming
common way: code depends on how to do it
def sumOfEquals(xs: List[Int]): Int = {var sum = 0
for (x <- xs)if (x%2 == 0)
sum += xsum
}
functional way: code depends on what to do
def sumOfEquals(xs: List[Int]) = xs filter{_%2 == 0} sum
8 / 23
![Page 11: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/11.jpg)
ScalaFunctional programming features in Scala
first-class and higher-order → functions as parameter and return value
currying
def addInts(x: Int, y: Int, z: Int) = x + y + z // uncurrieddef addInts(x: Int)(y: Int)(z: Int) = x + y + z // curried
lazy evaluation
var a = 2lazy val b = 8 * aa = 3println(b) // Evaluates to 24 instead of 16
tail recursion → last command is recursion callpattern matching→ likewise switch command in java
9 / 23
![Page 12: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/12.jpg)
ScalaFunctional programming features in Scala
first-class and higher-order → functions as parameter and return valuecurrying
def addInts(x: Int, y: Int, z: Int) = x + y + z // uncurrieddef addInts(x: Int)(y: Int)(z: Int) = x + y + z // curried
lazy evaluation
var a = 2lazy val b = 8 * aa = 3println(b) // Evaluates to 24 instead of 16
tail recursion → last command is recursion callpattern matching→ likewise switch command in java
9 / 23
![Page 13: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/13.jpg)
ScalaFunctional programming features in Scala
first-class and higher-order → functions as parameter and return valuecurrying
def addInts(x: Int, y: Int, z: Int) = x + y + z // uncurrieddef addInts(x: Int)(y: Int)(z: Int) = x + y + z // curried
lazy evaluation
var a = 2lazy val b = 8 * aa = 3println(b) // Evaluates to 24 instead of 16
tail recursion → last command is recursion callpattern matching→ likewise switch command in java
9 / 23
![Page 14: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/14.jpg)
ScalaFunctional programming features in Scala
first-class and higher-order → functions as parameter and return valuecurrying
def addInts(x: Int, y: Int, z: Int) = x + y + z // uncurrieddef addInts(x: Int)(y: Int)(z: Int) = x + y + z // curried
lazy evaluation
var a = 2lazy val b = 8 * aa = 3println(b) // Evaluates to 24 instead of 16
tail recursion → last command is recursion call
pattern matching→ likewise switch command in java
9 / 23
![Page 15: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/15.jpg)
ScalaFunctional programming features in Scala
first-class and higher-order → functions as parameter and return valuecurrying
def addInts(x: Int, y: Int, z: Int) = x + y + z // uncurrieddef addInts(x: Int)(y: Int)(z: Int) = x + y + z // curried
lazy evaluation
var a = 2lazy val b = 8 * aa = 3println(b) // Evaluates to 24 instead of 16
tail recursion → last command is recursion callpattern matching→ likewise switch command in java
9 / 23
![Page 16: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/16.jpg)
ScalaObject-oriented
pure object-oriented language: all values are objects
scala.Any
scala.AnyVal scala.AnyRef
scala.ScalaObjectscala.Double
scala.Float
scala.Int
(java.lang.Object)
Scala classes
Java classes(other value types)
⇒ functions are objects⇒ way to implement function pointers: val fp = myFunc _⇒ Unified Types (demo)
10 / 23
![Page 17: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/17.jpg)
ScalaObject-oriented
pure object-oriented language: all values are objects
scala.Any
scala.AnyVal scala.AnyRef
scala.ScalaObjectscala.Double
scala.Float
scala.Int
(java.lang.Object)
Scala classes
Java classes(other value types)
⇒ functions are objects⇒ way to implement function pointers: val fp = myFunc _⇒ Unified Types (demo)
10 / 23
![Page 18: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/18.jpg)
ScalaObject-oriented
pure object-oriented language: all values are objects
scala.Any
scala.AnyVal scala.AnyRef
scala.ScalaObjectscala.Double
scala.Float
scala.Int
(java.lang.Object)
Scala classes
Java classes(other value types)
⇒ functions are objects
⇒ way to implement function pointers: val fp = myFunc _⇒ Unified Types (demo)
10 / 23
![Page 19: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/19.jpg)
ScalaObject-oriented
pure object-oriented language: all values are objects
scala.Any
scala.AnyVal scala.AnyRef
scala.ScalaObjectscala.Double
scala.Float
scala.Int
(java.lang.Object)
Scala classes
Java classes(other value types)
⇒ functions are objects⇒ way to implement function pointers: val fp = myFunc _
⇒ Unified Types (demo)
10 / 23
![Page 20: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/20.jpg)
ScalaObject-oriented
pure object-oriented language: all values are objects
scala.Any
scala.AnyVal scala.AnyRef
scala.ScalaObjectscala.Double
scala.Float
scala.Int
(java.lang.Object)
Scala classes
Java classes(other value types)
⇒ functions are objects⇒ way to implement function pointers: val fp = myFunc _⇒ Unified Types (demo)
10 / 23
![Page 21: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/21.jpg)
ScalaObject-oriented
objects are instances of classes (and traits)
class mySum(a: Int, b: Int) extends Compare {val c = a + bdef isGreater(i: Any) : Boolean = c > i.asInstanceOf[Int]
}
Listing: parameterized constructor arguments
trait Compare {def isGreater(obj: Any) : Booleandef isNotGreater(obj: Any) : Boolean = !isGreater(obj)
}
Listing: partially implemented trait
⇒ traits combine advantages of Java’s interfaces and abstract classes
11 / 23
![Page 22: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/22.jpg)
ScalaObject-oriented
objects are instances of classes (and traits)
class mySum(a: Int, b: Int) extends Compare {val c = a + bdef isGreater(i: Any) : Boolean = c > i.asInstanceOf[Int]
}
Listing: parameterized constructor arguments
trait Compare {def isGreater(obj: Any) : Booleandef isNotGreater(obj: Any) : Boolean = !isGreater(obj)
}
Listing: partially implemented trait
⇒ traits combine advantages of Java’s interfaces and abstract classes
11 / 23
![Page 23: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/23.jpg)
ScalaObject-oriented
objects are instances of classes (and traits)
class mySum(a: Int, b: Int) extends Compare {val c = a + bdef isGreater(i: Any) : Boolean = c > i.asInstanceOf[Int]
}
Listing: parameterized constructor arguments
trait Compare {def isGreater(obj: Any) : Booleandef isNotGreater(obj: Any) : Boolean = !isGreater(obj)
}
Listing: partially implemented trait
⇒ traits combine advantages of Java’s interfaces and abstract classes11 / 23
![Page 24: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/24.jpg)
ScalaObject-oriented → Natively supported design patterns
e.g. Singleton through object definition
object Presentation {val maxDuration = 40def remainingTime(time: Int): Int= { maxDuration - time }
}
class Presentation {var time = 0def remainingTime(): Int= { Presentation.remainingTime(time) }
}
Listing: companion object/class
elements in object can be thought of as static
elements in class are dynamically instantiated
12 / 23
![Page 25: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/25.jpg)
ScalaObject-oriented → Natively supported design patterns
e.g. Singleton through object definition
object Presentation {val maxDuration = 40def remainingTime(time: Int): Int= { maxDuration - time }
}
class Presentation {var time = 0def remainingTime(): Int= { Presentation.remainingTime(time) }
}
Listing: companion object/class
elements in object can be thought of as static
elements in class are dynamically instantiated
12 / 23
![Page 26: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/26.jpg)
ScalaObject-oriented → Natively supported design patterns
e.g. Singleton through object definition
object Presentation {val maxDuration = 40def remainingTime(time: Int): Int= { maxDuration - time }
}
class Presentation {var time = 0def remainingTime(): Int= { Presentation.remainingTime(time) }
}
Listing: companion object/class
elements in object can be thought of as static
elements in class are dynamically instantiated12 / 23
![Page 27: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/27.jpg)
ScalaFeatures
x method y is syntactic sugar for x.method(y)⇒ e.g. x < y stands for x.<(y)
scala-core is full of little helpers, e.g.
> List[Int](1,2,4,5).mkString("[[", "--", "]]")> [[1--2--4--5]]
choosen features:parameter listsfor comprehensionsparallel programmingtype enrichment
13 / 23
![Page 28: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/28.jpg)
ScalaFeatures
x method y is syntactic sugar for x.method(y)⇒ e.g. x < y stands for x.<(y)
scala-core is full of little helpers, e.g.
> List[Int](1,2,4,5).mkString("[[", "--", "]]")> [[1--2--4--5]]
choosen features:parameter listsfor comprehensionsparallel programmingtype enrichment
13 / 23
![Page 29: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/29.jpg)
ScalaFeatures
x method y is syntactic sugar for x.method(y)⇒ e.g. x < y stands for x.<(y)
scala-core is full of little helpers, e.g.
> List[Int](1,2,4,5).mkString("[[", "--", "]]")> [[1--2--4--5]]
choosen features:parameter listsfor comprehensionsparallel programmingtype enrichment
13 / 23
![Page 30: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/30.jpg)
ScalaFeatures → Parameter lists
default parameter
def addInts(x: Int = 5, y: Int = 1, z: Int= 2) = x + y + z
named parameters
> addInts(y = 2, z = 1, x = 5)}
open ended parameter lists
def openEndParamList(vals: Int*) = vals.foreach(println)
14 / 23
![Page 31: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/31.jpg)
ScalaFeatures → Parameter lists
default parameter
def addInts(x: Int = 5, y: Int = 1, z: Int= 2) = x + y + z
named parameters
> addInts(y = 2, z = 1, x = 5)}
open ended parameter lists
def openEndParamList(vals: Int*) = vals.foreach(println)
14 / 23
![Page 32: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/32.jpg)
ScalaFeatures → Parameter lists
default parameter
def addInts(x: Int = 5, y: Int = 1, z: Int= 2) = x + y + z
named parameters
> addInts(y = 2, z = 1, x = 5)}
open ended parameter lists
def openEndParamList(vals: Int*) = vals.foreach(println)
14 / 23
![Page 33: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/33.jpg)
ScalaFeatures → For comprehensions
Martin Odersky: Scala’s for expression is a Swiss army knife ofIteration.extreme powerful iteration tool ⇒ more than simple loopsiterate over objectse.g. loop with filter
for {i <- 1 to 6j <- 1 to 6k <- 1 to 3if (i % 2 == 0)if (j % 2 != 0)} println(i + " "+ j + " " + k)
}
15 / 23
![Page 34: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/34.jpg)
ScalaFeatures → Type enrichment
extend existing libraries → scalable language
object MyIntegerExtensions {implicit class IntPredicates(i: Int) {
def isGreaterThanZero = i > 0}
}
> import MyIntegerExtensions._> 3.isGreaterThanZero
16 / 23
![Page 35: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/35.jpg)
ScalaFeatures → Parallel programming
recall: possibility to use java libraries⇒ usability of established OpenMP and MPI implementations
(e.g. JaMP and mpiJava)
own implementation: actors (from Erlang)thread instance with a mailbox ⇒ communication via messagesno shared but private memorybehavior depends on message: send message, create new actors, changeown behavioruntil version 2.10.0 part of the core ⇒ now: Akka framework
17 / 23
![Page 36: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/36.jpg)
ScalaFeatures → Parallel programming
recall: possibility to use java libraries⇒ usability of established OpenMP and MPI implementations
(e.g. JaMP and mpiJava)own implementation: actors (from Erlang)
thread instance with a mailbox ⇒ communication via messagesno shared but private memorybehavior depends on message: send message, create new actors, changeown behavioruntil version 2.10.0 part of the core ⇒ now: Akka framework
17 / 23
![Page 37: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/37.jpg)
ScalaPerformance
benchmark: 64 bit, quadcore,ubuntu osmessuring units:
timememory usagecode length
compare Scala with Java,Python, Fortran, C++benchmark programms arecommon problems of maths andcomputer science
k-nucleotideregex-dnafannkuch-reduxpidigitsspectral-normmandelbrotreverse-complementn-bodyfastafasta-reduxbinary-trees
18 / 23
![Page 38: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/38.jpg)
ScalaPerformance
19 / 23
![Page 39: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/39.jpg)
SummaryDoes Scala meet the requirements? → Pro
Must-havesX fast and easy prototyping→ interactive shell, native design patterns, helper constructs, etc.• support of
X parallel programmingX mathematical calculations/expressionsX graphic plotting→ all java libraries can be used
Nice-to-havesX portable → runs on JVMX free license → open source (BSD)X active community → growing / nearly daily update of the doc
Other aspects• hybrid paradigm: functional + pure object-oriented
20 / 23
![Page 40: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/40.jpg)
SummaryDoes Scala meet the requirements? → Pro
Must-havesX fast and easy prototyping→ interactive shell, native design patterns, helper constructs, etc.• support of
X parallel programmingX mathematical calculations/expressionsX graphic plotting→ all java libraries can be used
Nice-to-havesX portable → runs on JVMX free license → open source (BSD)X active community → growing / nearly daily update of the doc
Other aspects• hybrid paradigm: functional + pure object-oriented
20 / 23
![Page 41: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/41.jpg)
SummaryDoes Scala meet the requirements? → Pro
Must-havesX fast and easy prototyping→ interactive shell, native design patterns, helper constructs, etc.• support of
X parallel programmingX mathematical calculations/expressionsX graphic plotting→ all java libraries can be used
Nice-to-havesX portable → runs on JVMX free license → open source (BSD)X active community → growing / nearly daily update of the doc
Other aspects• hybrid paradigm: functional + pure object-oriented
20 / 23
![Page 42: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/42.jpg)
SummaryDoes Scala meet the requirements? → Contra
Must-haves× high performance → JVM + Scala overhead× low memory usage (but at least lower than in Java)
Nice-to-haves× native parallel programming support
Other aspects• eclipse + Scala = extreme slow (well-known problem)• very slow compiler• quite steep learning curve ⇒ a language for professionals• possibility to write extreme unreadable code
21 / 23
![Page 43: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/43.jpg)
SummaryDoes Scala meet the requirements? → Contra
Must-haves× high performance → JVM + Scala overhead× low memory usage (but at least lower than in Java)
Nice-to-haves× native parallel programming support
Other aspects• eclipse + Scala = extreme slow (well-known problem)• very slow compiler• quite steep learning curve ⇒ a language for professionals• possibility to write extreme unreadable code
21 / 23
![Page 44: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/44.jpg)
SummaryDoes Scala meet the requirements? → Contra
Must-haves× high performance → JVM + Scala overhead× low memory usage (but at least lower than in Java)
Nice-to-haves× native parallel programming support
Other aspects• eclipse + Scala = extreme slow (well-known problem)• very slow compiler• quite steep learning curve ⇒ a language for professionals• possibility to write extreme unreadable code
21 / 23
![Page 45: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/45.jpg)
SummaryIs Scala usable for scientific computing?
Must-havesX fast and easy prototyping× high performance× low memory usage• support of
X parallel programmingX mathematical calculations/expressionsX graphic plotting
Nice-to-haves× native parallel programming supportX portableX free licenseX active community
⇒ Result: Usability of Scala depends on weighting of the requirements22 / 23
![Page 46: New Scala - the scalable languagehpac.cs.umu.se/teaching/sem-lsc-13/Scala.pdf · 2014. 1. 18. · Scala - the scalable language DanielPloetzerandEricHeder Seminaronscientificlanguages](https://reader035.fdocuments.in/reader035/viewer/2022070109/6044831cefeccf5db14d225c/html5/thumbnails/46.jpg)
Sources
http://www.scala-lang.org/http://www.scala-lang.org/docu/files/ScalaReference.pdfhttp://www.scalatutorial.de/http://benchmarksgame.alioth.debian.org/http://pavelfatin.com/design-patterns-in-scala/http://gleichmann.wordpress.com/2010/11/08/functional-scala-functions-as-objects-as-functions/
23 / 23