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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Mac
May 14, 2015
Programming
0
44
Scala Reloaded
Updated version of my scala talk
Mac
May 14, 2015
Tweet
Share
Other Decks in Programming
See All in Programming
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
630
AgentCoreとHuman in the Loop
har1101
5
240
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
Grafana:建立系統全知視角的捷徑
blueswen
0
330
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
320
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Amusing Abliteration
ianozsvald
0
100
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
79
The browser strikes back
jonoalderson
0
400
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Statistics for Hackers
jakevdp
799
230k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
100
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
740
It's Worth the Effort
3n
188
29k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
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" } }