Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Few Things on Scala

Few Things on Scala

Original presentation at Computational Linguistics Lab, Nara Institute of Science and Technology.

Sorami Hisamoto

July 09, 2013
Tweet

More Decks by Sorami Hisamoto

Other Decks in Programming

Transcript

  1. Few things on Scala
    ͍ΒͪͷͨΊͷ4DBMBೖ໳
    Image: typesafe.com
    Sorami Hisamoto
    09 July 2013 @ PG

    View Slide

  2. For me to digest, and to introduce some of the contents from
    l'VODUJPOBM1SPHSBNNJOH1SJODJQMFTJO4DBMBz
    a marvelous course by Martin Odersky (plus alpha).

    View Slide

  3. For me to digest, and to introduce some of the contents from
    l'VODUJPOBM1SPHSBNNJOH1SJODJQMFTJO4DBMBz
    a marvelous course by Martin Odersky (plus alpha).
    https://www.coursera.org/course/progfun

    View Slide

  4. For me to digest, and to introduce some of the contents from
    l'VODUJPOBM1SPHSBNNJOH1SJODJQMFTJO4DBMBz
    a marvelous course by Martin Odersky (plus alpha).
    https://www.coursera.org/course/progfun
    Disclaimar
    I’m just a novice.
    Watch the lectures by yourself!

    View Slide

  5. “Scala is so cool that
    nobody knows it.”
    Image:
    - Cal Henderson
    http://www.youtube.com/watch?v=i6Fr65PFqfk

    View Slide

  6. “I call Scala an old wine in a new bottle.”
    Image:
    - Venkat Subramaniam
    http://www.youtube.com/watch?v=LH75sJAR0hc

    View Slide

  7. Image:
    Programming Paradigms

    View Slide

  8. Image:
    Programming Paradigms
    ‣ Imperative ໋ྩܕ
    ‣ Functional ؔ਺ܕ
    ‣ Logic ࿦ཧϓϩάϥϛϯά


    View Slide

  9. Image:
    Programming Paradigms
    ‣ Imperative ໋ྩܕ
    ‣ Functional ؔ਺ܕ
    ‣ Logic ࿦ཧϓϩάϥϛϯά

    Orthogonal to
    Object Oriented
    Programming.

    View Slide

  10. Image:
    ij
    There's a strong correspondence between
    Imperative Programs and Computers.
    Memory cells, load/store instructions, etc...

    View Slide

  11. Image:
    ij
    There's a strong correspondence between
    Imperative Programs and Computers.
    Memory cells, load/store instructions, etc...
    Pure imperative programming 

    is limited by the
    "Von Neumann" bottleneck.

    View Slide

  12. Image:
    How can we avoid
    conceptualizing programs
    word by word?

    View Slide

  13. Image:
    How can we avoid
    conceptualizing programs
    word by word?
    High-level abstractions:
    ideally, develop theories of
    collections, shapes, strings, ...

    View Slide

  14. Image:
    How can we avoid
    conceptualizing programs
    word by word?
    High-level abstractions:
    ideally, develop theories of
    collections, shapes, strings, ...
    Let’s concentrate on
    defining theories for operators 

    expressed as functions.

    View Slide

  15. Image:
    Theory: data types & operations.
    Normally, a theory does not describe mutations.

    View Slide

  16. Image:
    Theory: data types & operations.
    Normally, a theory does not describe mutations.
    e.g. (a*x + b) + (c*x + d) = (a+c)*x + (b+d)

    View Slide

  17. Image:
    Functional
    Programming
    Restricted sense:
    programming without mutable variables, assignments,
    loops, and other imperative control structures.
    Wider sense:
    Focusing on the functions.

    View Slide

  18. Image:
    ‣ Assignment-less


    View Slide

  19. Image:
    Don't need to worry about
    thread safety.
    ‣ Assignment-less


    View Slide

  20. Image:
    Don't need to worry about
    thread safety.
    ‣ No side effects

    ‣ Assignment-less


    View Slide

  21. Image:
    Don't need to worry about
    thread safety.
    ‣ No side effects
 Multiple calls. 

    Support concurrency.
    ‣ Assignment-less


    View Slide

  22. Image:
    Don't need to worry about
    thread safety.
    ‣ No side effects

    ‣ Referential transparency

    Multiple calls. 

    Support concurrency.
    ‣ Assignment-less


    View Slide

  23. Image:
    Don't need to worry about
    thread safety.
    ‣ No side effects

    ‣ Referential transparency

    Multiple calls. 

    Support concurrency.
    Can move code up n' down. 

    Can distribute to multicore.
    ‣ Assignment-less


    View Slide

  24. Image:
    Don't need to worry about
    thread safety.
    ‣ No side effects

    ‣ Referential transparency

    Multiple calls. 

    Support concurrency.
    Can move code up n' down. 

    Can distribute to multicore.
    ‣ Functions are first-class, ...
    ‣ Assignment-less


    View Slide

  25. Why it matters?
    Image:

    View Slide

  26. Why it matters? Brevity.
    Easier to debug.
    Concurrency.
    Image:

    View Slide

  27. Image:
    ‣ 1959 Lisp
    ‣ 1975-77 ML, FP, Scheme
    ‣ 1978 Smalltalk
    ‣ 1986 Standard ML
    ‣ 1990 Haskell, Earlang
    ‣ 1999 XSLT
    ‣ 2000 OCaml
    ‣ 2003 Scala, XQuery
    ‣ 2005 F#
    ‣ 2007 Clojure

    View Slide

  28. Image:
    http://upload.wikimedia.org/wikipedia/commons/8/85/Scala_logo.png

    View Slide

  29. ‣ Includes full support of functional programming.

    Currying, pattern matching, lazy evaluation, tail recursion, immutability, etc.
    ‣ Static typing.

    “In Java, when they said typing they meant your fingers.”

    “You type less, because it is more typed. 

    In a language that is typed less, you type more.”

    - V. Subramaniam http://www.youtube.com/watch?v=LH75sJAR0hc
    Image:
    OO + FP

    View Slide

  30. Image:
    Image:
    Used in Twitter, LinkedIn, Foursquare,
    Sony, Amazon, Facebook, NASA, ...

    View Slide


  31. ... if someone had shown me
    the Programming in Scala book
    [...] back in 2003
    I'd probably have never created Groovy.

    - James Strachan, the creator of Groovy

    http://macstrac.blogspot.jp/2009/04/

    scala-as-long-term-replacement-for.html

    View Slide


  32. No other language on the JVM
    seems as capable of being a
    ‘replacement of Java’ as Scala, and
    the momentum behind Scala is now
    unquestionable.

    - Charles Nutter, the lead developer of JRuby
    http://blog.headius.com/2009/04/future-part-one.html

    View Slide


  33. If I were to pick a language to
    use today other than Java,
    it would be Scala.

    - James Gosling, the father of Java
    Image:

    View Slide

  34. Sounds good, but it is also ...
    Image:

    View Slide

  35. Sounds good, but it is also ...
    a complex language.
    a ‘kitchen sink language’.
    Image:

    View Slide


  36. The most depressing thing on Scala is [...]
    most people pick up Scala as
    ‘Java with more concise syntax’.
    ”

    - James Gosling
    https://twitter.com/akarazniewicz/status/11353944609521664

    View Slide

  37. Anyway, let’s get started.
    Image:

    View Slide

  38. Image:
    “Tool Setup” page in Odersky’s course page.

    https://class.coursera.org/progfun-002/wiki/view?page=ToolsSetup


    View Slide

  39. On IDEs,“worksheet” might be helpful.
    Image:

    View Slide

  40. On IDEs,“worksheet” might be helpful.
    Image:

    View Slide

  41. giter8
    A command line tool to apply
    templates defined on github.
    https://github.com/n8han/giter8
    sbt
    A build tool.
    http://www.scala-sbt.org/
    Image:

    View Slide

  42. Image:
    Natural Language Processing
    & Machine Learning?

    View Slide

  43. Image:
    Scalala - developed by Daniel Ramage, 

    who used to be under Chris Manning.
    Natural Language Processing
    & Machine Learning?

    View Slide

  44. Image:
    Scalala - developed by Daniel Ramage, 

    who used to be under Chris Manning.
    Other libraries: Breeze, OptiML, FACTORIE, and more.
    Natural Language Processing
    & Machine Learning?

    View Slide

  45. Image:
    Scalala - developed by Daniel Ramage, 

    who used to be under Chris Manning.
    Other libraries: Breeze, OptiML, FACTORIE, and more.
    “Scala and Machine Learning with Andrew McCallum”

    http://www.youtube.com/watch?v=DkRLTToCw-0
    Natural Language Processing
    & Machine Learning?

    View Slide

  46. Image:
    Scalala - developed by Daniel Ramage, 

    who used to be under Chris Manning.
    Other libraries: Breeze, OptiML, FACTORIE, and more.
    “Scala and Machine Learning with Andrew McCallum”

    http://www.youtube.com/watch?v=DkRLTToCw-0
    NAACL2013 “Tagger in 2hrs” paper - implementation in Scala.

    https://github.com/dhgarrette/low-resource-pos-tagging-2013
    Natural Language Processing
    & Machine Learning?

    View Slide

  47. Some Examples
    Image:

    View Slide

  48. First, some brevity.
    Image:

    View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. You can drop the things that are obvious.

    View Slide

  53. View Slide

  54. View Slide

  55. ɾ
    ɾ
    ɾ

    View Slide

  56. “for” is powerful in Scala.
    (For more usage, refer to “Programming in Scala” Chapter 7.)
    ɾ
    ɾ
    ɾ

    View Slide

  57. Square roots with
    Newton's method
    Image:

    View Slide

  58. ‣ To compute sqrt(x),
    ‣ Start with initial estimate y (say, 1).
    ‣ Repeatedly improve the estimate 

    by taking the mean of y and x/y.
    Image:

    View Slide

  59. View Slide

  60. Iterate until
    the guess is 

    good enough.

    View Slide

  61. Iterate until
    the guess is 

    good enough.
    Improve the guess

    by taking mean of

    x and guess.

    View Slide

  62. Image:
    Currying

    View Slide

  63. View Slide

  64. Note that
    a and b are
    unchanged.

    View Slide

  65. Note that
    a and b are
    unchanged.

    View Slide

  66. Note that
    a and b are
    unchanged.
    These are special cases of for different values of f .

    View Slide

  67. Note that
    a and b are
    unchanged.
    These are special cases of for different values of f .
    Can we factor out
    the common pattern?

    View Slide

  68. View Slide

  69. higher order
    function

    View Slide

  70. higher order
    function

    View Slide

  71. higher order
    function
    Or even better ...

    View Slide

  72. higher order
    function
    Or even better ...

    View Slide

  73. higher order
    function
    Or even better ...
    anonymous
    functions

    View Slide

  74. View Slide

  75. Function
    returning
    function.

    View Slide

  76. Function
    returning
    function.

    View Slide

  77. Function
    returning
    function.

    View Slide

  78. Function
    returning
    function.

    View Slide

  79. Function
    returning
    function.

    View Slide

  80. Function
    returning
    function.
    Currying
    Transforming a function
    that takes multiple arguments
    in such a way that
    it can be called as a chain of functions,
    each with a single argument.

    View Slide

  81. Finding
    Fixed Points
    Image:

    View Slide

  82. Image:
    Number x is called a fixed point of a function f
    if f(x) = x.

    View Slide

  83. Image:
    Number x is called a fixed point of a function f
    if f(x) = x.
    For some f, we can locate the fixed points
    by repetitive way:
    x, f(x), f(f(x)), f(f(f(x))), ...
    until the value does not vary anymore.

    View Slide

  84. View Slide

  85. Image:
    Now, sqrt(x) = y such that y*y = x .

    View Slide

  86. Image:
    Now, sqrt(x) = y such that y*y = x .
    Or, sqrt(x) = y such that y = x /y .

    View Slide

  87. Image:
    Now, sqrt(x) = y such that y*y = x .
    Or, sqrt(x) = y such that y = x /y .
    Consequently, sqrt(x) is a fixed point of y → x /y .

    View Slide

  88. View Slide

  89. Controls the oscillation.

    View Slide

  90. Rational Numbers
    ༗ཧ਺
    Image:

    View Slide

  91. Class

    View Slide

  92. Method

    View Slide

  93. Method

    View Slide

  94. ... and other things

    View Slide

  95. Operators

    View Slide

  96. Operators
    Relaxed identifiers.

    View Slide

  97. Operators
    Relaxed identifiers.

    View Slide

  98. Operators
    Relaxed identifiers.
    Precedence rules,
    just like the maths.

    View Slide

  99. Image:
    Binary Tree
    ೋ෼໦

    View Slide

  100. Image:
    (Time’s up)

    View Slide

  101. Image:
    (Time’s up)
    See Coursera week 3
    https://class.coursera.org/progfun-002/lecture/index
    - Class hierarchies
    - Polymorphism, etc.

    View Slide

  102. Some references
    for further study
    Image:

    View Slide

  103. “Why Scala?” Epic. Just watch it.

    Venkat Subramaniam. www.youtube.com/watch?v=LH75sJAR0hc

    Image:
    “Functional Programming Principles in Scala” A bliss online course.

    Martin Odersky. www.coursera.org/course/progfun

    Programming in Scala” The Bible, by the creator himself.

    Martin Odersky, Lex Spoon, & Bill Venners.

    Programming Scala” An O’Reilly book. First part publicly available online.

    Dean Wampler & Alex Payne. shop.oreilly.com/product/9780596155964.do

    “Pragmatic Real-World Scala” A nice overview presentation by Typesafe CTO.

    Jonas Bonér. www.slideshare.net/jboner/

    View Slide

  104. Image:
    END.
    Tanoshii
    desu kara

    View Slide