Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Scala – The Next 5 Years

       Martin Odersky
It’s been quite a ride
The last 6 years

2003   Scala first used in classroom at EPFL.
2004   First public release,
       Jamie & Jon at Sygneca are probably first
       outside professional users.
2005   Scalable component abstractions paper.
2006   2.x version released, David Pollak
       gets interested.
2007   First JavaOne talk.
2008   First Scala LiftOff Unconference.
2009   JavaOne talks on Scala almost fill a full day.
scalaliftoff2009.pdf

Recommended for you

Scala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud FoundryScala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud Foundry

Scala is a programming language that combines object-oriented and functional programming. It runs on the Java Virtual Machine and is designed to grow with user demands through libraries. Play 2.0 is a web application framework written in Scala that allows for rapid development through its Model-View-Controller architecture and local development server. Cloud Foundry is an open Platform as a Service that allows developers to easily deploy and scale applications, including those written in Scala and Play 2.0.

cloudfoundryweb applicationscala
flatMap Oslo presentation slides
flatMap Oslo presentation slidesflatMap Oslo presentation slides
flatMap Oslo presentation slides

This document discusses the key building blocks that enable Scala to be a modular and growable language. It outlines seven simple parts of the Scala language itself that can be combined in flexible ways, including expressions, scopes, patterns, recursion, function values, collections, and vars. It also lists seven features of Scala's type system that support modular programming, such as static typing, objects, classes, traits, abstract types, parameterized types, and implicit parameters. The document argues that this combination of simple language parts and powerful type features allows Scala programs and libraries to be composed modularly and to grow in complexity in a manageable way.

Scala - The Simple Parts, SFScala presentation
Scala - The Simple Parts, SFScala presentationScala - The Simple Parts, SFScala presentation
Scala - The Simple Parts, SFScala presentation

These are the slides of the talk I gave on May 22, 2014 to the San Francisco Scala user group. Similar talks were given before at GOTO Chicago, keynote, at Gilt Groupe and Hunter College in New York, at JAX Mainz and at FlatMap Oslo.

scala
Even more rewarding:

  We have a fantastic user community:
  Friendly, helpful, and intelligent.

  A big Thank You to our contributors. We could not have
  done it without you.
What is Scala, exactly?
A scripting language?

Scala is a regular contender at
JavaOne’s ScriptBowl.                 var capital = Map( "US" → "Washington",
                                                          "France" → "paris",
Syntax is lightweight                                     "Japan" → "tokyo" )
and concise, due to:
                                      capital += "Russia" → "Moskow"
 –   semicolon inference,
 –   type inference,                  for ( (country, city) ← capital )
 –   lightweight classes,                 capital += country → city.capitalize
 –   extensible API’s,
 –   closures as                      assert ( capital("Japan") == "Tokyo" )
     control abstractions.

 Average reduction in LOC wrt Java: ≥ 2
  due to concise syntax and better abstraction capabilities.
 Explorative programming with a read-eval-print-loop (REPL)
The Java of the future?
It has basically everything Java has now.
     (sometimes in different form)
It has closures.
     (proposed for Java 7, but rejected)
It has traits and pattern matching.
     (I would not be surprised to see them in Java 8, 9 or 10)
It compiles to .class files, is completely interoperable and runs about as
     fast as Java

     object App {   
       def main(args: Array[String]) { 
         if (args exists (_.toLowerCase == "‐help")) 
           printUsage()
         else 
           process(args)
       }
     }

Recommended for you

Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With Scala

This presentation was presented by Meetu Maltiar and Vikas Hazrati @OssCamp on 6th Sep 2009 at Netaji Subash Institute of Technology.

hibernatejavaspring
Scala: functional programming for the imperative mind
Scala: functional programming for the imperative mindScala: functional programming for the imperative mind
Scala: functional programming for the imperative mind

Scala is a programming language that runs on the JVM and fuses functional and object-oriented paradigms. It aims to provide functional programming for programmers with an imperative mindset. Key features include functions as first-class values, pattern matching, traits for composition, and seamless interoperability with Java. While some features appear to be language features, many are actually implemented via libraries. The Scala community is growing with adoption by companies and increasing support in tools and publications.

scalajavaprogramming
Miles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java DevelopersMiles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java Developers

Scala is a programming language that blends object-oriented and functional programming styles. It is designed to interoperate with Java code and runs on the Java Virtual Machine. Some key features of Scala include case classes, pattern matching, traits for mixing behavior, and immutable data structures. Scala code compiles to Java bytecode, allowing seamless use of Java libraries and tools.

miles sabinjavascala
A language for concurrent programming?

It has powerful concurrency
                                  // asynchronous message send
abstractions such as actors.
                                  actor ! message

It’s used in heavy duty
applications: kestrel message     // message receive
queue, lift web framework.        receive {
                                    case msgpat1 => action1
It makes functional programming     …    
with immutable data easy.
                                    case msgpatn => actionn
                                  }
A composition language?

•   New approach to module
    systems:                      trait Analyzer { this: Backend =>
     component = class or trait     …
                                  }
     composition via mixins
•   Components connect with       trait Backend extends Analyzer
                                                with Optimization
     – parameters,                              with Generation {
     – abstract members (both
                                    val global: Main
        types and values),          import global._
     – self types
                                    type OutputMedium <: Writable
•   gives dependency injection
    for free                      }
How can it be all these things?

Q. Is there not a danger that a language being all of these
  things becomes too complex?

A. Normally, yes. However, Scala is deep where other
   languages are broad.

  Cuts down on boilerplate.

  Concentrates on powerful abstraction methods, so that
  users can write powerful libraries.
The Essence of Scala

Key design principles of Scala:

1. Concentrate on scalability: The same constructions
   should work for small as well as large programs.

2. Unify object-oriented and functional programming.

Recommended for you

scala
scalascala
scala

Scala is a multi-paradigm programming language that runs on the Java Virtual Machine. It is intended to be both object-oriented and functional. Scala is compatible with Java and allows Java code to interoperate with Scala code. Some key features of Scala include type inference, lazy evaluation, treating methods as variables, and support for both object-oriented and functional programming paradigms.

A Brief Intro to Scala
A Brief Intro to ScalaA Brief Intro to Scala
A Brief Intro to Scala

Slides from my talk at the Feb 2011 Seattle Tech Startups meeting. More info here (along with powerpoint slides): http://www.startupmonkeys.com/2011/02/scala-frugal-mechanic/

scala
A Tour Of Scala
A Tour Of ScalaA Tour Of Scala
A Tour Of Scala

A general presentation of the Scala language, a OO/functional, statically typed language that runs on the JVM

fanftypedstatically
Where do we go from here?

• Summer/fall 2009: Scala 2.8, with:
   –   new collections
   –   package objects
   –   named and default parameters
   –   @specialized for faster generics
   –   improved tool support for IDEs and REPL.


• The next 5 years:

   Concurrency // Parallelism
   (on all levels: primitives, abstractions, types, tools)
Old Scala collections
•   Pre 2.8 collections have grown gradually. They lack a uniform
    structure.
•   Examples:

       scala.Seq
       scala.RandomAccessSeq.Mutable
       scala.collection.mutable.Set

•   Operations like map need to be redefined for every collection type:

       List(1, 2, 3).map(inc) : List[Int]
       Array(1, 2, 3).map(inc): Array[Int]
       Set(1, 2, 3).map(inc)  : Set[Int]
New Scala collections

• Uniform structure:
     scala.collection.immutableList
     scala.collection.immutable.Set
     scala.collection.mutable.Vector
• Every operation is implemented only once.
• Selection of building blocks in package
  scala.collection.generic.
Collection Hierarchy

Recommended for you

Scala: Object-Oriented Meets Functional, by Iulian Dragos
Scala: Object-Oriented Meets Functional, by Iulian DragosScala: Object-Oriented Meets Functional, by Iulian Dragos
Scala: Object-Oriented Meets Functional, by Iulian Dragos

A presentation from Iulian Dragos of Typesafe that gives an overview of the Scala programming language. The presentation was given at a Functional Angle conference in Timisoara, Romania sponsored by 3Pillar. Iulian Dragos has been working on Scala since 2004. He currently works for Typesafe, a start-up that was co-founded by Scala’s creator, Martin Odersky.

software developmentsoftware product developmentapplication development
Functional Programming In Practice
Functional Programming In PracticeFunctional Programming In Practice
Functional Programming In Practice

This document provides an overview of functional programming concepts like first-class functions, pure functions, and immutable data structures. It discusses functional programming languages like Haskell, Scala, and Clojure and provides examples of code in each. The document also covers core FP topics like avoiding side effects, persistent data structures, and functional patterns in Clojure like atoms for mutable state and macros.

haskellfunctional programmingclojure
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala

A Short presentation on Scala for beginners with Introduction to Functional Programming, Basics of Scala, Use-casses and Examples

scalafunctional programmingintroduction scala
Package Objects

Problem: Everything has to live inside an object or class.
   => No top-level value definitions, type aliases, implicits.

Package objects make packages more like objects.

They also let you define your own ``Predefs’’.

      package object scala {
        type List[+T] = scala.collection.immutable.List 
        val List = scala.collection.immutable.List
        ...
      } 
Named and default arguments
 def newTable(size: Int = 100, load: Float = 0.5f) =
     new HashMap[String, String]{
         override val initialSize = size
         override val loadFactor = (load * 1000).toInt
     }
 }
 newTable(50, 0.75f)
 newTable()
 newTable(load = 0.5f)
 newTable(size = 20, load = 0.5f)


Defaults can be arbitrary expressions, not just constants.
Default evaluation is dynamic.
Copy method
Problem: Case classes are great for pattern matching,
  but how do you transform data?
Often need to update (functionally) some specific field(s)
  of a date structure defined by case classes.
Solution: Selective copy method.

  case class Tree[+T](elem: T, left: Tree[T], right: Tree[T])


  def incElem(t: Tree[Int])  =  t copy (elem = t.elem + 1)




• Problem: How to define “copy”?
Defining copy

• Problem: A class with n parameters allows 2n possible
  combinations of parameters to copy.
• Default parameters to the rescue.

  case class Tree[+T](elem: T, left: Tree[T], right: Tree[T]) {
    // generated automatically:
    def copy[U](elem: U = this.elem, 
                left: Tree[U] = this.left,
                right: Tree[U] = this.right) = 
      Branch(elem, left, right)    
  }

Recommended for you

Advanced Functional Programming in Scala
Advanced Functional Programming in ScalaAdvanced Functional Programming in Scala
Advanced Functional Programming in Scala

This is an introduction to some of the advanced concept in functional programming using Scala - Higher kind projections - Contravariant functors - Monadic composition - Streams - Views - Type classes - Stacked mixins models - Cake pattern - Magnet pattern - View bounds - F-bound polymorphism - Dataflow back pressure - Continuation passing style

scaladelimited continuationcake pattern
Scala Days San Francisco
Scala Days San FranciscoScala Days San Francisco
Scala Days San Francisco

- Scala originated from Martin Odersky's work on functional programming languages like OCaml in the 1980s and 1990s. It was designed to combine object-oriented and functional programming in a practical way. - Key aspects of Scala include being statically typed while also being flexible, its unified object and module system, and treating libraries as primary over language features. - Scala has grown into an large ecosystem centered around the JVM and also targets JavaScript via Scala.js. Tooling continues to improve with faster compilers and new IDE support. - Future work includes establishing TASTY as a portable intermediate representation, connecting Scala to formal foundations through the DOT calculus, and exploring new type

futureof
An Introduction to Scala - Blending OO and Functional Paradigms
An Introduction to Scala - Blending OO and Functional ParadigmsAn Introduction to Scala - Blending OO and Functional Paradigms
An Introduction to Scala - Blending OO and Functional Paradigms

Scala is a programming language that blends object-oriented and functional programming. It is designed to be compatible with Java and runs on the JVM. Scala has features like functions as first-class values, pattern matching, and immutable data structures. It aims to improve on Java syntax and provides tools like case classes and for comprehensions. Scala sees growing adoption in companies like Twitter and LinkedIn and future releases will continue to explore new type systems and features.

Using copy
scala> case class Tree[T](elem: T, left: Tree[T], right: Tree[T])
defined class Tree


scala> val t = Tree(1, null, null)
t: Tree[Int] = Tree(1,null,null)


scala> val u = t.copy(left = Tree(2, null, null))
u: Tree[Int] = Tree(1,Tree(2,null,null),null)


scala> val v = u.copy(elem = 3, right = Tree(4, null, null))
v: Tree[Int] = Tree(3,Tree(2,null,null),Tree(4,null,null))
Faster Generics

• Problem: Generics cause a performance hit because
  they require a uniform representation: everything needs
  to be boxed.
                    trait Function1[‐T, +U] { def apply(x: T): U }
• Example:
                      def app(x: Int, fn: Int => Int) = fn(x)
                      app(7, x => x * x)


  becomes:            trait Function1 { def apply(x: Object): Object }
                      class anonfun extends Function1 {
                        def apply(x: Object): Object =
                          Int.box(apply(Int.unbox(x)))
                        def apply(x: Int): Int = x * x
                      }
                      def app(x: Int, fn: Function1) = 
                        Int.unbox(fn(Int.box(x)))
                      app(7, new anonfun)
Solution: @specialized

• We should specialize functions that take primitive
  parameter types.
• If we had the whole program at our disposal, this would
  be easy: Just do it like C++ templates.
• The problem is that we don’t.
• Idea: specialize opportunistically, when types are known.
If Function1 is @specialized ...
  trait Function1[@specialized ‐T, @specialized +U] {
    def apply(x: T): U }
  def app(x: Int, fn: Int => Int) = fn(x)
  app(7, x => x * x)

... the compiler generates instead:
  trait Function1 {
    def apply(x: Object): Object
    def applyIntInt(x: Int): Int =
      Int.unbox(apply(Int.box(x)))
    // specializations for other primitive types
  }                                                     No boxing!
  class anonfun extends (Int => Int) {
    def apply(x: Object): Object =
      Int.box(applyIntInt(Int.unbox(x)))
    override def applyIntInt(x: Int): Int = x * x
  }
  def app(x: Int, fn: Function1) =
  fn.applyIntInt(x)
  app(7, anonfun)

Recommended for you

Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of Scala

The document summarizes the evolution of the Scala programming language from its origins to its present state and future directions. It discusses Scala's combination of object-oriented and functional programming, its type system, tooling improvements, and the emergent ecosystem around Scala. It also outlines plans to develop a Scala-specific platform called TASTY and explore new language concepts like effect systems to model side effects through capabilities.

scala
Devoxx
DevoxxDevoxx
Devoxx

- Scala is being adopted for web platforms, trading platforms, financial modeling, and simulation. Scala 2.9 includes improvements to parallel and concurrent computing libraries as well as faster compilation. - Play Framework 2.0 will move to a Scala core while retaining Java support. The Scala Eclipse IDE has been reworked for better reliability and responsiveness. - Scala 2.10 will include a new reflection framework and other IDE improvements. Avoiding mutable state enables functional and parallel programming. Scala supports both parallelism and concurrency through tools like parallel collections and actors. - Future work includes distributed collections, parallel domain-specific languages, and unifying the Scala compiler and reflection APIs. Scal

reflectionparallel computingscala
About Functional Programming
About Functional ProgrammingAbout Functional Programming
About Functional Programming

My presentation at Sulake (www.sulake.com) about functional programming languages and how to adopt a functional-style in Java development. I argue that functional programs are more robust than imperative ones.

programming languagesobject oriented programmingstandard ml
Better tools

• REPL with command completion (courtesy Paul Phillips).

• Reworked IDE/compiler interface (Miles Sabin, Martin
  Odersky, Iulian Dragos).

   Developed originally for Eclipse, but should be reusable for
   other IDEs such as Netbeans, VisualStudio.
New control abstractions:

• Continations plugin
   – allow to unify receive and react in actors.
   – give a clean basis for encpsulating nio.
   – let you do lots of other control abstractions.
• Break (done in library)
• Trampolining tail calls (done in library)
   import scala.util.control.Breaks._
   breakable {
     for (x <- elems) {
       println(x * 2)
       if (x > 0) break
     }
   }
Slipping break back into Scala.
More features

• Extended swing library.
• Performance improvements, among others for
   – structural type dispatch,
   – actors,
   – vectors, sets and maps.
• Standardized compiler plugin architecture.

Recommended for you

Functional programming with Scala
Functional programming with ScalaFunctional programming with Scala
Functional programming with Scala

Scala is a multi-paradigm programming language that blends object-oriented and functional programming. It is designed to express common programming patterns in a concise, elegant, and type-safe way. Scala runs on the Java Virtual Machine and interoperates seamlessly with Java, but also integrates concepts from languages such as Haskell, ML and Ruby. Some key features of Scala include support for functional programming, a static type system with type inference, pattern matching, actors and immutable data structures.

scalafunctional programming
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for Scala

Scala Next focused on the continued adoption and development of Scala. Key points included: - Scala adoption has grown significantly in areas like web platforms, trading platforms, and financial modeling. The number of Scala jobs tripled in the last year. - Recent Scala versions like 2.8 and 2.9 included improvements to collections, implicits, and tooling support. - Scala 2.10 will focus on new reflection capabilities, reification, string interpolation, and continued IDE improvements. - The Play Framework 2.0 will provide a Scala-centric web framework built on top of Akka and the Typesafe Stack.

sf scala2.10martin odersky
Google06
Google06Google06
Google06

This document discusses how the Scala programming language unifies functional programming and object-oriented programming concepts to better support component-based software development. It presents three ways Scala unifies previously separate concepts: 1) algebraic data types are implemented as class hierarchies, 2) functions are treated as objects, and 3) modules are implemented as objects. This allows Scala to leverage the strengths of both paradigms while removing limitations of existing languages for component programming.

How to get 2.8

Can use trunk today (bleeding edge).

Stable preview planned for July.

Final version planned for September or October.
Beyond 2.8
New challenges

Concurrency:

   How to make concurrent activities play well together?

Parallelism:

   How to extract better performance from today’s and
   tomorrow’s parallel processors (multicores, gpus, etc).

The two do not necessarily have the same solutions!
What can be done?

(1) Better abstractions:

  Actors
  Transactions
  Join patterns
  Stream processing with single-assignment variables
  Data parallelism

Recommended for you

Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologist

Scala is a programming language for the Java Virtual Machine that combines object-oriented and functional programming concepts. It is fully interoperable with Java code and libraries. Scala aims to be more concise and expressive than Java by allowing both object-oriented and functional programming styles. Experts have praised Scala for its ability to solve many of Java's design issues like verbosity. Scala provides features like case classes, pattern matching, XML literals, and functional collections that reduce boilerplate code compared to Java.

scala
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play framework

A short introduction (with many examples) to the Scala programming language and also an introduction to using the Play! Framework for modern, safe, efffcient and reactive web applications.

functional-programmingjvmscala
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky

Scala gives you awesome expressive power, but how to make best use of it? In my talk I will discuss the question what makes good Scala style. We will start with syntax and continue with how to name things, how to mix objects and functions, where (and where not) to use mutable state, and when to use which design pattern. As most questions of style, the discussion will be quite subjective, and some of it might be controversial. I am looking forward to discuss these topics with the conference attendees.

scaladays 2013scaladaysmartin odersky
(2) Better Analyses.    Distinguish between:

  pure:             no side effects
  thread-local:     no interaction
  transactional:    atomic interaction
  unrestricted access (danger!)

  Need alias tracking and effect systems.
  Problem: can we make these lightweight enough?
(3) Better support for static types.

  Need to overcome the “type wall”.

  Static typing is a key ingredient for reliable concurrent
  programs, yet programs are annoyingly hard to get right.

  Need better tools: Type browsers, type debuggers.

  Need better presentations: Users might not always want
  to see the most general type!
Why Scala?

  I believe Scala is well placed as a basis for concurrent
  and parallel programming, because

   – It runs natively on the JVM.
   – It supports functional programming.
   – It has great syntactic flexibility.


• Btw we are not the only ones to have recognized this:
   – The X10, PPL, Fortress are al using Scala in some role or other.
Learning Scala

•   To get started:
•   First steps in Scala, by Bill Venners
    published in Scalazine at
    www.artima.com

•   Scala for Java Refugees by Daniel
    Spiewack (great blog series)

•   To continue:
     3+1 books published; more in the pipeline.

Recommended for you

Scala google
Scala google Scala google
Scala google

Scala aims to unify functional and object-oriented programming to better support component-based software development. It does this by (1) treating algebraic data types as extensible class hierarchies, (2) treating functions as objects with apply methods, and (3) allowing functions and modules to be specialized. This provides capabilities like partial functions and actor-based concurrency in a library rather than as language features. Event-based actors implemented as a library can outperform threaded actors for high numbers of actors.

The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language

Martin Odersky received his PhD in 1989 and began designing Scala in 2001 at EPFL. Scala is a functional and object-oriented programming language that runs on the Java Virtual Machine. It is concise, high-level, statically typed, and supports both immutable and mutable data structures. Many large companies use Scala including LinkedIn, Twitter, and Ebay. Scala supports both object-oriented programming with classes, traits, and objects as well as functional programming with immutable data, higher-order functions, and algebraic data types.

Flatmap
FlatmapFlatmap
Flatmap

This document discusses the key building blocks that enable Scala to be a modular and growable language. It outlines seven simple parts of the Scala language itself that can be combined in flexible ways, including expressions, scopes, patterns, recursion, functions, collections, and variables. It also discusses seven library features like static types, objects, classes, traits, abstract types, type parameters, and implicit parameters that support modular programming. The document argues that this combination of simple language parts and library features allows Scala applications and libraries to smoothly grow from small to large systems.

How to find out more

Track it on
scala-lang.org:




Thank You

More Related Content

What's hot

Scala Intro
Scala IntroScala Intro
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
Mohammad Hossein Rimaz
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
pramode_ce
 
Scala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud FoundryScala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud Foundry
Pray Desai
 
flatMap Oslo presentation slides
flatMap Oslo presentation slidesflatMap Oslo presentation slides
flatMap Oslo presentation slides
Martin Odersky
 
Scala - The Simple Parts, SFScala presentation
Scala - The Simple Parts, SFScala presentationScala - The Simple Parts, SFScala presentation
Scala - The Simple Parts, SFScala presentation
Martin Odersky
 
Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With Scala
Xebia IT Architects
 
Scala: functional programming for the imperative mind
Scala: functional programming for the imperative mindScala: functional programming for the imperative mind
Scala: functional programming for the imperative mind
Sander Mak (@Sander_Mak)
 
Miles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java DevelopersMiles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java Developers
Skills Matter
 
scala
scalascala
scala
Pranav E K
 
A Brief Intro to Scala
A Brief Intro to ScalaA Brief Intro to Scala
A Brief Intro to Scala
Tim Underwood
 
A Tour Of Scala
A Tour Of ScalaA Tour Of Scala
A Tour Of Scala
fanf42
 
Scala: Object-Oriented Meets Functional, by Iulian Dragos
Scala: Object-Oriented Meets Functional, by Iulian DragosScala: Object-Oriented Meets Functional, by Iulian Dragos
Scala: Object-Oriented Meets Functional, by Iulian Dragos
3Pillar Global
 
Functional Programming In Practice
Functional Programming In PracticeFunctional Programming In Practice
Functional Programming In Practice
Michiel Borkent
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
Rahul Jain
 
Advanced Functional Programming in Scala
Advanced Functional Programming in ScalaAdvanced Functional Programming in Scala
Advanced Functional Programming in Scala
Patrick Nicolas
 
Scala Days San Francisco
Scala Days San FranciscoScala Days San Francisco
Scala Days San Francisco
Martin Odersky
 

What's hot (17)

Scala Intro
Scala IntroScala Intro
Scala Intro
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
 
Scala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud FoundryScala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud Foundry
 
flatMap Oslo presentation slides
flatMap Oslo presentation slidesflatMap Oslo presentation slides
flatMap Oslo presentation slides
 
Scala - The Simple Parts, SFScala presentation
Scala - The Simple Parts, SFScala presentationScala - The Simple Parts, SFScala presentation
Scala - The Simple Parts, SFScala presentation
 
Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With Scala
 
Scala: functional programming for the imperative mind
Scala: functional programming for the imperative mindScala: functional programming for the imperative mind
Scala: functional programming for the imperative mind
 
Miles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java DevelopersMiles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java Developers
 
scala
scalascala
scala
 
A Brief Intro to Scala
A Brief Intro to ScalaA Brief Intro to Scala
A Brief Intro to Scala
 
A Tour Of Scala
A Tour Of ScalaA Tour Of Scala
A Tour Of Scala
 
Scala: Object-Oriented Meets Functional, by Iulian Dragos
Scala: Object-Oriented Meets Functional, by Iulian DragosScala: Object-Oriented Meets Functional, by Iulian Dragos
Scala: Object-Oriented Meets Functional, by Iulian Dragos
 
Functional Programming In Practice
Functional Programming In PracticeFunctional Programming In Practice
Functional Programming In Practice
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
Advanced Functional Programming in Scala
Advanced Functional Programming in ScalaAdvanced Functional Programming in Scala
Advanced Functional Programming in Scala
 
Scala Days San Francisco
Scala Days San FranciscoScala Days San Francisco
Scala Days San Francisco
 

Similar to scalaliftoff2009.pdf

An Introduction to Scala - Blending OO and Functional Paradigms
An Introduction to Scala - Blending OO and Functional ParadigmsAn Introduction to Scala - Blending OO and Functional Paradigms
An Introduction to Scala - Blending OO and Functional Paradigms
Miles Sabin
 
Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of Scala
Scala Italy
 
Devoxx
DevoxxDevoxx
About Functional Programming
About Functional ProgrammingAbout Functional Programming
About Functional Programming
Aapo Kyrölä
 
Functional programming with Scala
Functional programming with ScalaFunctional programming with Scala
Functional programming with Scala
Neelkanth Sachdeva
 
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for Scala
Marakana Inc.
 
Google06
Google06Google06
Google06
Zhiwen Guo
 
Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologist
pmanvi
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play framework
Felipe
 
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky
Typesafe
 
Scala google
Scala google Scala google
Scala google
Navneet Kumar
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
league
 
Flatmap
FlatmapFlatmap
Scala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian DragosScala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian Dragos
GenevaJUG
 
Introduction to scala for a c programmer
Introduction to scala for a c programmerIntroduction to scala for a c programmer
Introduction to scala for a c programmer
Girish Kumar A L
 
Евгений Бурмако «scala.reflect»
Евгений Бурмако «scala.reflect»Евгений Бурмако «scala.reflect»
Евгений Бурмако «scala.reflect»
e-Legion
 
scala.reflect, Eugene Burmako
scala.reflect, Eugene Burmakoscala.reflect, Eugene Burmako
scala.reflect, Eugene Burmako
Vasil Remeniuk
 
Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With Scala
Meetu Maltiar
 
Functional Programming With Scala
Functional Programming With ScalaFunctional Programming With Scala
Functional Programming With Scala
Knoldus Inc.
 
Scala for Java Programmers
Scala for Java ProgrammersScala for Java Programmers
Scala for Java Programmers
Eric Pederson
 

Similar to scalaliftoff2009.pdf (20)

An Introduction to Scala - Blending OO and Functional Paradigms
An Introduction to Scala - Blending OO and Functional ParadigmsAn Introduction to Scala - Blending OO and Functional Paradigms
An Introduction to Scala - Blending OO and Functional Paradigms
 
Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of Scala
 
Devoxx
DevoxxDevoxx
Devoxx
 
About Functional Programming
About Functional ProgrammingAbout Functional Programming
About Functional Programming
 
Functional programming with Scala
Functional programming with ScalaFunctional programming with Scala
Functional programming with Scala
 
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for Scala
 
Google06
Google06Google06
Google06
 
Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologist
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play framework
 
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky
 
Scala google
Scala google Scala google
Scala google
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
 
Flatmap
FlatmapFlatmap
Flatmap
 
Scala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian DragosScala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian Dragos
 
Introduction to scala for a c programmer
Introduction to scala for a c programmerIntroduction to scala for a c programmer
Introduction to scala for a c programmer
 
Евгений Бурмако «scala.reflect»
Евгений Бурмако «scala.reflect»Евгений Бурмако «scala.reflect»
Евгений Бурмако «scala.reflect»
 
scala.reflect, Eugene Burmako
scala.reflect, Eugene Burmakoscala.reflect, Eugene Burmako
scala.reflect, Eugene Burmako
 
Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With Scala
 
Functional Programming With Scala
Functional Programming With ScalaFunctional Programming With Scala
Functional Programming With Scala
 
Scala for Java Programmers
Scala for Java ProgrammersScala for Java Programmers
Scala for Java Programmers
 

More from Hiroshi Ono

Voltdb - wikipedia
Voltdb - wikipediaVoltdb - wikipedia
Voltdb - wikipedia
Hiroshi Ono
 
Gamecenter概説
Gamecenter概説Gamecenter概説
Gamecenter概説
Hiroshi Ono
 
EventDrivenArchitecture
EventDrivenArchitectureEventDrivenArchitecture
EventDrivenArchitecture
Hiroshi Ono
 
program_draft3.pdf
program_draft3.pdfprogram_draft3.pdf
program_draft3.pdf
Hiroshi Ono
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdf
Hiroshi Ono
 
genpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfgenpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdf
Hiroshi Ono
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
downey08semaphores.pdf
downey08semaphores.pdfdowney08semaphores.pdf
downey08semaphores.pdf
Hiroshi Ono
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
Hiroshi Ono
 
TwitterOct2008.pdf
TwitterOct2008.pdfTwitterOct2008.pdf
TwitterOct2008.pdf
Hiroshi Ono
 
camel-scala.pdf
camel-scala.pdfcamel-scala.pdf
camel-scala.pdf
Hiroshi Ono
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
SACSIS2009_TCP.pdf
SACSIS2009_TCP.pdfSACSIS2009_TCP.pdf
SACSIS2009_TCP.pdf
Hiroshi Ono
 
scalaliftoff2009.pdf
scalaliftoff2009.pdfscalaliftoff2009.pdf
scalaliftoff2009.pdf
Hiroshi Ono
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
program_draft3.pdf
program_draft3.pdfprogram_draft3.pdf
program_draft3.pdf
Hiroshi Ono
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdf
Hiroshi Ono
 
genpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfgenpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdf
Hiroshi Ono
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdf
Hiroshi Ono
 

More from Hiroshi Ono (20)

Voltdb - wikipedia
Voltdb - wikipediaVoltdb - wikipedia
Voltdb - wikipedia
 
Gamecenter概説
Gamecenter概説Gamecenter概説
Gamecenter概説
 
EventDrivenArchitecture
EventDrivenArchitectureEventDrivenArchitecture
EventDrivenArchitecture
 
program_draft3.pdf
program_draft3.pdfprogram_draft3.pdf
program_draft3.pdf
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdf
 
genpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfgenpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdf
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
downey08semaphores.pdf
downey08semaphores.pdfdowney08semaphores.pdf
downey08semaphores.pdf
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
TwitterOct2008.pdf
TwitterOct2008.pdfTwitterOct2008.pdf
TwitterOct2008.pdf
 
camel-scala.pdf
camel-scala.pdfcamel-scala.pdf
camel-scala.pdf
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
 
SACSIS2009_TCP.pdf
SACSIS2009_TCP.pdfSACSIS2009_TCP.pdf
SACSIS2009_TCP.pdf
 
scalaliftoff2009.pdf
scalaliftoff2009.pdfscalaliftoff2009.pdf
scalaliftoff2009.pdf
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
 
program_draft3.pdf
program_draft3.pdfprogram_draft3.pdf
program_draft3.pdf
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdf
 
genpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfgenpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdf
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdf
 

scalaliftoff2009.pdf

  • 1. Scala – The Next 5 Years Martin Odersky
  • 3. The last 6 years 2003 Scala first used in classroom at EPFL. 2004 First public release, Jamie & Jon at Sygneca are probably first outside professional users. 2005 Scalable component abstractions paper. 2006 2.x version released, David Pollak gets interested. 2007 First JavaOne talk. 2008 First Scala LiftOff Unconference. 2009 JavaOne talks on Scala almost fill a full day.
  • 5. Even more rewarding: We have a fantastic user community: Friendly, helpful, and intelligent. A big Thank You to our contributors. We could not have done it without you.
  • 6. What is Scala, exactly?
  • 7. A scripting language? Scala is a regular contender at JavaOne’s ScriptBowl. var capital = Map( "US" → "Washington", "France" → "paris", Syntax is lightweight "Japan" → "tokyo" ) and concise, due to: capital += "Russia" → "Moskow" – semicolon inference, – type inference, for ( (country, city) ← capital ) – lightweight classes, capital += country → city.capitalize – extensible API’s, – closures as assert ( capital("Japan") == "Tokyo" ) control abstractions. Average reduction in LOC wrt Java: ≥ 2 due to concise syntax and better abstraction capabilities. Explorative programming with a read-eval-print-loop (REPL)
  • 8. The Java of the future? It has basically everything Java has now. (sometimes in different form) It has closures. (proposed for Java 7, but rejected) It has traits and pattern matching. (I would not be surprised to see them in Java 8, 9 or 10) It compiles to .class files, is completely interoperable and runs about as fast as Java object App {      def main(args: Array[String]) {      if (args exists (_.toLowerCase == "‐help"))        printUsage()     else        process(args)   } }
  • 9. A language for concurrent programming? It has powerful concurrency // asynchronous message send abstractions such as actors. actor ! message It’s used in heavy duty applications: kestrel message // message receive queue, lift web framework. receive {   case msgpat1 => action1 It makes functional programming   …     with immutable data easy.   case msgpatn => actionn }
  • 10. A composition language? • New approach to module systems: trait Analyzer { this: Backend => component = class or trait   … } composition via mixins • Components connect with trait Backend extends Analyzer               with Optimization – parameters,               with Generation { – abstract members (both   val global: Main types and values),   import global._ – self types   type OutputMedium <: Writable • gives dependency injection for free }
  • 11. How can it be all these things? Q. Is there not a danger that a language being all of these things becomes too complex? A. Normally, yes. However, Scala is deep where other languages are broad. Cuts down on boilerplate. Concentrates on powerful abstraction methods, so that users can write powerful libraries.
  • 12. The Essence of Scala Key design principles of Scala: 1. Concentrate on scalability: The same constructions should work for small as well as large programs. 2. Unify object-oriented and functional programming.
  • 13. Where do we go from here? • Summer/fall 2009: Scala 2.8, with: – new collections – package objects – named and default parameters – @specialized for faster generics – improved tool support for IDEs and REPL. • The next 5 years: Concurrency // Parallelism (on all levels: primitives, abstractions, types, tools)
  • 14. Old Scala collections • Pre 2.8 collections have grown gradually. They lack a uniform structure. • Examples: scala.Seq scala.RandomAccessSeq.Mutable scala.collection.mutable.Set • Operations like map need to be redefined for every collection type: List(1, 2, 3).map(inc) : List[Int] Array(1, 2, 3).map(inc): Array[Int] Set(1, 2, 3).map(inc)  : Set[Int]
  • 15. New Scala collections • Uniform structure: scala.collection.immutableList scala.collection.immutable.Set scala.collection.mutable.Vector • Every operation is implemented only once. • Selection of building blocks in package scala.collection.generic.
  • 17. Package Objects Problem: Everything has to live inside an object or class. => No top-level value definitions, type aliases, implicits. Package objects make packages more like objects. They also let you define your own ``Predefs’’. package object scala {   type List[+T] = scala.collection.immutable.List    val List = scala.collection.immutable.List   ... } 
  • 18. Named and default arguments def newTable(size: Int = 100, load: Float = 0.5f) = new HashMap[String, String]{ override val initialSize = size override val loadFactor = (load * 1000).toInt } } newTable(50, 0.75f) newTable() newTable(load = 0.5f) newTable(size = 20, load = 0.5f) Defaults can be arbitrary expressions, not just constants. Default evaluation is dynamic.
  • 19. Copy method Problem: Case classes are great for pattern matching, but how do you transform data? Often need to update (functionally) some specific field(s) of a date structure defined by case classes. Solution: Selective copy method. case class Tree[+T](elem: T, left: Tree[T], right: Tree[T]) def incElem(t: Tree[Int])  =  t copy (elem = t.elem + 1) • Problem: How to define “copy”?
  • 20. Defining copy • Problem: A class with n parameters allows 2n possible combinations of parameters to copy. • Default parameters to the rescue. case class Tree[+T](elem: T, left: Tree[T], right: Tree[T]) {   // generated automatically:   def copy[U](elem: U = this.elem,                left: Tree[U] = this.left,               right: Tree[U] = this.right) =      Branch(elem, left, right)     }
  • 22. Faster Generics • Problem: Generics cause a performance hit because they require a uniform representation: everything needs to be boxed. trait Function1[‐T, +U] { def apply(x: T): U } • Example: def app(x: Int, fn: Int => Int) = fn(x) app(7, x => x * x) becomes: trait Function1 { def apply(x: Object): Object } class anonfun extends Function1 {   def apply(x: Object): Object =     Int.box(apply(Int.unbox(x)))   def apply(x: Int): Int = x * x } def app(x: Int, fn: Function1) =    Int.unbox(fn(Int.box(x))) app(7, new anonfun)
  • 23. Solution: @specialized • We should specialize functions that take primitive parameter types. • If we had the whole program at our disposal, this would be easy: Just do it like C++ templates. • The problem is that we don’t. • Idea: specialize opportunistically, when types are known.
  • 24. If Function1 is @specialized ... trait Function1[@specialized ‐T, @specialized +U] {   def apply(x: T): U } def app(x: Int, fn: Int => Int) = fn(x) app(7, x => x * x) ... the compiler generates instead: trait Function1 {   def apply(x: Object): Object   def applyIntInt(x: Int): Int =     Int.unbox(apply(Int.box(x)))   // specializations for other primitive types } No boxing! class anonfun extends (Int => Int) {   def apply(x: Object): Object =     Int.box(applyIntInt(Int.unbox(x)))   override def applyIntInt(x: Int): Int = x * x } def app(x: Int, fn: Function1) = fn.applyIntInt(x) app(7, anonfun)
  • 25. Better tools • REPL with command completion (courtesy Paul Phillips). • Reworked IDE/compiler interface (Miles Sabin, Martin Odersky, Iulian Dragos). Developed originally for Eclipse, but should be reusable for other IDEs such as Netbeans, VisualStudio.
  • 26. New control abstractions: • Continations plugin – allow to unify receive and react in actors. – give a clean basis for encpsulating nio. – let you do lots of other control abstractions. • Break (done in library) • Trampolining tail calls (done in library) import scala.util.control.Breaks._ breakable { for (x <- elems) { println(x * 2) if (x > 0) break } }
  • 27. Slipping break back into Scala.
  • 28. More features • Extended swing library. • Performance improvements, among others for – structural type dispatch, – actors, – vectors, sets and maps. • Standardized compiler plugin architecture.
  • 29. How to get 2.8 Can use trunk today (bleeding edge). Stable preview planned for July. Final version planned for September or October.
  • 31. New challenges Concurrency: How to make concurrent activities play well together? Parallelism: How to extract better performance from today’s and tomorrow’s parallel processors (multicores, gpus, etc). The two do not necessarily have the same solutions!
  • 32. What can be done? (1) Better abstractions: Actors Transactions Join patterns Stream processing with single-assignment variables Data parallelism
  • 33. (2) Better Analyses. Distinguish between: pure: no side effects thread-local: no interaction transactional: atomic interaction unrestricted access (danger!) Need alias tracking and effect systems. Problem: can we make these lightweight enough?
  • 34. (3) Better support for static types. Need to overcome the “type wall”. Static typing is a key ingredient for reliable concurrent programs, yet programs are annoyingly hard to get right. Need better tools: Type browsers, type debuggers. Need better presentations: Users might not always want to see the most general type!
  • 35. Why Scala? I believe Scala is well placed as a basis for concurrent and parallel programming, because – It runs natively on the JVM. – It supports functional programming. – It has great syntactic flexibility. • Btw we are not the only ones to have recognized this: – The X10, PPL, Fortress are al using Scala in some role or other.
  • 36. Learning Scala • To get started: • First steps in Scala, by Bill Venners published in Scalazine at www.artima.com • Scala for Java Refugees by Daniel Spiewack (great blog series) • To continue: 3+1 books published; more in the pipeline.
  • 37. How to find out more Track it on scala-lang.org: Thank You