Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scala Reloaded
Search
Mac
May 14, 2015
Programming
45
0
Share
Scala Reloaded
Updated version of my scala talk
Mac
May 14, 2015
Other Decks in Programming
See All in Programming
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.4k
Oxlintはいかにしてtsgolintのlint ruleを呼び出しているのか
syumai
2
1.1k
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
300
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
260
JavaDoc 再入門
nagise
0
240
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
130
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
140
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.4k
AIエージェントの隔離技術の徹底比較
kawayu
0
450
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
2.9k
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
460
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Context Engineering - Making Every Token Count
addyosmani
9
930
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
130
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
540
Into the Great Unknown - MozCon
thekraken
41
2.5k
ラッコキーワード サービス紹介資料
rakko
1
3.5M
Transcript
Scala Mac Liaw
[email protected]
twitter:wmacgyver Materials drawn from:Michael Galpin’s SFJUG
Presentation
None
Scala? Statically Typed Language on Java VM Object
Oriented Language Functional Language Scalable Language Concurrency
Smart Type System var name:String = “Powerful the Dark Side
is”;
Smart Type System var name = “Powerful the Dark Side
is”;
Smart Type System var name = “Powerful the Dark Side
is”; def makeList(a:String, b:String):List[String] = { return a :: b :: Nil; }
Smart Type System var name = “Powerful the Dark Side
is”; def makeList(a:String, b:String):List[String] = { return a :: b :: Nil }
Smart Type System var name = “Powerful the Dark Side
is”; def makeList(a:String, b:String):List[String] = { a :: b :: Nil }
Smart Type System var name = “Powerful the Dark Side
is”; def makeList(a:String, b:String):List[String] = a :: b :: Nil
Smart Type System var name = “Powerful the Dark Side
is”; def makeList(a:String, b:String) = a :: b :: Nil
Object Orieted No primitives No int, just Int
No String[], just Array[String] No operators + - * / ++ += are just names for methods
Scala Objects class SimpleGreeter { val greeting = "Hello, world!"
def greet() = println(greeting) } val g = new SimpleGreeter g.greet()
Traits & Mixins trait Friendly { def greet()="Hi" } class
Cat extends Friendly {} class HungryCat extends Friendly { override def greet() = "Meow" } trait HyperGreeter extends Friendly {override def greet() = super.greet() + "!!!!!!!" }
Traits & Mixins trait Friendly { def greet()="Hi" } class
Cat extends Friendly {} class HungryCat extends Friendly { override def greet() = "Meow" } trait HyperGreeter extends Friendly {override def greet() = super.greet() + "!!!!!!!" } var pet = new Cat println(pet.greet()) //print Hi
Traits & Mixins trait Friendly { def greet()="Hi" } class
Cat extends Friendly {} class HungryCat extends Friendly { override def greet() = "Meow" } trait HyperGreeter extends Friendly {override def greet() = super.greet() + "!!!!!!!" } var pet = new HungryCat println(pet.greet()) //print Meow
Traits & Mixins trait Friendly { def greet()="Hi" } class
Cat extends Friendly {} class HungryCat extends Friendly { override def greet() = "Meow" } trait HyperGreeter extends Friendly {override def greet() = super.greet() + "!!!!!!!" } var pet = new HungryCat with HyperGreeter println(pet.greet()) // print Meow!!!!!!!
Domain Specific Language Built-in support for two DSLS
XML Actors
XML DSL import scala.xml._ object XMLSample { def main(args: Array[String])
{ val df = java.text.DateFormat.getDateInstance() val dateString = df.format(new java.util.Date()) def theDate(name: String) = <dateMsg addressedTo={ name }> Hello, { name }! Today is { dateString } </dateMsg>; println(theDate("Mac").toString()) } }
XML DSL <dateMsg addressedTo="Mac"> Hello, Mac! Today is May 13,
2015 </dateMsg>
Actors Actor Model: A Different Way to Implement Concurrency
Actors Actor Model: A Different Way to Implement Concurrency
Each Object is an Actor
Actors Actor Model: A Different Way to Implement Concurrency
Each Object is an Actor Each Actor has a Mailbox
Actors Actor Model: A Different Way to Implement Concurrency
Each Object is an Actor Each Actor has a Mailbox Actors (Asynchronously) Send Messages and Receive them in their Mailbox
Actors Actor Model: A Different Way to Implement Concurrency
Each Object is an Actor Each Actor has a Mailbox Actors (Asynchronously) Send Messages and Receive them in their Mailbox Shares NOTHING!
Why Erlang Is Right? No code changes for Multi-threaded
vs Single-threaded No Mutable State No Locking, thus no DEAD Locks. Let it Crash
Actor Example import akka.actor._ class YodaActor extends Actor { def
receive = { case _ => println("Yoda rules!") } } class VaderActor extends Actor { def receive = { case "luke" => println("No, I'm your father!") case _ => println("Darkside rules!") } }
Actor Example object Main { def main(args: Array[String]) { val
system = ActorSystem("StarWarsSystem") val yodaActor = system.actorOf(Props[YodaActor], name = "yodaactor") val vaderActor = system.actorOf(Props[VaderActor], name = "vaderactor") yodaActor ! "yes?" vaderActor ! "jedi" vaderActor ! "luke" } }