SlideShare a Scribd company logo
Scalaand its Ecosystem Petr Hošek D3S 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 compiler 02Scala tools & libraries 03Scala frameworks 04Collaborative Scaladoc 05Lessons learned 06Questions & 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: ,[object Object],Package sharing tool. ,[object Object],Tool for automatic test case generation. ,[object Object],Concurrent, scalable applications development. ,[object Object],Library for handling configuration and logging. ,[object Object],Extensions to the standard Scala library.
simple-build-tool sbaz ScalaTest, ScalaCheck, Specs Scalaz, Scalax Configgy ScalaModules, BindForge Akka, Kestrel Scalate Lift, Scalatra, sweet, pinky
simple-build-tool Simple 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" }}
specs Behaviour-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>}
Configgy Library 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 = true verbose {    node = "com.example.*"    level = "trace"  } } hostname = "example.com" port = 3000 Configgy.configure("~/example.conf") valconfig = Configgy.config valhostname = config.getString("hostname", "localhost") valport = config.getInt("port", 3000) vallog = Logger.get log.error("Unable to listen on %s:%d!", hostname, port)
03Scala frameworks
Akka framework Framework 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.
ScalaModules Domain 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.
Scalate Powerfull 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 framework Expressive 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.
Scaladoc Analogy 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.
Colladoc Allows 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.“
Mergedoc Allows 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

[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Pitangent Analytics & Technology Solutions Pvt. Ltd
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
Javier Junquera
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
Pablo Gómez Abajo
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Alpen-Adria-Universität
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
Neo4j
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Neo4j
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 

Recently uploaded (20)

[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Artificial Intelligence and Electronic Warfare
Artificial Intelligence and Electronic WarfareArtificial Intelligence and Electronic Warfare
Artificial Intelligence and Electronic Warfare
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 

Lessons Learned: Scala and its Ecosystem

  • 1. Scalaand its Ecosystem Petr Hošek D3S 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 compiler 02Scala tools & libraries 03Scala frameworks 04Collaborative Scaladoc 05Lessons learned 06Questions & 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.
  • 11. simple-build-tool sbaz ScalaTest, ScalaCheck, Specs Scalaz, Scalax Configgy ScalaModules, BindForge Akka, Kestrel Scalate Lift, Scalatra, sweet, pinky
  • 12. simple-build-tool Simple 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. specs Behaviour-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. Configgy Library 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 = true verbose { node = "com.example.*" level = "trace" } } hostname = "example.com" port = 3000 Configgy.configure("~/example.conf") valconfig = Configgy.config valhostname = config.getString("hostname", "localhost") valport = config.getInt("port", 3000) vallog = Logger.get log.error("Unable to listen on %s:%d!", hostname, port)
  • 19. Akka framework Framework 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. ScalaModules Domain 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. Scalate Powerfull 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 framework Expressive 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. Scaladoc Analogy 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. Colladoc Allows 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. Mergedoc Allows 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.