SlideShare a Scribd company logo
Scalaand its EcosystemPetr HošekD3S Seminar, September 2010
Language is useless without its ecosystem.Tools, libraries, frameworks, etc.Growing usage demands the need of ecosystem.Java ecosystem is not enough for Scala.
01Scala compiler02Scala tools & libraries03Scala frameworks04Collaborative Scaladoc05Lessons learned06Questions & Answers
01Scala compiler
Second generation of Scala compiler.Oficially named NSC (New Scala Compiler).Entirely developed in Scala itself (self-hosted).Compiles Scala directly into Java bytecode.
Allows to be used in several ways.Standalone, interactive, embedded.Designed to be completely re-entrant.Can be instantiated as any other class.Compilation consists of several phases.Each phases transforms the syntax tree.
Developed in entirely modular way.Compiler is composed of several component.Represented by traits.Compiler can be easily extended via plugins.They can be inserted in all phases of compilation.
02Scala tools & libraries
They form the basis of Scala ecosystem.Many new tools appeared in the last few months.Most of them replaces Java equivalents.New tools are coming up every day.
Well-known Scala tools and libraries:sbazPackage sharing tool.ScalaCheckTool for automatic test case generation.Akka frameworkConcurrent, scalable applications development.ConfiggyLibrary for handling configuration and logging.scalaz, scalaxExtensions to the standard Scala library.
simple-build-toolsbazScalaTest, ScalaCheck, SpecsScalaz, ScalaxConfiggyScalaModules, BindForgeAkka, KestrelScalateLift, Scalatra, sweet, pinky
simple-build-toolSimple but powerful build tool for Scala.Configuration is written directly in Scala.Provides interactive and batch mode.Dependency management support.Integrated supportfor many Scalatools.Lot of pluginsand extensions do exists.
import sbt._class ExampleProject(info: ProjectInfo) extendsParentProject(info) {override def fork = forkRun(Some(newFile("demo")), "-Xmx2G" :: Nil)  lazy val subA = project("subA", "Sub Project A", newExampleSubProject(_)) lazy val subB = project("subB", "Sub Project B", newExampleSubProject(_))  class ExampleSubProject(info: ProjectInfo) extendsDefaultProject(info) {defcompileOptions: Seq[CompileOption] = Verbose :: Nil    val specs = "org.scala-tools.testing" % "specs_2.8.0" % "1.6.5" % "test->default" }}
specsBehaviour-driven design framework for Scala.Simple and typed language for specifications.Benefits from Scala expressive syntax.Integration with testing tools and frameworks.JUnit, ScalaCheck, Mockito, etc.Support for literate programming.
classGreetingSpecification extendsHtmlSpecificationwithTextile{  "The greeting application"is<t>h3. PresentationThis new application should say "hello" in different languages.For example,<ex>by default, saying hello by default should use English</ex> { greet must_== "hello" } Then, other languages, like <ex>French and German should be supported too</ex> { eg {    greet("French") must_== "bonjour"    greet("German") must_== "hallo"  } }<ex>Japanese should be supported also</ex> { notImplemented } </t>}
ConfiggyLibrary for handling configuration and logging.Simple configuration format.But still very powerful.Support for JMX and notification of changes.Extremelly simple API.
include "/opt/config/local.conf"log (inherit="log-base"){ filename = "/var/log/example.log"  level = "debug"utc = trueverbose {   node = "com.example.*"   level = "trace" }}hostname = "example.com"port = 3000Configgy.configure("~/example.conf")valconfig = Configgy.configvalhostname = config.getString("hostname", "localhost")valport = config.getInt("port", 3000)vallog = Logger.getlog.error("Unable to listen on %s:%d!", hostname, port)
03Scala frameworks
Akka frameworkFramework for concurrent, fault-tolerant, scalable applications development.Based on event-driven approach.Provides actors, STM, transactors, etc.Together with Scala as well as Java API.Many add-on modules available.REST, Comet, Spring, Guice, OSGi integration, etc.
ScalaModulesDomain specific language for OSGi development.Written in Scala language.High-level abstraction of OSGi concepts.Eliminates much of the boilerplate code.Recently became Eclipse.org project.
ScalatePowerfull templating engine for Scala.Generating text or markup.Three different template formats.Mustache, Scaml and SSP.Each one designated for different use.Provides Console for easy template testing.
Lift web frameworkExpressive and elegant web framework.Benefiting from Scala language features.Embraces View-First approach to MVC.Importance of scalability and security.Without loss of performance or maintainability.Native support for Ajax a Comet.
04Collaborative Scaladoc
Newest addition to Scala ecosystem.Consisting currently from two applications.Contribution of Scala project documentation. New approach of documentation authoring.Using the concepts of social collaboration.
ScaladocAnalogy of Javadoc for Scala.Part of Scala compiler currently as second generation.Contains new sleek and modern interface.Provides improved comment syntax.Supports wiki-like syntax in the source comments.
ColladocAllows to edit Scala symbols documentation.Lift web application running the Scala compiler.Developed as a Google SoC 2010 project.Now being developed as open-source project.Based heavily upon Scaladoc 2 functionality.„Do not reinvent the wheel.“
MergedocAllows to merge changes into the source-code.Simple command-line utility.Built on top of Scala compiler.Not yet officially released.Reimplementation of scaladoc-merge tool.
Collaboration is the main goal.Using collaborative development tools.Joining the effort is easy.Fork and contribute at GitHub.Track the development at Lighthouse.Learn more at http://petrhosek.name/

More Related Content

What's hot

Scala Presentation Work
Scala Presentation WorkScala Presentation Work
Scala Presentation Work
Skills Matter
 
Build Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and HerokuBuild Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and Heroku
Salesforce Developers
 
Java 8 concurrency abstractions
Java 8 concurrency abstractionsJava 8 concurrency abstractions
Java 8 concurrency abstractions
Nawazish Mohammad Khan
 
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
scalaconfjp
 
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
scalaconfjp
 
Testing Spark and Scala
Testing Spark and ScalaTesting Spark and Scala
Testing Spark and Scala
datamantra
 
Introducing LINQ
Introducing LINQIntroducing LINQ
Introducing LINQ
LearnNowOnline
 
Building Scalable Applications with Laravel
Building Scalable Applications with LaravelBuilding Scalable Applications with Laravel
Building Scalable Applications with Laravel
Muhammad Shakeel
 
Lecture1
Lecture1Lecture1
Lecture1
Muhammad Fayyaz
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Codemotion
 
Scala Jump Start
Scala Jump StartScala Jump Start
Scala Jump Start
Haim Michael
 
Scala
ScalaScala
Scala Past, Present & Future
Scala Past, Present & FutureScala Past, Present & Future
Scala Past, Present & Future
mircodotta
 
Drilling the Async Library
Drilling the Async LibraryDrilling the Async Library
Drilling the Async Library
Knoldus Inc.
 
New Features of JAVA SE8
New Features of JAVA SE8New Features of JAVA SE8
New Features of JAVA SE8
Dinesh Pathak
 
Why scala - executive overview
Why scala - executive overviewWhy scala - executive overview
Why scala - executive overview
Razvan Cojocaru
 
Andrea Lattuada, Gabriele Petronella - Building startups on Scala
Andrea Lattuada, Gabriele Petronella - Building startups on ScalaAndrea Lattuada, Gabriele Petronella - Building startups on Scala
Andrea Lattuada, Gabriele Petronella - Building startups on Scala
Scala Italy
 
Java
JavaJava
Lambda Behave - Java 8's Testing Framework
Lambda Behave - Java 8's Testing FrameworkLambda Behave - Java 8's Testing Framework
Lambda Behave - Java 8's Testing Framework
sara stanford
 

What's hot (19)

Scala Presentation Work
Scala Presentation WorkScala Presentation Work
Scala Presentation Work
 
Build Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and HerokuBuild Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and Heroku
 
Java 8 concurrency abstractions
Java 8 concurrency abstractionsJava 8 concurrency abstractions
Java 8 concurrency abstractions
 
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
Scarab: SAT-based Constraint Programming System in Scala / Scala上で実現された制約プログラ...
 
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
Introduction to Spark SQL and Catalyst / Spark SQLおよびCalalystの紹介
 
Testing Spark and Scala
Testing Spark and ScalaTesting Spark and Scala
Testing Spark and Scala
 
Introducing LINQ
Introducing LINQIntroducing LINQ
Introducing LINQ
 
Building Scalable Applications with Laravel
Building Scalable Applications with LaravelBuilding Scalable Applications with Laravel
Building Scalable Applications with Laravel
 
Lecture1
Lecture1Lecture1
Lecture1
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
 
Scala Jump Start
Scala Jump StartScala Jump Start
Scala Jump Start
 
Scala
ScalaScala
Scala
 
Scala Past, Present & Future
Scala Past, Present & FutureScala Past, Present & Future
Scala Past, Present & Future
 
Drilling the Async Library
Drilling the Async LibraryDrilling the Async Library
Drilling the Async Library
 
New Features of JAVA SE8
New Features of JAVA SE8New Features of JAVA SE8
New Features of JAVA SE8
 
Why scala - executive overview
Why scala - executive overviewWhy scala - executive overview
Why scala - executive overview
 
Andrea Lattuada, Gabriele Petronella - Building startups on Scala
Andrea Lattuada, Gabriele Petronella - Building startups on ScalaAndrea Lattuada, Gabriele Petronella - Building startups on Scala
Andrea Lattuada, Gabriele Petronella - Building startups on Scala
 
Java
JavaJava
Java
 
Lambda Behave - Java 8's Testing Framework
Lambda Behave - Java 8's Testing FrameworkLambda Behave - Java 8's Testing Framework
Lambda Behave - Java 8's Testing Framework
 

Viewers also liked

Lightbend Training for Scala, Akka, Play Framework and Apache Spark
Lightbend Training for Scala, Akka, Play Framework and Apache SparkLightbend Training for Scala, Akka, Play Framework and Apache Spark
Lightbend Training for Scala, Akka, Play Framework and Apache Spark
Lightbend
 
Scala
ScalaScala
Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and Play
Luka Zakrajšek
 
The Play Framework at LinkedIn
The Play Framework at LinkedInThe Play Framework at LinkedIn
The Play Framework at LinkedIn
Yevgeniy Brikman
 
Securing Microservices using Play and Akka HTTP
Securing Microservices using Play and Akka HTTPSecuring Microservices using Play and Akka HTTP
Securing Microservices using Play and Akka HTTP
Rafal Gancarz
 
Project Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To JavaProject Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To Java
C4Media
 
facebook architecture for 600M users
facebook architecture for 600M usersfacebook architecture for 600M users
facebook architecture for 600M users
Jongyoon Choi
 
SQL to Hive Cheat Sheet
SQL to Hive Cheat SheetSQL to Hive Cheat Sheet
SQL to Hive Cheat Sheet
Hortonworks
 
Amazon EMR Deep Dive & Best Practices
Amazon EMR Deep Dive & Best PracticesAmazon EMR Deep Dive & Best Practices
Amazon EMR Deep Dive & Best Practices
Amazon Web Services
 

Viewers also liked (9)

Lightbend Training for Scala, Akka, Play Framework and Apache Spark
Lightbend Training for Scala, Akka, Play Framework and Apache SparkLightbend Training for Scala, Akka, Play Framework and Apache Spark
Lightbend Training for Scala, Akka, Play Framework and Apache Spark
 
Scala
ScalaScala
Scala
 
Typesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and PlayTypesafe stack - Scala, Akka and Play
Typesafe stack - Scala, Akka and Play
 
The Play Framework at LinkedIn
The Play Framework at LinkedInThe Play Framework at LinkedIn
The Play Framework at LinkedIn
 
Securing Microservices using Play and Akka HTTP
Securing Microservices using Play and Akka HTTPSecuring Microservices using Play and Akka HTTP
Securing Microservices using Play and Akka HTTP
 
Project Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To JavaProject Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To Java
 
facebook architecture for 600M users
facebook architecture for 600M usersfacebook architecture for 600M users
facebook architecture for 600M users
 
SQL to Hive Cheat Sheet
SQL to Hive Cheat SheetSQL to Hive Cheat Sheet
SQL to Hive Cheat Sheet
 
Amazon EMR Deep Dive & Best Practices
Amazon EMR Deep Dive & Best PracticesAmazon EMR Deep Dive & Best Practices
Amazon EMR Deep Dive & Best Practices
 

Similar to Lessons Learned: Scala and its Ecosystem

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...
Codemotion
 
Refactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 RecapRefactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 Recap
Dave Orme
 
Scala a case4
Scala a case4Scala a case4
Scala a case4
lee.gilbert
 
Scala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJS
Alberto Paro
 
Alberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsAlberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.js
Scala Italy
 
Unit 1 notes.pdf
Unit 1 notes.pdfUnit 1 notes.pdf
Unit 1 notes.pdf
Revathiparamanathan
 
Play Template Engine Based On Scala
Play Template Engine Based On ScalaPlay Template Engine Based On Scala
Play Template Engine Based On Scala
Knoldus Inc.
 
Ten Compelling Reasons to Go the Scala Development Way - Metadesign Solutions
Ten Compelling Reasons to Go the Scala Development Way - Metadesign SolutionsTen Compelling Reasons to Go the Scala Development Way - Metadesign Solutions
Ten Compelling Reasons to Go the Scala Development Way - Metadesign Solutions
MetaDesign Solutions
 
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...
Codemotion
 
Assist software awesome scala
Assist software   awesome scalaAssist software   awesome scala
Assist software awesome scala
AssistSoftware
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
Mohammad Hossein Rimaz
 
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to Scala
Derek Chen-Becker
 
Scala for n00bs by a n00b.
Scala for n00bs by a n00b.Scala for n00bs by a n00b.
Scala for n00bs by a n00b.
brandongulla
 
Bhadale Group of Companies - digital projects
Bhadale Group of Companies - digital projectsBhadale Group of Companies - digital projects
Bhadale Group of Companies - digital projects
Vijayananda Mohire
 
Eclipse Overview
Eclipse Overview Eclipse Overview
Eclipse Overview
Lars Vogel
 
SBT Crash Course
SBT Crash CourseSBT Crash Course
SBT Crash Course
Michal Bigos
 
Modular programming Using Object in Scala
Modular programming Using Object in ScalaModular programming Using Object in Scala
Modular programming Using Object in Scala
Knoldus Inc.
 
Infographic on Scala Programming Language
Infographic on Scala Programming LanguageInfographic on Scala Programming Language
Infographic on Scala Programming Language
Paddy Lock
 
Appsody
AppsodyAppsody
Scala days 2016 overview
Scala days 2016 overviewScala days 2016 overview
Scala days 2016 overview
Mayank Patel
 

Similar to Lessons Learned: Scala and its Ecosystem (20)

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...
 
Refactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 RecapRefactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 Recap
 
Scala a case4
Scala a case4Scala a case4
Scala a case4
 
Scala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJS
 
Alberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsAlberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.js
 
Unit 1 notes.pdf
Unit 1 notes.pdfUnit 1 notes.pdf
Unit 1 notes.pdf
 
Play Template Engine Based On Scala
Play Template Engine Based On ScalaPlay Template Engine Based On Scala
Play Template Engine Based On Scala
 
Ten Compelling Reasons to Go the Scala Development Way - Metadesign Solutions
Ten Compelling Reasons to Go the Scala Development Way - Metadesign SolutionsTen Compelling Reasons to Go the Scala Development Way - Metadesign Solutions
Ten Compelling Reasons to Go the Scala Development Way - Metadesign Solutions
 
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...
 
Assist software awesome scala
Assist software   awesome scalaAssist software   awesome scala
Assist software awesome scala
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to Scala
 
Scala for n00bs by a n00b.
Scala for n00bs by a n00b.Scala for n00bs by a n00b.
Scala for n00bs by a n00b.
 
Bhadale Group of Companies - digital projects
Bhadale Group of Companies - digital projectsBhadale Group of Companies - digital projects
Bhadale Group of Companies - digital projects
 
Eclipse Overview
Eclipse Overview Eclipse Overview
Eclipse Overview
 
SBT Crash Course
SBT Crash CourseSBT Crash Course
SBT Crash Course
 
Modular programming Using Object in Scala
Modular programming Using Object in ScalaModular programming Using Object in Scala
Modular programming Using Object in Scala
 
Infographic on Scala Programming Language
Infographic on Scala Programming LanguageInfographic on Scala Programming Language
Infographic on Scala Programming Language
 
Appsody
AppsodyAppsody
Appsody
 
Scala days 2016 overview
Scala days 2016 overviewScala days 2016 overview
Scala days 2016 overview
 

Recently uploaded

Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
sunilverma7884
 
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
alexjohnson7307
 
Opencast Summit 2024 — Opencast @ University of Münster
Opencast Summit 2024 — Opencast @ University of MünsterOpencast Summit 2024 — Opencast @ University of Münster
Opencast Summit 2024 — Opencast @ University of Münster
Matthias Neugebauer
 
Retrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with RagasRetrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with Ragas
Zilliz
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Nicolás Lopéz
 
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
bellared2
 
Redefining Cybersecurity with AI Capabilities
Redefining Cybersecurity with AI CapabilitiesRedefining Cybersecurity with AI Capabilities
Redefining Cybersecurity with AI Capabilities
Priyanka Aash
 
Accelerating Migrations = Recommendations
Accelerating Migrations = RecommendationsAccelerating Migrations = Recommendations
Accelerating Migrations = Recommendations
isBullShit
 
Mastering Board Best Practices: Essential Skills for Effective Non-profit Lea...
Mastering Board Best Practices: Essential Skills for Effective Non-profit Lea...Mastering Board Best Practices: Essential Skills for Effective Non-profit Lea...
Mastering Board Best Practices: Essential Skills for Effective Non-profit Lea...
OnBoard
 
UX Webinar Series: Aligning Authentication Experiences with Business Goals
UX Webinar Series: Aligning Authentication Experiences with Business GoalsUX Webinar Series: Aligning Authentication Experiences with Business Goals
UX Webinar Series: Aligning Authentication Experiences with Business Goals
FIDO Alliance
 
Sonkoloniya documentation - ONEprojukti.pdf
Sonkoloniya documentation - ONEprojukti.pdfSonkoloniya documentation - ONEprojukti.pdf
Sonkoloniya documentation - ONEprojukti.pdf
SubhamMandal40
 
Keynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive SecurityKeynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive Security
Priyanka Aash
 
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision MakingConnector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
DianaGray10
 
BLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
BLOCKCHAIN TECHNOLOGY - Advantages and DisadvantagesBLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
BLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
SAI KAILASH R
 
Intel Unveils Core Ultra 200V Lunar chip .pdf
Intel Unveils Core Ultra 200V Lunar chip .pdfIntel Unveils Core Ultra 200V Lunar chip .pdf
Intel Unveils Core Ultra 200V Lunar chip .pdf
Tech Guru
 
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
FIDO Alliance
 
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
FIDO Alliance
 
EuroPython 2024 - Streamlining Testing in a Large Python Codebase
EuroPython 2024 - Streamlining Testing in a Large Python CodebaseEuroPython 2024 - Streamlining Testing in a Large Python Codebase
EuroPython 2024 - Streamlining Testing in a Large Python Codebase
Jimmy Lai
 
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Zilliz
 
The History of Embeddings & Multimodal Embeddings
The History of Embeddings & Multimodal EmbeddingsThe History of Embeddings & Multimodal Embeddings
The History of Embeddings & Multimodal Embeddings
Zilliz
 

Recently uploaded (20)

Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
 
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
 
Opencast Summit 2024 — Opencast @ University of Münster
Opencast Summit 2024 — Opencast @ University of MünsterOpencast Summit 2024 — Opencast @ University of Münster
Opencast Summit 2024 — Opencast @ University of Münster
 
Retrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with RagasRetrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with Ragas
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
 
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
 
Redefining Cybersecurity with AI Capabilities
Redefining Cybersecurity with AI CapabilitiesRedefining Cybersecurity with AI Capabilities
Redefining Cybersecurity with AI Capabilities
 
Accelerating Migrations = Recommendations
Accelerating Migrations = RecommendationsAccelerating Migrations = Recommendations
Accelerating Migrations = Recommendations
 
Mastering Board Best Practices: Essential Skills for Effective Non-profit Lea...
Mastering Board Best Practices: Essential Skills for Effective Non-profit Lea...Mastering Board Best Practices: Essential Skills for Effective Non-profit Lea...
Mastering Board Best Practices: Essential Skills for Effective Non-profit Lea...
 
UX Webinar Series: Aligning Authentication Experiences with Business Goals
UX Webinar Series: Aligning Authentication Experiences with Business GoalsUX Webinar Series: Aligning Authentication Experiences with Business Goals
UX Webinar Series: Aligning Authentication Experiences with Business Goals
 
Sonkoloniya documentation - ONEprojukti.pdf
Sonkoloniya documentation - ONEprojukti.pdfSonkoloniya documentation - ONEprojukti.pdf
Sonkoloniya documentation - ONEprojukti.pdf
 
Keynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive SecurityKeynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive Security
 
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision MakingConnector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
 
BLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
BLOCKCHAIN TECHNOLOGY - Advantages and DisadvantagesBLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
BLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
 
Intel Unveils Core Ultra 200V Lunar chip .pdf
Intel Unveils Core Ultra 200V Lunar chip .pdfIntel Unveils Core Ultra 200V Lunar chip .pdf
Intel Unveils Core Ultra 200V Lunar chip .pdf
 
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
 
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
 
EuroPython 2024 - Streamlining Testing in a Large Python Codebase
EuroPython 2024 - Streamlining Testing in a Large Python CodebaseEuroPython 2024 - Streamlining Testing in a Large Python Codebase
EuroPython 2024 - Streamlining Testing in a Large Python Codebase
 
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
 
The History of Embeddings & Multimodal Embeddings
The History of Embeddings & Multimodal EmbeddingsThe History of Embeddings & Multimodal Embeddings
The History of Embeddings & Multimodal Embeddings
 

Lessons Learned: Scala and its Ecosystem

  • 1. Scalaand its EcosystemPetr HošekD3S Seminar, September 2010
  • 2. Language is useless without its ecosystem.Tools, libraries, frameworks, etc.Growing usage demands the need of ecosystem.Java ecosystem is not enough for Scala.
  • 3. 01Scala compiler02Scala tools & libraries03Scala frameworks04Collaborative Scaladoc05Lessons learned06Questions & Answers
  • 5. Second generation of Scala compiler.Oficially named NSC (New Scala Compiler).Entirely developed in Scala itself (self-hosted).Compiles Scala directly into Java bytecode.
  • 6. Allows to be used in several ways.Standalone, interactive, embedded.Designed to be completely re-entrant.Can be instantiated as any other class.Compilation consists of several phases.Each phases transforms the syntax tree.
  • 7. Developed in entirely modular way.Compiler is composed of several component.Represented by traits.Compiler can be easily extended via plugins.They can be inserted in all phases of compilation.
  • 8. 02Scala tools & libraries
  • 9. They form the basis of Scala ecosystem.Many new tools appeared in the last few months.Most of them replaces Java equivalents.New tools are coming up every day.
  • 10. Well-known Scala tools and libraries:sbazPackage sharing tool.ScalaCheckTool for automatic test case generation.Akka frameworkConcurrent, scalable applications development.ConfiggyLibrary for handling configuration and logging.scalaz, scalaxExtensions to the standard Scala library.
  • 11. simple-build-toolsbazScalaTest, ScalaCheck, SpecsScalaz, ScalaxConfiggyScalaModules, BindForgeAkka, KestrelScalateLift, Scalatra, sweet, pinky
  • 12. simple-build-toolSimple but powerful build tool for Scala.Configuration is written directly in Scala.Provides interactive and batch mode.Dependency management support.Integrated supportfor many Scalatools.Lot of pluginsand extensions do exists.
  • 13. import sbt._class ExampleProject(info: ProjectInfo) extendsParentProject(info) {override def fork = forkRun(Some(newFile("demo")), "-Xmx2G" :: Nil)  lazy val subA = project("subA", "Sub Project A", newExampleSubProject(_)) lazy val subB = project("subB", "Sub Project B", newExampleSubProject(_))  class ExampleSubProject(info: ProjectInfo) extendsDefaultProject(info) {defcompileOptions: Seq[CompileOption] = Verbose :: Nil  val specs = "org.scala-tools.testing" % "specs_2.8.0" % "1.6.5" % "test->default" }}
  • 14. specsBehaviour-driven design framework for Scala.Simple and typed language for specifications.Benefits from Scala expressive syntax.Integration with testing tools and frameworks.JUnit, ScalaCheck, Mockito, etc.Support for literate programming.
  • 15. classGreetingSpecification extendsHtmlSpecificationwithTextile{  "The greeting application"is<t>h3. PresentationThis new application should say "hello" in different languages.For example,<ex>by default, saying hello by default should use English</ex> { greet must_== "hello" } Then, other languages, like <ex>French and German should be supported too</ex> { eg {    greet("French") must_== "bonjour"    greet("German") must_== "hallo"  } }<ex>Japanese should be supported also</ex> { notImplemented } </t>}
  • 16. ConfiggyLibrary for handling configuration and logging.Simple configuration format.But still very powerful.Support for JMX and notification of changes.Extremelly simple API.
  • 17. include "/opt/config/local.conf"log (inherit="log-base"){ filename = "/var/log/example.log" level = "debug"utc = trueverbose { node = "com.example.*" level = "trace" }}hostname = "example.com"port = 3000Configgy.configure("~/example.conf")valconfig = Configgy.configvalhostname = config.getString("hostname", "localhost")valport = config.getInt("port", 3000)vallog = Logger.getlog.error("Unable to listen on %s:%d!", hostname, port)
  • 19. Akka frameworkFramework for concurrent, fault-tolerant, scalable applications development.Based on event-driven approach.Provides actors, STM, transactors, etc.Together with Scala as well as Java API.Many add-on modules available.REST, Comet, Spring, Guice, OSGi integration, etc.
  • 20. ScalaModulesDomain specific language for OSGi development.Written in Scala language.High-level abstraction of OSGi concepts.Eliminates much of the boilerplate code.Recently became Eclipse.org project.
  • 21. ScalatePowerfull templating engine for Scala.Generating text or markup.Three different template formats.Mustache, Scaml and SSP.Each one designated for different use.Provides Console for easy template testing.
  • 22. Lift web frameworkExpressive and elegant web framework.Benefiting from Scala language features.Embraces View-First approach to MVC.Importance of scalability and security.Without loss of performance or maintainability.Native support for Ajax a Comet.
  • 24. Newest addition to Scala ecosystem.Consisting currently from two applications.Contribution of Scala project documentation. New approach of documentation authoring.Using the concepts of social collaboration.
  • 25. ScaladocAnalogy of Javadoc for Scala.Part of Scala compiler currently as second generation.Contains new sleek and modern interface.Provides improved comment syntax.Supports wiki-like syntax in the source comments.
  • 26. ColladocAllows to edit Scala symbols documentation.Lift web application running the Scala compiler.Developed as a Google SoC 2010 project.Now being developed as open-source project.Based heavily upon Scaladoc 2 functionality.„Do not reinvent the wheel.“
  • 27. MergedocAllows to merge changes into the source-code.Simple command-line utility.Built on top of Scala compiler.Not yet officially released.Reimplementation of scaladoc-merge tool.
  • 28. Collaboration is the main goal.Using collaborative development tools.Joining the effort is easy.Fork and contribute at GitHub.Track the development at Lighthouse.Learn more at http://petrhosek.name/
  • 30. Many dimensions of simplicity and complexity.Scala itself is a relatively simple language.Grammar is somewhat smaller than Java or C#.Scalaconcepts are very general and orthogonal.They can be combined in a large number of ways.
  • 31. Scala is different from mainstream languages.C/C++, Java, C#, etc.Scala libraries & tools takes different approach.simple-build-tool, specs, Lift framework, etc.Learning Scala is not difficult.