SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
Preparing For Scala 3
Adrian Moors
Martin Odersky
Scala Days Berlin
April 2018
Roadmap (from previous years)
Scala 2.12
Scala 2.13
Scala 3.0
TASTY,
middle end?
stdlib
collections
Dotty 0.1
Dotty 0.x releases
2016
backend, classpath handling
Scala 2.14
2017
2018
This is open source work, depends on community’s contributions.
à Roadmap is tentative, no promises:
“MVP” = minimal
viable
prototype
Scala 2.15?
migration
Roadmap (now)
Scala 2.12
Scala 2.13
Scala 3.0
TASTY,
middle end?
stdlib
collections
Dotty 0.1
Dotty 0.x releases
2016
backend, classpath handling
Scala 2.14
2017
2018
This is open source work, depends on community’s contributions.
à Roadmap has held up pretty well so far!
“MVP” = minimal
viable
prototype
migration Early 2020
Early 2020
License Change
http://scala-lang.org/news/license-change.html
BSD 3 à Apache v2.0
Concerns? let us know by Aug 10
Developer Survey
http://scala-lang.org/news/survey-2018.html
Would love to hear from you!
Takes 15 min
Why Scala 3 ?
The Essence of Scala:
Fusion of functional and
object-oriented programming
The Essence of Scala:
Fusion of functional and
object-oriented programming
in a typed setting
• functions for the logic
• objects for the modularity
Success!
Starting from a statically typed OO core
language, Scala pioneered
closures, function types, expression orientation,
tuples, local type inference, pattern matching,
traits, lazy vals, by-name parameters, x:T syntax,
dependent types, implicit parameters, and more
Many other languages followed suit by
adopting some of these features:
C#, Kotlin, Swift, Java, …
🎉
Derailing It
• Scala as a worse Haskell for the JVM
• A better Java, without Scala’s deep parts
Both take one half of Scala’s features, but ignore
the synthesis
Derailing It
Haskalator: Scala as a worse Haskell for the JVM
• Haskell is a great language
• But Scala is not a good basis for emulating all
Haskell patterns
• If you choose to ignore Scala’s OOP parts,
there’s little point in using it at all!
Derailing It
A better Java, without Scala’s deep parts
• new languages such as Kotlin, Swift,
• improved languages such as C#, Java
• trade abstraction & composition for more ad-
hoc features,
• avoid the more esoteric FP parts by making it
less pleasant to express them.
à larger language, simpler programs?
0
200
400
600
800
1000
1200
1400
1600
python haskell scala kotlin swift java8 c++ csharp
Grammar size in lines
Grammar size in lines
The Way Forward
We believe Scala’s fusion of FP and OOP is
still the most promising way forward for
general purpose software development.
But…
The Way Forward
But there are lots of things we have learned
since the inception of Scala, including
1. how to be pure without sacrificing
simplicity and performance
2. how to do meta programming, safely
3. how to cut down on boilerplate for new
idioms
The Way Forward
Incorporate these new techniques in the
language, to make it simpler, more focused,
and more pleasant to use.
Realizing Scala’s Potential
• become more opinionated
• simplify
• eliminate inconsistencies and puzzlers
• build on strong foundations
• consolidate language constructs to improve
consistency
safety
ergonomics
performance
Consistency
Improve orthogonality and eliminate restrictions:
• Intersection types A & B
• Union types A | B
• Implicit function types implicit A => B
• Dependent function types (x: A) => x.B
• Trait parameters trait T(x: A)
• Generic tuples (a, b, c)
== (a, (b, (c, ()))
Ergonomics
Make code readable and concise
• Enums enum Color {
case Red, Green, Blue
}
• Type lambdas [X] => F[X]
Safety
Enable precise domain modeling and safe refactoring.
• Multiversal equality List(“a”) == “b”
• Restrict implicit conversions
Also planned:
• Null safety String | Null
• Effect capabilities
Performance
Make abstractions cheaper:
• Opaque types opaque type A = B
• Erased parameters def f(erased x: A =:= B)
Removed
• existential types using forSome
• procedure syntax
• early initiliazers
• XML literals
• limit 22
• automatic () insertion
• weak conformance
• auto-tupling
• multi-parameter infix operators
Implicit Improvements
Implicits turned out to be where Scala innovated most.
They can be both a
blessing and a curse.
Goal for Scala 3:
Fewer curses!
à Simplicitly,
POPL 2018
so far:
Implicit Conversions
Implicit Parameters
in the future:
Implicit Conversions
Implicit Parameters
Cutting-down on implicit conversions
Extension clauses can subsume most valid use cases:
case class Circle(x: Double, y: Double, radius: Double)
extension CircleOps for Circle {
def circumference = radius * Pi * 2
}
instead of
implicit class CircleOps(circle: Circle)
extends AnyVal {
def circumference = circle.radius * Pi * 2
}
Cutting-down on implicit conversions
Most other uses (not just definitions!) require a
language import:
import language.implicitConversions
implicit def str2int(x: String) = x.toInt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import language.implicitConversions
val x: Int = “123”
*exempted are only conversions co-defined with their target type
Making Implicit Parameters more Useful
Multiple implicit
clauses
Explicit
applications
Implicit function
types
def f(implicit x: A)
(y: B)
(implicit z: C) = …
f.explicitly(a)(b)
implicit A => B
Implicit Function Types:
get purity without sacrificing
simplicity and performance.
Tooling
So far, we have:
• a new compiler: dotc
• rich IDE support through LSP with direct
support for VS Code.
• REPL
• Doc-tool
Most tooling is built around Tasty
Tasty
Typed abstract syntax trees
• serialization format for Scala
• complete position and type information
• all implicits are expanded out
• surprisingly compact (~ same size as
source)
The Tasty Vision
Tasty
.scala (2.x)
.scala (3.x)
.class (Java 8)
.js
.class (Java 11)
.out
macros
analyzers
optimizers
IDE
LSP
Tasty Use Cases
• Separate compilation
• Language servers for IDEs (via LSP)
• Macros
• Cross-building
à escape the curse of binary compatibility
Meta Programming, So Far
• Def macros (experimental),
macro paradise (plugin).
- Both are thin veneers around nsc.
• Scala Meta: External tools that analyze
and transform programs.
Principled Meta Programming
2 + 2 fundamental operators:
‘( … ) (quote)
~(...) (splice)
run
inline
Quote, splice + inline : macros
Quote, splice + run : staging
Principled Meta Programming
T Expr[T]
Restriction: Can’t look inside an Expr.
splice ~(…)
quote ‘(…)
Principled Meta Programming
T Expr[T] tasty.Tree
Solution: Bijection between Expr[T] (high-level)
and tasty.Tree (low-level)
reflect
reifysplice ~(…)
quote ‘(…)
The Tasty Vision
Tasty
.scala (2.x)
.scala (3.x)
.class (Java 8)
.js
.class (Java 11)
.out
macros
analyzers
optimizers
IDE
LSP
New Macros are “Blackbox”
They get expanded after type checking.
à Program must typecheck before
macros are expanded
à Macros always work on typed trees
à Hygienic by definition
à Drastically reduces # things that can
go wrong
Language-Level Solutions for
Lazy implicits ✔
Type lambdas ✔
Context injection ✔
Typeclass derivation (still to do)
Typelevel functions (to be explored)
Migration
• Despite many differences, Scala 2 and 3 are
still fundamentally the same language
• Source compatibility for common subset.
• Rewrite tools can handle much of the rest
(macros are the big exception here).
• Situation better than for Python 2 vs 3 because
of static typing & binary compatibility.
Binary Compatibility
today:
Dotty can link with
Scala-2.12 class files.
Scala 2 module
Dotty module
Binary Compatibility
today:
Dotty can link with
Scala-2.12 class files.
planned:
Two way compatibility
using Tasty as common
intermediate format.
Scala 2 module
Scala 3 module
Scala 2 module
Scala 3 module
Roadmap
2018 Flesh out design Dotty 0.x
Get feedback
Refinements
2019, first half -------------- Feature freeze ---------------
Scala 3
Stabilization dev previews
2020, first half Scala 3.0
Stability
So far:
• Most Scala 2 regression tests are in the Scala 3
test suite.
• Community build for core libraries and tools.
• All tools are built using Scala 2 first, and then
again with dotc.
Stability
Planned:
• Once there are developer previews, ensure that
core projects are published for Scala 3.
• Use dotc itself as the bootstrap root.
à“eat our own dogfood”
should use Scala 3 features in our own tools.
Try It Out Today!
dotty.epfl.ch
New versions are released every 6 weeks.
Questions,
Suggestions,
Concerns?
Talk to us anytime.
Also, there’s a panel where we will
respond to questions at the end of the
conference.
Plus, a contributors workshop on Friday.
Talk to Heather if you want to go.

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Gentle Introduction to Scala
Gentle Introduction to ScalaGentle Introduction to Scala
Gentle Introduction to Scala
 
ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
 
Boost your productivity with Scala tooling!
Boost your productivity  with Scala tooling!Boost your productivity  with Scala tooling!
Boost your productivity with Scala tooling!
 
Quick introduction to scala
Quick introduction to scalaQuick introduction to scala
Quick introduction to scala
 
Algebraic Data Types for Data Oriented Programming - From Haskell and Scala t...
Algebraic Data Types forData Oriented Programming - From Haskell and Scala t...Algebraic Data Types forData Oriented Programming - From Haskell and Scala t...
Algebraic Data Types for Data Oriented Programming - From Haskell and Scala t...
 
Be Smart, Constrain Your Types to Free Your Brain!
Be Smart, Constrain Your Types to Free Your Brain!Be Smart, Constrain Your Types to Free Your Brain!
Be Smart, Constrain Your Types to Free Your Brain!
 
Monoids - Part 1 - with examples using Scalaz and Cats
Monoids - Part 1 - with examples using Scalaz and CatsMonoids - Part 1 - with examples using Scalaz and Cats
Monoids - Part 1 - with examples using Scalaz and Cats
 
Quill vs Slick Smackdown
Quill vs Slick SmackdownQuill vs Slick Smackdown
Quill vs Slick Smackdown
 
ZIO-Direct - Functional Scala 2022
ZIO-Direct - Functional Scala 2022ZIO-Direct - Functional Scala 2022
ZIO-Direct - Functional Scala 2022
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
 
Functional Design Patterns (DevTernity 2018)
Functional Design Patterns (DevTernity 2018)Functional Design Patterns (DevTernity 2018)
Functional Design Patterns (DevTernity 2018)
 
Sum and Product Types - The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types - The Fruit Salad & Fruit Snack Example - From F# to Ha...
 
Scala collection
Scala collectionScala collection
Scala collection
 
The aggregate function - from sequential and parallel folds to parallel aggre...
The aggregate function - from sequential and parallel folds to parallel aggre...The aggregate function - from sequential and parallel folds to parallel aggre...
The aggregate function - from sequential and parallel folds to parallel aggre...
 
Reitit - Clojure/North 2019
Reitit - Clojure/North 2019Reitit - Clojure/North 2019
Reitit - Clojure/North 2019
 
From object oriented to functional domain modeling
From object oriented to functional domain modelingFrom object oriented to functional domain modeling
From object oriented to functional domain modeling
 
Python Advanced – Building on the foundation
Python Advanced – Building on the foundationPython Advanced – Building on the foundation
Python Advanced – Building on the foundation
 
Implicit parameters, when to use them (or not)!
Implicit parameters, when to use them (or not)!Implicit parameters, when to use them (or not)!
Implicit parameters, when to use them (or not)!
 
Programación Funcional 101 con Scala y ZIO 2.0
Programación Funcional 101 con Scala y ZIO 2.0Programación Funcional 101 con Scala y ZIO 2.0
Programación Funcional 101 con Scala y ZIO 2.0
 
Feature toggles
Feature togglesFeature toggles
Feature toggles
 

Semelhante a Preparing for Scala 3

Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of Scala
Scala Italy
 
AestasIT - Internal DSLs in Scala
AestasIT - Internal DSLs in ScalaAestasIT - Internal DSLs in Scala
AestasIT - Internal DSLs in Scala
Dmitry Buzdin
 

Semelhante a Preparing for Scala 3 (20)

Scala Days NYC 2016
Scala Days NYC 2016Scala Days NYC 2016
Scala Days NYC 2016
 
Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of Scala
 
Scalax
ScalaxScalax
Scalax
 
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
 
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
Sviluppare applicazioni nell'era dei "Big Data" con Scala e Spark - Mario Car...
 
AestasIT - Internal DSLs in Scala
AestasIT - Internal DSLs in ScalaAestasIT - Internal DSLs in Scala
AestasIT - Internal DSLs in Scala
 
Spark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin OderskySpark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin Odersky
 
The Evolution of Scala
The Evolution of ScalaThe Evolution of Scala
The Evolution of Scala
 
The Evolution of Scala / Scala進化論
The Evolution of Scala / Scala進化論The Evolution of Scala / Scala進化論
The Evolution of Scala / Scala進化論
 
Scala final ppt vinay
Scala final ppt vinayScala final ppt vinay
Scala final ppt vinay
 
What`s New in Java 8
What`s New in Java 8What`s New in Java 8
What`s New in Java 8
 
Scala Days San Francisco
Scala Days San FranciscoScala Days San Francisco
Scala Days San Francisco
 
Realizing the Promise of Portable Data Processing with Apache Beam
Realizing the Promise of Portable Data Processing with Apache BeamRealizing the Promise of Portable Data Processing with Apache Beam
Realizing the Promise of Portable Data Processing with Apache Beam
 
Java 8 Lambda
Java 8 LambdaJava 8 Lambda
Java 8 Lambda
 
Realizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache BeamRealizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache Beam
 
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and Xitrum
 
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGNIntroducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
 
Migrating 25K lines of Ant scripting to Gradle
Migrating 25K lines of Ant scripting to GradleMigrating 25K lines of Ant scripting to Gradle
Migrating 25K lines of Ant scripting to Gradle
 
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
 

Mais de Martin Odersky

flatMap Oslo presentation slides
flatMap Oslo presentation slidesflatMap Oslo presentation slides
flatMap Oslo presentation slides
Martin Odersky
 

Mais de Martin Odersky (14)

scalar.pdf
scalar.pdfscalar.pdf
scalar.pdf
 
Simplicitly
SimplicitlySimplicitly
Simplicitly
 
What To Leave Implicit
What To Leave ImplicitWhat To Leave Implicit
What To Leave Implicit
 
What To Leave Implicit
What To Leave ImplicitWhat To Leave Implicit
What To Leave Implicit
 
From DOT to Dotty
From DOT to DottyFrom DOT to Dotty
From DOT to Dotty
 
Implementing Higher-Kinded Types in Dotty
Implementing Higher-Kinded Types in DottyImplementing Higher-Kinded Types in Dotty
Implementing Higher-Kinded Types in Dotty
 
Compilers Are Databases
Compilers Are DatabasesCompilers Are Databases
Compilers Are Databases
 
Scala - The Simple Parts, SFScala presentation
Scala - The Simple Parts, SFScala presentationScala - The Simple Parts, SFScala presentation
Scala - The Simple Parts, SFScala presentation
 
Flatmap
FlatmapFlatmap
Flatmap
 
flatMap Oslo presentation slides
flatMap Oslo presentation slidesflatMap Oslo presentation slides
flatMap Oslo presentation slides
 
Devoxx
DevoxxDevoxx
Devoxx
 
Oscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simpleOscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simple
 
Scala eXchange opening
Scala eXchange openingScala eXchange opening
Scala eXchange opening
 
Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

Preparing for Scala 3

  • 1. Preparing For Scala 3 Adrian Moors Martin Odersky Scala Days Berlin April 2018
  • 2. Roadmap (from previous years) Scala 2.12 Scala 2.13 Scala 3.0 TASTY, middle end? stdlib collections Dotty 0.1 Dotty 0.x releases 2016 backend, classpath handling Scala 2.14 2017 2018 This is open source work, depends on community’s contributions. à Roadmap is tentative, no promises: “MVP” = minimal viable prototype Scala 2.15? migration
  • 3. Roadmap (now) Scala 2.12 Scala 2.13 Scala 3.0 TASTY, middle end? stdlib collections Dotty 0.1 Dotty 0.x releases 2016 backend, classpath handling Scala 2.14 2017 2018 This is open source work, depends on community’s contributions. à Roadmap has held up pretty well so far! “MVP” = minimal viable prototype migration Early 2020 Early 2020
  • 4. License Change http://scala-lang.org/news/license-change.html BSD 3 à Apache v2.0 Concerns? let us know by Aug 10
  • 7. The Essence of Scala: Fusion of functional and object-oriented programming
  • 8. The Essence of Scala: Fusion of functional and object-oriented programming in a typed setting • functions for the logic • objects for the modularity
  • 9. Success! Starting from a statically typed OO core language, Scala pioneered closures, function types, expression orientation, tuples, local type inference, pattern matching, traits, lazy vals, by-name parameters, x:T syntax, dependent types, implicit parameters, and more Many other languages followed suit by adopting some of these features: C#, Kotlin, Swift, Java, … 🎉
  • 10. Derailing It • Scala as a worse Haskell for the JVM • A better Java, without Scala’s deep parts Both take one half of Scala’s features, but ignore the synthesis
  • 11. Derailing It Haskalator: Scala as a worse Haskell for the JVM • Haskell is a great language • But Scala is not a good basis for emulating all Haskell patterns • If you choose to ignore Scala’s OOP parts, there’s little point in using it at all!
  • 12. Derailing It A better Java, without Scala’s deep parts • new languages such as Kotlin, Swift, • improved languages such as C#, Java • trade abstraction & composition for more ad- hoc features, • avoid the more esoteric FP parts by making it less pleasant to express them. à larger language, simpler programs?
  • 13. 0 200 400 600 800 1000 1200 1400 1600 python haskell scala kotlin swift java8 c++ csharp Grammar size in lines Grammar size in lines
  • 14. The Way Forward We believe Scala’s fusion of FP and OOP is still the most promising way forward for general purpose software development. But…
  • 15. The Way Forward But there are lots of things we have learned since the inception of Scala, including 1. how to be pure without sacrificing simplicity and performance 2. how to do meta programming, safely 3. how to cut down on boilerplate for new idioms
  • 16. The Way Forward Incorporate these new techniques in the language, to make it simpler, more focused, and more pleasant to use.
  • 17. Realizing Scala’s Potential • become more opinionated • simplify • eliminate inconsistencies and puzzlers • build on strong foundations • consolidate language constructs to improve consistency safety ergonomics performance
  • 18. Consistency Improve orthogonality and eliminate restrictions: • Intersection types A & B • Union types A | B • Implicit function types implicit A => B • Dependent function types (x: A) => x.B • Trait parameters trait T(x: A) • Generic tuples (a, b, c) == (a, (b, (c, ()))
  • 19. Ergonomics Make code readable and concise • Enums enum Color { case Red, Green, Blue } • Type lambdas [X] => F[X]
  • 20. Safety Enable precise domain modeling and safe refactoring. • Multiversal equality List(“a”) == “b” • Restrict implicit conversions Also planned: • Null safety String | Null • Effect capabilities
  • 21. Performance Make abstractions cheaper: • Opaque types opaque type A = B • Erased parameters def f(erased x: A =:= B)
  • 22. Removed • existential types using forSome • procedure syntax • early initiliazers • XML literals • limit 22 • automatic () insertion • weak conformance • auto-tupling • multi-parameter infix operators
  • 23. Implicit Improvements Implicits turned out to be where Scala innovated most. They can be both a blessing and a curse. Goal for Scala 3: Fewer curses! à Simplicitly, POPL 2018
  • 25. in the future: Implicit Conversions Implicit Parameters
  • 26. Cutting-down on implicit conversions Extension clauses can subsume most valid use cases: case class Circle(x: Double, y: Double, radius: Double) extension CircleOps for Circle { def circumference = radius * Pi * 2 } instead of implicit class CircleOps(circle: Circle) extends AnyVal { def circumference = circle.radius * Pi * 2 }
  • 27. Cutting-down on implicit conversions Most other uses (not just definitions!) require a language import: import language.implicitConversions implicit def str2int(x: String) = x.toInt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ import language.implicitConversions val x: Int = “123” *exempted are only conversions co-defined with their target type
  • 28. Making Implicit Parameters more Useful Multiple implicit clauses Explicit applications Implicit function types def f(implicit x: A) (y: B) (implicit z: C) = … f.explicitly(a)(b) implicit A => B
  • 29. Implicit Function Types: get purity without sacrificing simplicity and performance.
  • 30. Tooling So far, we have: • a new compiler: dotc • rich IDE support through LSP with direct support for VS Code. • REPL • Doc-tool Most tooling is built around Tasty
  • 31. Tasty Typed abstract syntax trees • serialization format for Scala • complete position and type information • all implicits are expanded out • surprisingly compact (~ same size as source)
  • 32. The Tasty Vision Tasty .scala (2.x) .scala (3.x) .class (Java 8) .js .class (Java 11) .out macros analyzers optimizers IDE LSP
  • 33. Tasty Use Cases • Separate compilation • Language servers for IDEs (via LSP) • Macros • Cross-building à escape the curse of binary compatibility
  • 34. Meta Programming, So Far • Def macros (experimental), macro paradise (plugin). - Both are thin veneers around nsc. • Scala Meta: External tools that analyze and transform programs.
  • 35. Principled Meta Programming 2 + 2 fundamental operators: ‘( … ) (quote) ~(...) (splice) run inline Quote, splice + inline : macros Quote, splice + run : staging
  • 36. Principled Meta Programming T Expr[T] Restriction: Can’t look inside an Expr. splice ~(…) quote ‘(…)
  • 37. Principled Meta Programming T Expr[T] tasty.Tree Solution: Bijection between Expr[T] (high-level) and tasty.Tree (low-level) reflect reifysplice ~(…) quote ‘(…)
  • 38. The Tasty Vision Tasty .scala (2.x) .scala (3.x) .class (Java 8) .js .class (Java 11) .out macros analyzers optimizers IDE LSP
  • 39. New Macros are “Blackbox” They get expanded after type checking. à Program must typecheck before macros are expanded à Macros always work on typed trees à Hygienic by definition à Drastically reduces # things that can go wrong
  • 40. Language-Level Solutions for Lazy implicits ✔ Type lambdas ✔ Context injection ✔ Typeclass derivation (still to do) Typelevel functions (to be explored)
  • 41. Migration • Despite many differences, Scala 2 and 3 are still fundamentally the same language • Source compatibility for common subset. • Rewrite tools can handle much of the rest (macros are the big exception here). • Situation better than for Python 2 vs 3 because of static typing & binary compatibility.
  • 42. Binary Compatibility today: Dotty can link with Scala-2.12 class files. Scala 2 module Dotty module
  • 43. Binary Compatibility today: Dotty can link with Scala-2.12 class files. planned: Two way compatibility using Tasty as common intermediate format. Scala 2 module Scala 3 module Scala 2 module Scala 3 module
  • 44. Roadmap 2018 Flesh out design Dotty 0.x Get feedback Refinements 2019, first half -------------- Feature freeze --------------- Scala 3 Stabilization dev previews 2020, first half Scala 3.0
  • 45. Stability So far: • Most Scala 2 regression tests are in the Scala 3 test suite. • Community build for core libraries and tools. • All tools are built using Scala 2 first, and then again with dotc.
  • 46. Stability Planned: • Once there are developer previews, ensure that core projects are published for Scala 3. • Use dotc itself as the bootstrap root. à“eat our own dogfood” should use Scala 3 features in our own tools.
  • 47. Try It Out Today! dotty.epfl.ch New versions are released every 6 weeks.
  • 48. Questions, Suggestions, Concerns? Talk to us anytime. Also, there’s a panel where we will respond to questions at the end of the conference. Plus, a contributors workshop on Friday. Talk to Heather if you want to go.