Scala introduction
-
Upload
zvikapika -
Category
Technology
-
view
2.974 -
download
0
Transcript of Scala introduction
![Page 1: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/1.jpg)
15-May-11
By : Zvika Markfeld Tikal Knowledge
Scala TCE
Introduction to The Scala Language
Developer Productivity Redefined
![Page 2: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/2.jpg)
WWW.TIKALK.COM15-May-11
Agenda
IntroductionLanguage FeaturesEcosphereQ & A
![Page 3: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/3.jpg)
15-May-11
IntroductionHistory, Motivation, Whos & Whos
![Page 4: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/4.jpg)
WWW.TIKALK.COM15-May-11
What is Scala?
General purpose, compiled languageRelatively new (2003)Designed to express common programming patterns
ConciselyElegantlyIn a type-safe way
Originally intended to run on both the JVM and the CLRAfter some time, the .NET implementation fell asideLater on, thanks to a grant from Microsoft, work resumed
Resembles dynamic languages such as Python / RubyCombines OO and functional languages features
![Page 5: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/5.jpg)
WWW.TIKALK.COM15-May-11
Personal Issues
Created by Martin Odersky, a computer scientist at EPFL in Lausanne, Switzerland.
Co-designer of Java's generics, and the original author of the current javac
James Gosling:"If I needed to choose a language other than Java, it would be Scala"
James Strachan (Groovy creator) has left Groovy and now advocates Scala
"If I had known Scala when I created Groovy, I would have probably not created it at all "
![Page 6: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/6.jpg)
Scala is a statically-typed language, unlike Ruby or PythonBetter IDE assistance
Code completionRefactoring supportDeveloper productivity enhanced
Safer code via compile-time checksBetter performanceEnhancing developer productivityNo need to wait for JSR-292's invokedynamic for performance boost
As in Groovy, JRuby, Jython, …Code size is typically reduced by a factor of 2-3 compared to Java
WWW.TIKALK.COM15-May-11
Static Typing
![Page 7: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/7.jpg)
The Scala compiler generates Java bytecode 100% compatible with the JRESeamless use Java objects in Scala and vice versaDeploy Scala applications to any JEE container / AndroidReuse existing tools, servers, librariesKeep existing knowledge & workersMake the change gradually
Java -> Jala -> Scala
WWW.TIKALK.COM15-May-11
Compatibility
![Page 8: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/8.jpg)
WWW.TIKALK.COM15-May-11
What Went Wrong with Java?
Oh, quite a few things:
Java is over-verboseStopped evolvingLong adoption of new development idioms
Functional programming, for instance
Political / Marketing Issues (ok, Oracle)"Learning Java stunts your intellectual growth as a developer" [at least, some would say]
![Page 9: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/9.jpg)
WWW.TIKALK.COM15-May-11
Why Prefer Scala Over Java ?
Scala corrects many of Java's mistakes:
Everything is an ObjectType inference
var dummy= Map[String,Int]()True Mixins, Traits, Duck TypingFunctional programming language conceptsFresh start, no backward compatibility constraints
Generics, anyone?More compact
No getters, setters, equals(), hashCode(), toString(),...
![Page 10: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/10.jpg)
Allows using new idioms and ways of programmingMostly just too laborious to do in Java
Less LOC doing the same amount of workBetter readability
Never use anonymous inner classes againBut still, leverage your Java code from ScalaProductivity benefits
Looks like a dynamically typed languageWhile actually being 100% statically typed
WWW.TIKALK.COM15-May-11
...Scala over Java
![Page 11: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/11.jpg)
WWW.TIKALK.COM15-May-11
Polyg-wha?
It is common advice that you should learn multiple programming languagesScala integrates functional programming with OO programmingScala allows you to gradually learn functional techniques while still being able to use familiar object-oriented techniques
Useful when migrating from JavaLearning Scala may be easier than learning non-OO functional languages
![Page 12: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/12.jpg)
WWW.TIKALK.COM15-May-11
Functional Concepts in Scala
Functions are first-class valuesConvenient closure syntaxLazy evaluationPattern matchingTailcall optimizationPowerful generics
(*) Still, Scala feels less functional because its core syntax is largely in the tradition of Java, not Lisp, ML, or Haskell, the three most prominent ancestors of functional language families)
![Page 13: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/13.jpg)
WWW.TIKALK.COM15-May-11
Performance
On par with JavaSome features of Scala can produce faster code
SpecializationInliningLaziness
...While other features makes it slower
![Page 14: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/14.jpg)
15-May-11
Language FeaturesWhat's all the fuss about, then?
![Page 15: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/15.jpg)
WWW.TIKALK.COM15-May-11
Higher Order Functions
Functions are first-class objectsCan be assigned to variablesPassed to other functionsSame as any other data type
Code made more concise and readable...not quite as concise as in some other functional languagesBut much, much better than the equivalent Java code
![Page 16: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/16.jpg)
WWW.TIKALK.COM15-May-11
Side Effects Problem
In OO languages, objects may contain state - mutable instance dataWhen a method uses mutable data, it now has side effects
Reading or writing any state which is not an incoming or outgoing argument
Functions with side effectsAre harder to testHarder to reason aboutIn general harder to get right
As more side effects are added, they accumulate, making the composed function even more difficult to get right
![Page 17: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/17.jpg)
WWW.TIKALK.COM15-May-11
Immutable Values
Using immutable values...Makes it easier to write code without side effectsReduces the likelihood of concurrency bugs Can make code easier to read and understand
Scala separates the concept of a val from a var:A val in Scala is like a final variable in JavaA var is a regular variableNo "default" mutable - forces you to think about that choice
Scala also has support for immutable data structuresWhen you add to immutable Map/List/Set in Scala, you get a new object: Old keys and values are not copied, but shared
![Page 18: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/18.jpg)
WWW.TIKALK.COM15-May-11
Referential Transparency
The Imperative Way: Use variables (mutable data) and loops
The Functional Way:Recursion & higher order functions, without mutable data
Referentially transparent -> DeterministicCalling a function with a specific set of values as arguments will always return exactly the same value
![Page 19: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/19.jpg)
The Java thread/monitor model works quite well...For a small number of threads Dealing with a very small number of shared objects
But a synchronized method isn't referentially transparent!Scala supports the Java approach, but it also provides another model for better scale-up: the Actor model
Message-queue mechanism borrowed from ErlangA language designed for high concurrency
WWW.TIKALK.COM15-May-11
Actor Concurrency
![Page 20: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/20.jpg)
WWW.TIKALK.COM15-May-11
Actor Mechanics
An Actor is responsible for maintaining data shared by multiple threadsOnly the Actor is allowed to access that dataThreads communicate with the Actor by sending messages to itThe Actor can respond by sending messages back
If the other thread is an ActorTypically the messages are immutableEach Actor has a message inbox where incoming messages are queuedScala's Actor library handles the message transfers
The programmer does not have to deal with synchronization
![Page 21: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/21.jpg)
WWW.TIKALK.COM15-May-11
Actors Are Way Better
High-load programs often suffer from:Data corruption due to concurrent access.DeadlockResource bottleneck or starvation
Java's monitors alleviates the first problemScala Also takes care of the second
![Page 22: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/22.jpg)
WWW.TIKALK.COM15-May-11
Actor Libraries
There are 6-7 libraries in Java that implement the actor model (and 6 in Scala)
Looking for a place to Start? Try AkkaScala has no benefit, other than being more inherently focused on distributed/parallel programming
Version 2.9.0 has parallel collections, actors are built inScala research group got a 2.3M Euro grant recently to develop a simpler programming model for parallel apps
![Page 23: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/23.jpg)
15-May-11
Scala EcosphereMake Or Break
![Page 24: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/24.jpg)
WWW.TIKALK.COM15-May-11
Companies that Use Scala
There are more - http://www.scala-lang.org/node/1658
![Page 25: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/25.jpg)
WWW.TIKALK.COM15-May-11
Scala Frameworks
Akka:an alternative approach to JEE, with distribution support and several alternatives for concurrency modelsLift:Full stack for web applicationsScalate:Templating frameworkPlay framework: Moving to Scalaflockdb:a distributed fault tolerant graph database by twitterspecs, scalatest, scalacheck:testing frameworks for scala that go beyong junit
![Page 26: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/26.jpg)
WWW.TIKALK.COM15-May-11
Build / Development Environment
sbt:A build tool that uses Scala for its build files and has great integration with various frameworks
maven-scala-plugin:supports compilation, testing, documentation
IDE Support:Eclipse, IntelliJ, NetBeans
![Page 27: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/27.jpg)
WWW.TIKALK.COM15-May-11
Scala Job Trends
![Page 28: Scala introduction](https://reader033.fdocuments.us/reader033/viewer/2022052618/554f3be1b4c905471e8b4a5b/html5/thumbnails/28.jpg)
15-May-11
Q & AIf you don't ask now -
you can always ask later!