claudia doppioslash - time travel for game development with elm

159
Time Travel Time Travel for Game Development for Game Development with Elm with Elm by by @doppioslash @doppioslash 20th of November 2015 - Codemotion - Milan

Upload: codemotion

Post on 07-Jan-2017

233 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Claudia Doppioslash - Time Travel for game development with Elm

Time TravelTime Travelfor Game Developmentfor Game Development

with Elmwith Elmby by @doppioslash@doppioslash

20th of November 2015 - Codemotion - Milan

Page 2: Claudia Doppioslash - Time Travel for game development with Elm

+ClaudiaDoppioslash+ClaudiaDoppioslash

@doppioslash@doppioslash

blog.doppioslash.comblog.doppioslash.com

About meAbout me

Game Developer &Game Developer &

Functional ProgrammerFunctional Programmer

Page 3: Claudia Doppioslash - Time Travel for game development with Elm

Table of ContentsTable of ContentsGameDev workflow = hellTime Travelling Debugger?Meet ElmStructuring programs in ElmTime Travelling DemoGotchas

Page 4: Claudia Doppioslash - Time Travel for game development with Elm

What is the single mostWhat is the single mostsoul destroying thing insoul destroying thing in

game development?game development?

Page 5: Claudia Doppioslash - Time Travel for game development with Elm

What is the single most soulWhat is the single most souldestroying thing in gamedestroying thing in game

development?development?

C++?C++?

Page 6: Claudia Doppioslash - Time Travel for game development with Elm
Page 7: Claudia Doppioslash - Time Travel for game development with Elm

What is the single most soulWhat is the single most souldestroying thing in gamedestroying thing in game

development?development?

Having to redo a 10Having to redo a 10moves combo everymoves combo every

time you check iftime you check ifthe bug is gone?the bug is gone?

Page 8: Claudia Doppioslash - Time Travel for game development with Elm
Page 9: Claudia Doppioslash - Time Travel for game development with Elm

What is the single most soulWhat is the single most souldestroying thing in gamedestroying thing in game

development?development?

Projects gettingProjects gettingcanned?canned?

Page 10: Claudia Doppioslash - Time Travel for game development with Elm
Page 11: Claudia Doppioslash - Time Travel for game development with Elm

Slow Iteration timesSlow Iteration times

What is the single most soulWhat is the single most souldestroying thing in gamedestroying thing in game

development?development?

Page 12: Claudia Doppioslash - Time Travel for game development with Elm
Page 13: Claudia Doppioslash - Time Travel for game development with Elm

Example CommonExample CommonGame DevelopmentGame Development

WorkflowWorkflow(starring Unity)(starring Unity)

Page 14: Claudia Doppioslash - Time Travel for game development with Elm

1. Write some code1. Write some code

Example CommonExample Common

Game Development WorkflowGame Development Workflow

Page 15: Claudia Doppioslash - Time Travel for game development with Elm

2. Playtest it2. Playtest it(in the Unity Editor)(in the Unity Editor)

Example CommonExample Common

Game Development WorkflowGame Development Workflow

Page 16: Claudia Doppioslash - Time Travel for game development with Elm
Page 17: Claudia Doppioslash - Time Travel for game development with Elm
Page 18: Claudia Doppioslash - Time Travel for game development with Elm

Now to test thatNow to test thatsame change onsame change onmobile devices:mobile devices:

Example Common Game DevelopmentExample Common Game DevelopmentWorkflow (starring Unity)Workflow (starring Unity)

Page 19: Claudia Doppioslash - Time Travel for game development with Elm

Make a change and test onMake a change and test onDeviceDevice

1. Start build1. Start build

Page 20: Claudia Doppioslash - Time Travel for game development with Elm
Page 21: Claudia Doppioslash - Time Travel for game development with Elm

Make a change and test onMake a change and test onDeviceDevice

3. load the ipa/apk3. load the ipa/apkon deviceon device

Page 22: Claudia Doppioslash - Time Travel for game development with Elm

Make a change and test onMake a change and test onDeviceDevice

4. playtest until your4. playtest until yourcode runscode runs

Page 23: Claudia Doppioslash - Time Travel for game development with Elm

Make a change and test onMake a change and test onDeviceDevice

5. Find new and5. Find new andexciting bugsexciting bugs(only on device)(only on device)

Page 24: Claudia Doppioslash - Time Travel for game development with Elm
Page 25: Claudia Doppioslash - Time Travel for game development with Elm

Slow Iteration timesSlow Iteration times

Say bye to FlowSay bye to Flow

Page 26: Claudia Doppioslash - Time Travel for game development with Elm
Page 27: Claudia Doppioslash - Time Travel for game development with Elm

Slow Iteration timesSlow Iteration times

Error prone forest ofError prone forest ofbuild settingsbuild settings

Page 28: Claudia Doppioslash - Time Travel for game development with Elm
Page 29: Claudia Doppioslash - Time Travel for game development with Elm

Slow Iteration timesSlow Iteration times

Deadline panic 10xDeadline panic 10xincreaseincrease

(suffering together at late hours might be team-buildingbut surely we don't need this :P)

Page 30: Claudia Doppioslash - Time Travel for game development with Elm
Page 31: Claudia Doppioslash - Time Travel for game development with Elm

What can fix this?What can fix this?

Page 32: Claudia Doppioslash - Time Travel for game development with Elm

What can help?What can help?

Jenkins churning buildsJenkins churning buildsout in backgroundout in background

Page 33: Claudia Doppioslash - Time Travel for game development with Elm

What can help?What can help?

Type system to catchType system to catchbugs before runningbugs before running

Page 34: Claudia Doppioslash - Time Travel for game development with Elm

What can help?What can help?

Unit testingUnit testing

Page 35: Claudia Doppioslash - Time Travel for game development with Elm

What is the idealWhat is the idealworkflow?workflow?

Page 36: Claudia Doppioslash - Time Travel for game development with Elm
Page 37: Claudia Doppioslash - Time Travel for game development with Elm

InventingInventingonon

PrinciplePrinciple

As seen on :LambdaCat

Page 38: Claudia Doppioslash - Time Travel for game development with Elm
Page 39: Claudia Doppioslash - Time Travel for game development with Elm

Inventing on PrincipleInventing on Principle

Hot reloadHot reload::reload changes to thereload changes to thecode without stoppingcode without stopping

the gamethe game

Page 40: Claudia Doppioslash - Time Travel for game development with Elm

Inventing on PrincipleInventing on Principle

Time TravelTime Travel::being able to scrubbeing able to scrubto any point in theto any point in the

sessionsession

Page 41: Claudia Doppioslash - Time Travel for game development with Elm

Inventing on PrincipleInventing on Principle

OmniscienceOmniscience::see all the statesee all the statein the sessionin the session

Page 42: Claudia Doppioslash - Time Travel for game development with Elm

Is that even possible?Is that even possible?

Page 43: Claudia Doppioslash - Time Travel for game development with Elm
Page 44: Claudia Doppioslash - Time Travel for game development with Elm
Page 45: Claudia Doppioslash - Time Travel for game development with Elm

Racket,VR andRacket,VR andJohn CarmackJohn Carmack

(watch it)(watch it)

Page 46: Claudia Doppioslash - Time Travel for game development with Elm
Page 47: Claudia Doppioslash - Time Travel for game development with Elm

John CarmackJohn Carmack

Page 48: Claudia Doppioslash - Time Travel for game development with Elm

John CarmackJohn Carmack LISP (Racket)LISP (Racket)

Page 49: Claudia Doppioslash - Time Travel for game development with Elm

Which language makes itWhich language makes itall possible RIGHT NOW?all possible RIGHT NOW?

Page 50: Claudia Doppioslash - Time Travel for game development with Elm

ElmElm

(I'm sure no one saw this coming)(I'm sure no one saw this coming)

Page 51: Claudia Doppioslash - Time Travel for game development with Elm

((

Mario demo)Mario demo)

debug.elm-lang.orgdebug.elm-lang.org

Page 52: Claudia Doppioslash - Time Travel for game development with Elm

What sort ofWhat sort oflanguage is Elm?language is Elm?

Page 53: Claudia Doppioslash - Time Travel for game development with Elm

What sort of language is Elm?What sort of language is Elm?

PurelyPurelyFunctionalFunctional

Page 54: Claudia Doppioslash - Time Travel for game development with Elm

FunctionalFunctionalReactiveReactive

(FRP)(FRP)

What sort of language is Elm?What sort of language is Elm?

Page 55: Claudia Doppioslash - Time Travel for game development with Elm

EagerEager

What sort of language is Elm?What sort of language is Elm?

Page 56: Claudia Doppioslash - Time Travel for game development with Elm

Static TypeStatic TypeSystemSystem

What sort of language is Elm?What sort of language is Elm?

Page 57: Claudia Doppioslash - Time Travel for game development with Elm

Compiles toCompiles toJavascript,Javascript,HTML, CSSHTML, CSS

What sort of language is Elm?What sort of language is Elm?

Page 58: Claudia Doppioslash - Time Travel for game development with Elm

Interoperates withInteroperates withJavascript while stillJavascript while still

being type safebeing type safe

What sort of language is Elm?What sort of language is Elm?

Page 59: Claudia Doppioslash - Time Travel for game development with Elm

SmallSmall

What sort of language is Elm?What sort of language is Elm?

Page 60: Claudia Doppioslash - Time Travel for game development with Elm

Invented byInvented byEvan CzaplickiEvan Czaplickifor his thesisfor his thesis

What sort of language is Elm?What sort of language is Elm?

Page 61: Claudia Doppioslash - Time Travel for game development with Elm

Meant to beMeant to beapproachableapproachableand practicaland practical

What sort of language is Elm?What sort of language is Elm?

Page 62: Claudia Doppioslash - Time Travel for game development with Elm

Meant to be approachableMeant to be approachableand practicaland practical

No 'scary' terms likeNo 'scary' terms likeMonadMonad

Page 63: Claudia Doppioslash - Time Travel for game development with Elm
Page 64: Claudia Doppioslash - Time Travel for game development with Elm

In Production atIn Production at

Page 65: Claudia Doppioslash - Time Travel for game development with Elm

Elm ReactorElm Reactor(the Time Travelling Debugger)(the Time Travelling Debugger)

Page 66: Claudia Doppioslash - Time Travel for game development with Elm

Elm ReactorElm Reactor

Inspired byInspired byInventing onInventing on

PrinciplePrinciple

Page 67: Claudia Doppioslash - Time Travel for game development with Elm

Elm ReactorElm Reactor

FundamentalsFundamentalsmade in a fewmade in a fewdays by Laszlodays by Laszlo

Page 68: Claudia Doppioslash - Time Travel for game development with Elm

Elm ReactorElm Reactor

Elm's languageElm's languagedesign isdesign is

accidentallyaccidentally'compatible''compatible'

Page 69: Claudia Doppioslash - Time Travel for game development with Elm

Elm ReactorElm Reactor

You can "stepYou can "stepthrough" whilethrough" while

moving the mousemoving the mouse

Page 70: Claudia Doppioslash - Time Travel for game development with Elm

How do youHow do youstructurestructure

programs inprograms inElm?Elm?

Page 71: Claudia Doppioslash - Time Travel for game development with Elm

The Functional TriforceThe Functional Triforce

MaybeMaybe

UnionUnionTypesTypes

PatternPatternMatchingMatching

Page 72: Claudia Doppioslash - Time Travel for game development with Elm

The Functional TriforceThe Functional Triforce

Union TypesUnion Types

define the Model:define the Model:

type Tile = Door Size | Column | BackGround BackGroundTile | Shadow ShadowTile

Page 73: Claudia Doppioslash - Time Travel for game development with Elm

The Functional TriforceThe Functional Triforce

MaybeMaybe

gets rid of NULL errorsgets rid of NULL errors

type Maybe a = Just a | Nothing

Page 74: Claudia Doppioslash - Time Travel for game development with Elm

The Functional TriforceThe Functional Triforce

Pattern MatchingPattern MatchingString.toInt : String -> Maybe Int

toMonth : String -> Maybe Int toMonth rawString = case String.toInt rawString of Nothing -> Nothing Just n -> if n > 0 && n <= 12 then Just n else Nothing

Page 75: Claudia Doppioslash - Time Travel for game development with Elm

Elm ArchitectureElm Architecture

Elm isElm isopinionatedopinionated

Page 76: Claudia Doppioslash - Time Travel for game development with Elm

Elm ArchitectureElm Architecture

Use theUse the"" ""Elm ArchitectureElm Architecture

Page 77: Claudia Doppioslash - Time Travel for game development with Elm

Elm ArchitectureElm Architecture

ModelModel

ViewView

UpdateUpdate

Page 78: Claudia Doppioslash - Time Travel for game development with Elm

OverviewOverview

Page 79: Claudia Doppioslash - Time Travel for game development with Elm

Elm ArchitectureElm Architecture

ModelModel = =the Data Structurethe Data Structurewe pass aroundwe pass around

Page 80: Claudia Doppioslash - Time Travel for game development with Elm

ModelModel

type alias UserInput = {}userInput : Signal UserInputuserInput = Signal.constant {}type alias Input = { timeDelta : Float , userInput : UserInput }

Page 81: Claudia Doppioslash - Time Travel for game development with Elm

ModelModel

type alias UserInput = {}userInput : Signal UserInputuserInput = Signal.constant {}type alias Input = { timeDelta : Float , userInput : UserInput }

TypeTypesignaturesignature

Page 82: Claudia Doppioslash - Time Travel for game development with Elm

ModelModel

type alias UserInput = {}userInput : Signal UserInputuserInput = Signal.constant {}type alias Input = { timeDelta : Float , userInput : UserInput }

A recordA record

Type aliasType alias

SignalSignal

Page 83: Claudia Doppioslash - Time Travel for game development with Elm

ModelModel

Record =Record =

set of key value pairsset of key value pairs

Page 84: Claudia Doppioslash - Time Travel for game development with Elm

ModelModel

Type alias =Type alias =

give name to a set of fieldsgive name to a set of fieldsin a recordin a record

Page 85: Claudia Doppioslash - Time Travel for game development with Elm

ModelModel

Signal =Signal =

updates every time variableupdates every time variablechangeschanges

Page 86: Claudia Doppioslash - Time Travel for game development with Elm

ModelModel

type alias GameState = {}defaultGame : GameStatedefaultGame = {}

Page 87: Claudia Doppioslash - Time Travel for game development with Elm

Elm ArchitectureElm Architecture

ViewView = =the code thatthe code thatrenders from therenders from theModelModel

Page 88: Claudia Doppioslash - Time Travel for game development with Elm

DisplayDisplay

display : (Int,Int) -> GameState ->Element

display (w,h) gameState = showgameState

Page 89: Claudia Doppioslash - Time Travel for game development with Elm

DisplayDisplay

display : (Int,Int) -> GameState ->Element

display (w,h) gameState = showgameState

TypeTypesignaturesignature

Page 90: Claudia Doppioslash - Time Travel for game development with Elm

Elm ArchitectureElm Architecture

UpdateUpdate = =the function thatthe function thatdoes the change ofdoes the change ofstate state

Page 91: Claudia Doppioslash - Time Travel for game development with Elm

UpdateUpdate

stepGame : Input -> GameState ->GameStatestepGame {timeDelta,userInput}gameState = gameState

Page 92: Claudia Doppioslash - Time Travel for game development with Elm

UpdateUpdate

stepGamestepGame uses theuses thecurrentcurrent InputInput

(which is (which is UserInputUserInput and a and atimeDeltatimeDelta))

to make a newto make a new GameStateGameState

Page 93: Claudia Doppioslash - Time Travel for game development with Elm

Elm ArchitectureElm Architecture

SignalsSignals

Page 94: Claudia Doppioslash - Time Travel for game development with Elm

SignalsSignals

delta : Signal Floatdelta = Time.fps 30input : Signal Inputinput = Signal.sampleOn delta (Signal.map2 Input delta userInput)

sampleOnsampleOn

Page 95: Claudia Doppioslash - Time Travel for game development with Elm

SignalsSignals

delta : Signal Floatdelta = Time.fps 30input : Signal Inputinput = Signal.sampleOn delta (Signal.map2 Input delta userInput)

map2map2

Page 96: Claudia Doppioslash - Time Travel for game development with Elm

SignalsSignals

gameState : Signal GameStategameState = Signal.foldp stepGame defaultGame input

Page 97: Claudia Doppioslash - Time Travel for game development with Elm

SignalsSignals

gameState : Signal GameStategameState = Signal.foldp stepGame defaultGame input foldpfoldp

Page 98: Claudia Doppioslash - Time Travel for game development with Elm

SignalsSignals

Signal.map2 = Signal.map2 =

applies a function thatapplies a function thattakes 2 arguments takes 2 arguments

to a signalto a signal

Page 99: Claudia Doppioslash - Time Travel for game development with Elm

SignalsSignals

Signal.sampleOn =Signal.sampleOn =samples from 2ndsamples from 2ndinput anytime aninput anytime an

event occurs in the 1stevent occurs in the 1st

Page 100: Claudia Doppioslash - Time Travel for game development with Elm

SignalsSignals

Signal.foldp =Signal.foldp =

a signal dependent ona signal dependent onthe past the past

Page 101: Claudia Doppioslash - Time Travel for game development with Elm

MainMain(where you wire(where you wireeverything up)everything up)

Elm ArchitectureElm Architecture

Page 102: Claudia Doppioslash - Time Travel for game development with Elm

MainMain

main : Signal Elementmain = Signal.map2 display Window.dimensions gameState

Page 103: Claudia Doppioslash - Time Travel for game development with Elm

MainMain

main : Signal Elementmain = Signal.map2 display Window.dimensions gameState

Signal ofSignal ofElementElementvaluesvalues

Page 104: Claudia Doppioslash - Time Travel for game development with Elm

Overview (again)Overview (again)

Page 105: Claudia Doppioslash - Time Travel for game development with Elm

What are Signals?What are Signals?

Page 106: Claudia Doppioslash - Time Travel for game development with Elm

Stream of valuesStream of values

What are Signals?What are Signals?

Page 107: Claudia Doppioslash - Time Travel for game development with Elm

What are Signals?What are Signals?

Page 108: Claudia Doppioslash - Time Travel for game development with Elm

What are Signals?What are Signals?

a different way ofa different way ofthinking aboutthinking about

variablesvariables

Page 109: Claudia Doppioslash - Time Travel for game development with Elm

What are Signals?What are Signals?

an explicit model ofan explicit model ofvariable mutation invariable mutation in

timetime

Page 110: Claudia Doppioslash - Time Travel for game development with Elm

What are Signals?What are Signals?

non-awkward way ofnon-awkward way ofstructuring callbacksstructuring callbacks

Page 111: Claudia Doppioslash - Time Travel for game development with Elm
Page 112: Claudia Doppioslash - Time Travel for game development with Elm

What are Signals?What are Signals?

they are wired inthey are wired insignal graphssignal graphs

(directed acyclic(directed acyclicgraphs)graphs)

Page 113: Claudia Doppioslash - Time Travel for game development with Elm

What are Signals?What are Signals?

Page 114: Claudia Doppioslash - Time Travel for game development with Elm

What kind ofWhat kind offunctions can wefunctions can weapply on signals?apply on signals?

Page 115: Claudia Doppioslash - Time Travel for game development with Elm

What kind of functions canWhat kind of functions canwe apply on signals?we apply on signals?

: Signal a ->

Signal a -Signal a ->> Signal a Signal a

merge

Page 116: Claudia Doppioslash - Time Travel for game development with Elm

What kind of functions canWhat kind of functions canwe apply on signals?we apply on signals?

:: (a (a ->-> Bool) Bool) ->-> a a ->->

Signal a Signal a ->-> Signal a Signal a

filterfilter

Page 117: Claudia Doppioslash - Time Travel for game development with Elm

What kind of functions canWhat kind of functions canwe apply on signals?we apply on signals?

:: (a (a ->-> result) result) ->-> Signal a Signal a --

>> Signal result Signal result

mapmap

applies a function on a signalapplies a function on a signal

returns another, transformed, signalreturns another, transformed, signal

Page 118: Claudia Doppioslash - Time Travel for game development with Elm

What kind of functions canWhat kind of functions canwe apply on signals?we apply on signals?

:: (a (a ->-> b b ->-> result) result) ->->

Signal a Signal a ->-> Signal b Signal b ->->

Signal resultSignal result

map2map2

applies a function on two signalsapplies a function on two signals

Page 119: Claudia Doppioslash - Time Travel for game development with Elm

What kind of functions canWhat kind of functions canwe apply on signals?we apply on signals?

makes a signal that depends on themakes a signal that depends on thepast values of a signalpast values of a signal

: (a -> state -> state) -> state -> Signal a ->

Signal state

foldp

Page 120: Claudia Doppioslash - Time Travel for game development with Elm

What is a What is a foldpfoldp??

Page 121: Claudia Doppioslash - Time Travel for game development with Elm

Fold from the pastFold from the pastFold from the pastFold from the pastFoldFold from the from the pastpast

Page 122: Claudia Doppioslash - Time Travel for game development with Elm
Page 123: Claudia Doppioslash - Time Travel for game development with Elm

What is a foldp?What is a foldp?

takes (a -> state -> state) foldp

a function

Page 124: Claudia Doppioslash - Time Travel for game development with Elm

What is a foldp?What is a foldp?

... -> state -> ...

a default state

Page 125: Claudia Doppioslash - Time Travel for game development with Elm

What is a foldp?What is a foldp?

... -> Signal a -> ...

an input signal

Page 126: Claudia Doppioslash - Time Travel for game development with Elm

What is this foldp thing?What is this foldp thing?

... -> Signal state

returns a signal(= next state of the program,

after applying update)

Page 127: Claudia Doppioslash - Time Travel for game development with Elm

How Elm ReactorHow Elm Reactorworksworks

Page 128: Claudia Doppioslash - Time Travel for game development with Elm

Record InputsRecord Inputs

How Elm Reactor worksHow Elm Reactor works

Page 129: Claudia Doppioslash - Time Travel for game development with Elm

ReappliesReappliesfunctions tofunctions to

inputsinputs

How Elm Reactor worksHow Elm Reactor works

Page 130: Claudia Doppioslash - Time Travel for game development with Elm

previous stateprevious state++

previous inputsprevious inputs==

next statenext state

How Elm Reactor worksHow Elm Reactor works

Page 131: Claudia Doppioslash - Time Travel for game development with Elm

snapshottingsnapshottingforfor

performanceperformance

How Elm Reactor worksHow Elm Reactor works

Page 132: Claudia Doppioslash - Time Travel for game development with Elm

How Elm Reactor worksHow Elm Reactor works

changes to typeschanges to typeswill break hotwill break hot

swappingswapping

Page 133: Claudia Doppioslash - Time Travel for game development with Elm

also if a changealso if a changedoesn't compiledoesn't compile

How Elm Reactor worksHow Elm Reactor works

Page 134: Claudia Doppioslash - Time Travel for game development with Elm

Why is Elm goodWhy is Elm goodfor Time Travelling?for Time Travelling?

Page 135: Claudia Doppioslash - Time Travel for game development with Elm

Why Elm Reactor worksWhy Elm Reactor works

Applying the sameApplying the sameinputs will return theinputs will return the

same outputsame output(referential transparency)(referential transparency)

Page 136: Claudia Doppioslash - Time Travel for game development with Elm

Why Elm Reactor worksWhy Elm Reactor works

No side effects No side effects ==can replay codecan replay code

Page 137: Claudia Doppioslash - Time Travel for game development with Elm

Why Elm Reactor worksWhy Elm Reactor works

All mutable state isAll mutable state isstored in the foldpstored in the foldp

Page 138: Claudia Doppioslash - Time Travel for game development with Elm

Static signalStatic signalgraphgraph

Why Elm Reactor worksWhy Elm Reactor works

Page 139: Claudia Doppioslash - Time Travel for game development with Elm

But, can itBut, can itscale?scale?

Page 140: Claudia Doppioslash - Time Travel for game development with Elm

Castle of ElmCastle of Elm

But, can it scale?But, can it scale?

Page 141: Claudia Doppioslash - Time Travel for game development with Elm

Game Jam gameGame Jam game

Castle of ElmCastle of Elm

Somewhat RoguelikeSomewhat Roguelike

In 2 daysIn 2 days

From scratchFrom scratch

Page 142: Claudia Doppioslash - Time Travel for game development with Elm

Flexible tile systemFlexible tile system

Castle of ElmCastle of Elm

CollisionsCollisions

Page 143: Claudia Doppioslash - Time Travel for game development with Elm

(let's break the(let's break thecollisions system)collisions system)

Castle of ElmCastle of Elm

Page 144: Claudia Doppioslash - Time Travel for game development with Elm

GotchasGotchas

Page 145: Claudia Doppioslash - Time Travel for game development with Elm

Out of memoryOut of memory

GotchasGotchas

Page 146: Claudia Doppioslash - Time Travel for game development with Elm

SchroedingerSchroedingerHot SwappingHot Swapping

GotchasGotchas

Page 147: Claudia Doppioslash - Time Travel for game development with Elm
Page 148: Claudia Doppioslash - Time Travel for game development with Elm

But you can help!But you can help!It's OSSIt's OSS

Page 149: Claudia Doppioslash - Time Travel for game development with Elm

<- CODE HERE<- CODE HERE

Page 150: Claudia Doppioslash - Time Travel for game development with Elm

Why use staticallyWhy use staticallytyped pure Functionaltyped pure Functional

languages in Gamelanguages in GameDevelopment?Development?

Page 151: Claudia Doppioslash - Time Travel for game development with Elm

Why it's worth to use new language researchWhy it's worth to use new language researchin Game Developmentin Game Development

No runtimeNo runtimeexceptionsexceptions

Page 152: Claudia Doppioslash - Time Travel for game development with Elm

Why it's worth to use new language researchWhy it's worth to use new language researchin Game Developmentin Game Development

No raceNo raceconditionsconditions

Page 153: Claudia Doppioslash - Time Travel for game development with Elm

Why it's worth to use new language researchWhy it's worth to use new language researchin Game Developmentin Game Development

Better toolsBetter tools

Page 154: Claudia Doppioslash - Time Travel for game development with Elm

Why it's worth to use new language researchWhy it's worth to use new language researchin Game Developmentin Game Development

Less codeLess code

Page 155: Claudia Doppioslash - Time Travel for game development with Elm

Why it's worth to use new language researchWhy it's worth to use new language researchin Game Developmentin Game Development

Ease ofEase ofparallelisationparallelisation

Page 156: Claudia Doppioslash - Time Travel for game development with Elm

elm-lang.org/docselm-lang.org/docs

@elmlang@elmlang

#elmlang#elmlang

Where to learn Elm?Where to learn Elm?

Page 157: Claudia Doppioslash - Time Travel for game development with Elm

#haskell.it @ freenode#haskell.it @ freenode

haskell-ita.ithaskell-ita.it

@Haskell_ITA@Haskell_ITA

Maybe join Haskell ITAMaybe join Haskell ITA

Page 158: Claudia Doppioslash - Time Travel for game development with Elm

@lambda_cat@lambda_cat

lambdacat.comlambdacat.com

Read Read LambdaCatLambdaCat!!

Page 159: Claudia Doppioslash - Time Travel for game development with Elm