$30 off During Our Annual Pro Sale. View Details »

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
  2. For me to digest, and to introduce some of the

    contents from l'VODUJPOBM1SPHSBNNJOH1SJODJQMFTJO4DBMBz  a marvelous course by Martin Odersky (plus alpha).
  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
  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!
  5. “Scala is so cool that nobody knows it.” Image: -

    Cal Henderson http://www.youtube.com/watch?v=i6Fr65PFqfk
  6. “I call Scala an old wine in a new bottle.”

    Image: - Venkat Subramaniam http://www.youtube.com/watch?v=LH75sJAR0hc
  7. Image: Programming Paradigms

  8. Image: Programming Paradigms ‣ Imperative ໋ྩܕ ‣ Functional ؔ਺ܕ ‣

    Logic ࿦ཧϓϩάϥϛϯά

  9. Image: Programming Paradigms ‣ Imperative ໋ྩܕ ‣ Functional ؔ਺ܕ ‣

    Logic ࿦ཧϓϩάϥϛϯά
 Orthogonal to Object Oriented Programming.
  10. Image: ij There's a strong correspondence between Imperative Programs and

    Computers. Memory cells, load/store instructions, etc...
  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.
  12. Image: How can we avoid conceptualizing programs word by word?

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

    High-level abstractions: ideally, develop theories of collections, shapes, strings, ...
  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.
  15. Image: Theory: data types & operations. Normally, a theory does

    not describe mutations.
  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)
  17. Image: Functional Programming Restricted sense: programming without mutable variables, assignments,

    loops, and other imperative control structures. Wider sense: Focusing on the functions.
  18. Image: ‣ Assignment-less


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


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

    side effects
 ‣ Assignment-less

  21. Image: Don't need to worry about thread safety. ‣ No

    side effects
 Multiple calls. 
 Support concurrency. ‣ Assignment-less

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

    side effects
 ‣ Referential transparency
 Multiple calls. 
 Support concurrency. ‣ Assignment-less

  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

  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

  25. Why it matters? Image:

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

  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
  28. Image: http://upload.wikimedia.org/wikipedia/commons/8/85/Scala_logo.png

  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
  30. Image: Image: Used in Twitter, LinkedIn, Foursquare,  Sony, Amazon,

    Facebook, NASA, ...
  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
  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
  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:
  34. Sounds good, but it is also ... Image:

  35. Sounds good, but it is also ... a complex language.

    a ‘kitchen sink language’. Image:
  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
  37. Anyway, let’s get started. Image:

  38. Image: “Tool Setup” page in Odersky’s course page.
 https://class.coursera.org/progfun-002/wiki/view?page=ToolsSetup


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

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

  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:
  42. Image: Natural Language Processing  & Machine Learning?

  43. Image: Scalala - developed by Daniel Ramage, 
 who used

    to be under Chris Manning. Natural Language Processing  & Machine Learning?
  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?
  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?
  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?
  47. Some Examples Image:

  48. First, some brevity. Image:

  49. None
  50. None
  51. None
  52. You can drop the things that are obvious.

  53. None
  54. None
  55. ɾ ɾ ɾ

  56. “for” is powerful in Scala. (For more usage, refer to

    “Programming in Scala” Chapter 7.) ɾ ɾ ɾ
  57. Square roots with Newton's method Image:

  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:
  59. None
  60. Iterate until the guess is 
 good enough.

  61. Iterate until the guess is 
 good enough. Improve the

    guess
 by taking mean of
 x and guess.
  62. Image: Currying

  63. None
  64. Note that a and b are unchanged.

  65. Note that a and b are unchanged.

  66. Note that a and b are unchanged. These are special

    cases of for different values of f .
  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?
  68. None
  69. higher order function

  70. higher order function

  71. higher order function Or even better ...

  72. higher order function Or even better ...

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

  74. None
  75. Function returning function.

  76. Function returning function.

  77. Function returning function.

  78. Function returning function.

  79. Function returning function.

  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.
  81. Finding Fixed Points Image:

  82. Image: Number x is called a fixed point of a

    function f if f(x) = x.
  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.
  84. None
  85. Image: Now, sqrt(x) = y such that y*y = x

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

    . Or, sqrt(x) = y such that y = x /y .
  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 .
  88. None
  89. Controls the oscillation.

  90. Rational Numbers ༗ཧ਺ Image:

  91. Class

  92. Method

  93. Method

  94. ... and other things

  95. Operators

  96. Operators Relaxed identifiers.

  97. Operators Relaxed identifiers.

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

  99. Image: Binary Tree ೋ෼໦

  100. Image: (Time’s up)

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

    hierarchies - Polymorphism, etc.
  102. Some references for further study Image:

  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/
  104. Image: END. Tanoshii desu kara