scala, your next programming languagemlewis/scalalinks/scalageneral.pdfscala, your next programming...
TRANSCRIPT
![Page 1: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/1.jpg)
Scala, Your Next Programming Language(or if it is good enough for Twitter, it is good enough for me)
WORLDCOMP 2011
By
Dr. Mark C. LewisTrinity University
![Page 2: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/2.jpg)
Disclaimer
● I am writing a Scala textbook that is under contract with CRC Press.
● I would do this tutorial anyway, just because I like Scala that much.
![Page 3: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/3.jpg)
Compiled Links
● http://www.cs.trinity.edu/~mlewis/ScalaLinks.html
● This is a collection of links for those who want more information on Scala.
![Page 4: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/4.jpg)
How I got into Scala
● Grad schools and type systems● Functional Programming and ML● Interest in X10 and Fortress
![Page 5: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/5.jpg)
Basics of Scala
● “Scalable Language”● Multi-Paradigm
● Productivity of scripting languages● Expressivity of functional languages● Scalability of standard OO languages● Speed of compiled, statically-typed languages
● All OO● Highly Functional● Static-typing with local type inference
![Page 6: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/6.jpg)
Too Complex?
● Reasons for perception● Scala is different● Functional isn't broadly known● Scalability → power
– Bloggers show “cool” examples
● Simpler in many ways● Uniform syntax
![Page 7: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/7.jpg)
Shorter Language Specification
Static Typed Language
Spec Length (pages)
Dynamic Typed Language
Spec Length (pages)
C 552 Common LISP 1153
C++ 1325 Ruby 341
C# 553 PHP 244
Java 684 JavaScript 252
VB.NET 597 Python 3.1 119
Scala 191 Scheme 50
F# 250
![Page 8: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/8.jpg)
Fewer Keywords
http://carlosqt.blogspot.com/2011/01/how-many-keywords-in-your-source-code.html
![Page 9: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/9.jpg)
Past Complaints
● Documentation● API● Books● Web resources
● Tools● Improved IDE support
● Support● Typesafe
![Page 10: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/10.jpg)
Current Challenges
● Compile Time● Smart, multipass compiler● Optimization in progress
● Binary Compatibility● Changes in traits require recompilation
● Uniform Style● Many paradigms● Need guidelines● Tools coming
![Page 11: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/11.jpg)
Jobs
![Page 12: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/12.jpg)
Language Intro
● General rules● All values are objects● Operators are methods● All expressions are valid statements● Almost everything is an expression
● Declarations● Begin with keyword
– val, var, def, type, class, object, trait
● Value parameters use ()● Type parameters use []
![Page 13: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/13.jpg)
Syntactic Sugar
● Semicolon inference● Newlines become semicolons when it fits● Explicit works too
● Operator notation● Leave off dot and parens● Methods with arity 0 or 1
![Page 14: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/14.jpg)
Usage Methods
● REPL for simple tests● Scripting for short programs
● Good for gluing things together
● Applications● Declare object with main● Model is much like Java
![Page 15: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/15.jpg)
Difference for Classes
● Take arguments● No body required● Code in body run at construction
● Special methods● Symbols● Property assignment● apply● update
● Case classes
![Page 16: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/16.jpg)
Object Declarations
● Creates singleton objects● No static in Scala● Companion objects
● Apply method commonly used for object construction
● No arguments● Can inherit
![Page 17: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/17.jpg)
Traits
● Not interfaces● Allow method implementations and data● No arguments● Can inherit from many● Call order is linearized● Key benefits
● Rich interfaces● Extension of supertypes
![Page 18: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/18.jpg)
Type Hierarchy
![Page 19: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/19.jpg)
Collections
● Rich collection libraries● Array, List, Set, Map, etc.● Multiple varieties
– Mutable/immutable
● Creation● Companion object methods
– fill, tabulate
● Higher-Order Methods● map, filter, foreach, …
● Views
● Streams
![Page 20: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/20.jpg)
Standard
![Page 21: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/21.jpg)
Immutable
![Page 22: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/22.jpg)
Mutable
![Page 23: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/23.jpg)
Match/Patterns
● Match is not just switch● Cases can be patterns and bind variables.● Examples of patterns
● Tuples● Array, List, etc.● RegEx● XML● much more
● No break
![Page 24: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/24.jpg)
For Expressions
● Not your normal for● Technically for-each● More options
● Multiple generators● Variable declarations● If guards● Patterns
● No break, continue, or goto
![Page 25: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/25.jpg)
Implicit Conversions
● “Pimp my Interface”● Strict rules
● Must be in scope● Only one applied
● Allows extension of● java.lang.String● Arrays● Any code you didn't write
![Page 26: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/26.jpg)
Useful Scripting
● scala.sys.process added in 2.9● Simple system calls● Piping between programs● Conditional calls● Allows Java library calls● Glue things together
![Page 27: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/27.jpg)
Regular Expressions
● Triple quote string literals● The r method on String● Work as a pattern● Combine with for loop
● Skip non-matches
![Page 28: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/28.jpg)
XML
● Literals● Pattern matching● Loads DOM● Xpath style searching
● \ for immediate contents● \\ for deep search● Use @ for properties
![Page 29: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/29.jpg)
Combinatorial Parsers
● CF grammar → parser● ^^ to specify return● Quick to parse trees
![Page 30: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/30.jpg)
Parallelism
● Full access to Java libs● Functional makes it easier
● Parallel collections● Added in 2.9● Call par method● Fast conversions, O(1)● Uses work stealing● Works with for loops
![Page 31: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/31.jpg)
More Parallel
● Actors● Communicate through messages● Single threaded in an actor● Scala Actors● Akka
![Page 32: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/32.jpg)
DSLs
● Libraries look like language features● Pass-by-name semantics● Use implicits for built-in types● Can use combinatorial parsers
![Page 33: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/33.jpg)
Web Frameworks
● Lift● Written for Scala● Different approach
● Play!● Also for Java● Scala version uses Scala idioms
![Page 34: Scala, Your Next Programming Languagemlewis/ScalaLinks/ScalaGeneral.pdfScala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP](https://reader030.vdocuments.us/reader030/viewer/2022041016/5ec97dcfb216631abf278578/html5/thumbnails/34.jpg)
Conclusions
● Get most of the best of all worlds● Less boiler plate● Static type safety and speed● High expressivity
● Keep current JVM functionality● Easier parallel● High level libraries
● Look like language features● Easy to use● DSLs