Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still...
Transcript of Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still...
![Page 1: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/1.jpg)
Scala.jsSafety & Sanity in the wild west of the web
Li Haoyi, Philly ETE 8/3/2015
![Page 2: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/2.jpg)
1.1 Who am I
Work at Dropbox on Web Infrastructure, writing Python/Coffeescript
Using Scala open-source since 2011
Contributor to Scala.js since 2013
![Page 3: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/3.jpg)
1.2 What is Scala.jsval (obj, misc) = objects(i)
val t = obj.intersectionTime(ray)
if (t > Epsilon &&
t < length - Epsilon){
visible = false
}
var tup = self.Ve.objects[i]
if (null !== tup)
obj = tup._1, misc = tup._2
else
throw (new MatchError).init(tup)
var t = obj.intersectionTime(ray)
t > Example$().Epsilon &&
t < length - Example$().Epsilon &&
(visible = !1)
![Page 4: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/4.jpg)
1.3 What is Scala.js?
Write Scala, Run Javascript, Make Website!
Compiler takes care of in between
100s of kb of code, ~1x as fast as “raw” JS
Supports entire Scala language, many libraries
![Page 5: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/5.jpg)
1.4 Why Scala?
Concise code due to powerful abstractions
Extreme Type safety!
Good tooling, broad ecosystem to depend on
![Page 6: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/6.jpg)
Live Demogithub.com/lihaoyi/workbench-example-app
![Page 7: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/7.jpg)
1.5 Notes from the Demo
Fast turn-around time
Compile errors when you make a mistake
Accurate in-editor autocomplete
![Page 8: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/8.jpg)
OpalWebSharper
2.1 How does Scala.js compare to...
![Page 9: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/9.jpg)
2.2 Everyone wants a better web SaferMore modular, expressive, reusable codeOne language across client/serverAsync supportMore tool-able & better toolingFewer warts
![Page 10: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/10.jpg)
2.3 SafetyUncaught TypeError: undefined is not a function
o.extend.trim
b
d.fx.step.(anonymous function)
o.fx.update
o.fx.step
F
o.fx.custom
![Page 11: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/11.jpg)
2.4 More Expressiverace = (winner, runners...) ->
print winner, runners
race = function() {
var winner = arguments[0]
var runners =
2 <= arguments.length ?
slice.call(arguments, 1) : [];
print(winner, runners);
};
![Page 12: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/12.jpg)
2.5 One language for client/server# This has been ported to our Python Emstring class
# Please keep them both in sync if you need to change something!
class Emstring
@em_snippet: (s, maxchars=50, location=0.75) ->
new Emstring(s.toString()).snippet(
maxchars, location
).toString()
![Page 13: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/13.jpg)
2.6 AsyncajaxFoo((a) =>
bar(a, (b) =>
baz(a, (c) =>
b + c
)
)
)
async{
var a = wait(ajaxFoo())
wait(bar(a)) + wait(baz(a))
}
![Page 14: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/14.jpg)
2.7 More Toolable/Better Tooling
![Page 15: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/15.jpg)
2.8 Fewer Warts
javascript> ["10", "10", "10", "10"].map(parseInt)[10, NaN, 2, 3] // WTF
![Page 16: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/16.jpg)
3.1 How does Scala.js compare to...
Javascript ES6/7CoffeescriptClojurescriptTypescriptDart
WARNING: mostly an outside perspective
![Page 17: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/17.jpg)
Safer Expressive Async Toolable Wart--
ES6/7 Still Un-typed Some amount of new syntax
Generators! Still Javascript Still Javascript
Coffee Still Un-typed Ridiculously concise
Nope Similar to Javascript
New syntaxes avoid warts
CLJS Still Un-typed Very powerful language
core/async Similar to Javascript
Whole new language
TS Types! Some amount of new syntax
Generators…later, in 1.6
Visual StudioIntelliJ
Still Javascript
Dart Types! Half JavascriptHalf Java
async/await,new in 1.9
Mostly EclipseIntelliJ works
Whole new language
Scala.js Very Strong Types!
Very powerful language
async/await Great support: Eclipse/IntelliJ
Whole new language
![Page 18: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/18.jpg)
4.1 What is a web application?
ServerBrowser
Browser
Database
Server
![Page 19: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/19.jpg)
4.1 What is a web application?
ServerBrowser
Browser
Database
Server
![Page 20: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/20.jpg)
4.1 What is a web application?
ServerBrowser
Browser
Database
Server
DANGER
DANGER
DANGERDANGER
Safety
Maybe
Saftety
?
![Page 21: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/21.jpg)
4.1 What is a web application?
ServerBrowser
Browser
Database
Server
DANGER
DANGERDANGER
Safety
Maybe
Saftety
?Safe
ty
![Page 22: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/22.jpg)
4.2 Typed HTML!div(
float.left,
p("I am cow"),
p("Hear me moo")
)
<div
style="float: left">
<p>I am cow</p>
<p>Hear me moo</p>
</div>
![Page 23: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/23.jpg)
4.2 Typed HTML!div(
float.elft,
p("I am cow"),
p("Hear me moo")
)
value elft is not a member of object float
float.elft,
^
Compilation failed
![Page 24: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/24.jpg)
4.2 Typed HTML!dvi(
float.left,
p("I am cow"),
p("Hear me moo")
)
Not found: value dvi
dvi(
^
Compilation failed
![Page 25: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/25.jpg)
4.3 What is a web application?
ServerBrowser
Browser
Database
Server
DANGERDANGER
Safety
Maybe
Saftety
?Safe
tySafety
![Page 26: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/26.jpg)
4.4 Hygienic, Typed CSS!trait Simple{
def btn = cls(
color := "red",
height := 125
)
def fade = cls.hover(
opacity := 0.5
)
}
.$pkg-Simple-btn{
color: red;
height: 125px;
}
.$pkg-Simple-fade:hover{
opacity: 0.5;
}
![Page 27: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/27.jpg)
4.4 Hygienic, Typed CSS!trait Simple{
def btn = cls(
colro := "red",
height := 125
)
def fade = cls.hover(
opacity := 0.5
)
}
Not found: value colro
colro := "red"
^
Compilation failed
![Page 28: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/28.jpg)
4.4 Hygienic, Typed CSS!trait Simple{
def btn = cls(
color := "red",
height := 125
)
def fade = cls.hovre(
opacity := 0.5
)
}
value hovre is not a member of object cls
def fade = cls.hovre(
^
Compilation failed
![Page 29: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/29.jpg)
4.5 Hygienic, Typed CSS!
val x = div(
cls := """
$pkg-Simple-btn
$pkg-Simple-fade
""",
h1(...),
p(...)
)
<div class="
$pkg-Simple-btn
$pkg-Simple-fade">
<h1>...</h1>
<p>...</p>
</div>
![Page 30: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/30.jpg)
4.5 Hygienic, Typed CSS!import Simple._
val x = div(
btn,
fade,
h1(...),
p(...)
)
<div class="
$pkg-Simple-btn
$pkg-Simple-fade">
<h1>...</h1>
<p>...</p>
</div>
![Page 31: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/31.jpg)
4.5 Hygienic, Typed CSS!import Simple._
val x = div(
btn,
fadee,
h1(...),
p(...)
)
Not found: value fadee
fadee,
^
Compilation failed
![Page 32: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/32.jpg)
4.6 What is a web application?
ServerBrowser
Browser
Database
ServerDANGERSafe
tyMay
be
Saftety
?Safe
tySafety
Safety
![Page 33: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/33.jpg)
4.7 Ajax!
var xhr = new XMLHttpRequest()
xhr.open("http://www.bit.ly")
xhr.onload = (x) => {
...
}
xhr.send()
import dom._
var xhr = new XMLHttpRequest()
xhr.open("http://www.bit.ly")
xhr.onload = (x:dom.Event) => {
...
}
xhr.send()
![Page 34: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/34.jpg)
4.7 Ajax!// Javascript
$j.ajax("/api/list", {
data: inputBox.value,
onComplete: function(res){ ... }
})
![Page 35: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/35.jpg)
4.7 Ajax!// Javascript
$j.ajax("/api/list", {
data: inputBox.value,
onComplete: function(res){ ... }
})
What if we could check this path?
![Page 36: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/36.jpg)
4.7 Ajax!// Javascript
$j.ajax("/api/list", {
data: inputBox.value,
onComplete: function(res){ ... }
})
What if we could check this path?
And this value?
![Page 37: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/37.jpg)
4.7 Ajax!// Javascript
$j.ajax("/api/list", {
data: inputBox.value,
onComplete: function(res){ ... }
})
What if we could check this path?
And this value?
And that we’re using this res the right way?
![Page 38: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/38.jpg)
4.7 Typed Ajax!// Javascript
$j.ajax("/api/list", {
data: inputBox.value,
onComplete: function(res){ ... }
})
// Scala.js
val res = Ajax[Api].list(inputBox.value).call()
![Page 39: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/39.jpg)
4.8 Typed Ajax!val res: Future[Seq[String]] =
Ajax[Api].list(inputBox.value).call()
![Page 40: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/40.jpg)
4.8 Typed Ajax!val res: Future[Seq[String]] =
Ajax[Api].lsit(inputBox.value).call()
value lsit is not a member of Api
Compilation failed
![Page 41: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/41.jpg)
4.8 Typed Ajax!val res: Future[Seq[String]] =
Ajax[Api].list(inputBox.value, "arg").call()
too many arguments for method list(value: S...
Compilation failed
![Page 42: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/42.jpg)
4.8 Typed Ajax!val res: Seq[String] =
Ajax[Api].list(inputBox.value).call()
type mismatch; found: Future[Seq[String]] ...
Compilation failed
![Page 43: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/43.jpg)
4.9 Typed Ajax!// API implementation
object Server extends Api{
def list(value: String) = ...
}
// API definition
trait Api{
def list(value: String): Seq[String]
}
![Page 44: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/44.jpg)
4.9 Typed Ajax!// API implementation
object Server extends Api{
def list(value: String, idx: String) = ...
}
// API definition
trait Api{
def list(value: String): Seq[String]
}
![Page 45: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/45.jpg)
4.9 Typed Ajax!// API implementation
object Server extends Api{
def list(value: String, idx: String) = ...
} Compilation failed: method list(...) in trait Api is not defined...
// API definition
trait Api{
def list(value: String): Seq[String]
}
![Page 46: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/46.jpg)
4.9 Typed Ajax!// API implementation
object Server extends Api{
def list(value: String, idx: String) = ...
}
// API definition
trait Api{
def list(value: String, idx: String): Seq[String]
}
![Page 47: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/47.jpg)
4.10 Typed Ajax!// API Usage
val res: Future[Seq[String]] =
Ajax[Api].list(inputBox.value).call()
Not enough arguments for method list(value: String, idx: Int)...Compilation failed
![Page 48: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/48.jpg)
4.10 Typed Ajax!// API Usage
val res: Future[Seq[String]] =
Ajax[Api].list(inputBox.value, 123).call()
![Page 49: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/49.jpg)
4.10 Typed Ajax!// API Usage
val res: Future[Seq[String]] =
Ajax[Api].list(inputBox.value, 123).call()
Got Int, expected String Ajax[Api].list(inputBox.value, 123).call() ^Compilation failed
![Page 50: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/50.jpg)
4.10 Typed Ajax!// API Usage
val res: Future[Seq[String]] =
Ajax[Api].list(inputBox.value, "123").call()
![Page 51: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/51.jpg)
4.10 Typed Ajax!// API Usage
val res: Future[Seq[String]] =
Ajax[Api].list(inputBox.value, "123").call()
Compilation Succeeded ^_^
![Page 52: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/52.jpg)
5.1 What is a web application?
ServerBrowser
Browser
Database
ServerSafe
tyMay
be
Saftety
?Safe
tySafety
Safety Safe
ty
![Page 53: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/53.jpg)
5.1 What is a web application?
ServerBrowser
Browser
Database
ServerSafe
tyMay
be
Saftety
?Safe
tySafety
Safety Safe
ty
![Page 54: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/54.jpg)
5.2 Scala.js gives you...
Everything that - ES6 gives (string-interp, const, class, =>, …)- Typescript gives (types, generics, …)
- Monads- Higher Kinded Types- Type-level Compuations
![Page 55: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/55.jpg)
5.3 Failure-modes we Conquered
undefined is not a functionMal-formed HTMLUn-used CSS classesUsing un-defined CSS classesCSS class-name collisionsMal-formed Ajax requests
![Page 56: Scala · ES6/7 Still Un-typed Some amount of new syntax Generators! Still Javascript Still Javascript Coffee Still Un-typed Ridiculously concise Nope Similar to Javascript New syntaxes](https://reader034.fdocuments.in/reader034/viewer/2022050308/5f70a91098cba947d15139d5/html5/thumbnails/56.jpg)
5.4 Safety & Sanity on the Web
Scala.js: expressive, safe web applications
Enforce safety throughout the entire application, not just the Javascript
Not 12 months from now, but today!