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 WorkSkills 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 HerokuSalesforce 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 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
 
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 PlayLuka 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
 
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
 
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
 
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
 
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 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJS
 
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

Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 

Recently uploaded (20)

Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 

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.