19
24 HOURS LATER Phillip Trelford, @ptrelford #fsharpgotham NYC, 2015

24 hours later - FSharp Gotham 2015

Embed Size (px)

Citation preview

Page 1: 24 hours later - FSharp Gotham  2015

24 HOURS LATER Phillip Trelford, @ptrelford#fsharpgotham NYC, 2015

Page 2: 24 hours later - FSharp Gotham  2015

THIS TALK IS *NOT*About how to write a compiler the hard wayAll theoryFor the faint of heart

Page 3: 24 hours later - FSharp Gotham  2015

THIS TALK *IS* ABOUTDomain Specific LanguagesAbstract Syntax TreesParsingInterpretersCode Generation

Page 4: 24 hours later - FSharp Gotham  2015

LANGUAGE DESIGN (CONSIDERED OPTIONAL)

Adhoc• PHP• JavaScript• Scala

Copy&Delete• Java• J• Go

Copy&Add• C#• F#• Haskell

Page 5: 24 hours later - FSharp Gotham  2015

TO THE TURTLES CODE

Phillip Trelford, @ptrelford#fsharpgotham NYC, 2015

Page 6: 24 hours later - FSharp Gotham  2015

TURTLE LANGUAGErepeat 10 [right 36 repeat 5 [forward 54 right 72]]

Page 7: 24 hours later - FSharp Gotham  2015

TURTLE ASTtype command = | Forward of arg | Turn of arg | Repeat of arg * command list

Page 8: 24 hours later - FSharp Gotham  2015

THINGS YOU SHOULD NEVER DO Custom Operators Funny picture

Page 9: 24 hours later - FSharp Gotham  2015

TWO GIRLS (5 & 7YRS) + TURTLE

Page 10: 24 hours later - FSharp Gotham  2015

SMALL BASIC SAMPLESub Init gw = 598 gh = 428 GraphicsWindow.BackgroundColor = "DodgerBlue" GraphicsWindow.Width = gw GraphicsWindow.Height = gh color = "1=Orange;2=Cyan;3=Lime;" size = "1=20;2=16;3=12;" passed = 0 cd = "False" ' collision detectedEndSub

Page 11: 24 hours later - FSharp Gotham  2015

SMALL BASIC AST/// Small Basic expressiontype expr = | Literal of value | Identifier of identifier | GetAt of location | Func of invoke | Neg of expr | Arithmetic of expr * arithmetic * expr | Comparison of expr * comparison * expr | Logical of expr * logical * expr

/// Small Basic instruction type instruction = | Assign of assign | SetAt of location * expr | PropertySet of string * string * expr | Action of invoke | For of assign * expr * expr | EndFor | If of expr | ElseIf of expr | Else | EndIf | While of expr | EndWhile | Sub of identifier * string list | EndSub | Label of label | Goto of label

Page 12: 24 hours later - FSharp Gotham  2015

C# COMPILER IN 24 DAYSOh Yes! Neil Danson (aka The Do)

Now, I didn’t do any compiler theory in uni, I’ve never written a compiler before and I’ve only ever looked at Reflection Emit in anger. But despite these limitations I have a fairly capable C# 0.5 compiler (in that it is a subset of the C# 1 compiler). Which means you can do it too – it took me less than a month.

Page 13: 24 hours later - FSharp Gotham  2015

http://tinyurl.com/funbasic

FUN BASIC - WINDOWS STORE APP

Page 14: 24 hours later - FSharp Gotham  2015

FUN SHARP RUNNING ON RASPIAN http://github.com/ptrelford/fu

nsharp

Page 15: 24 hours later - FSharp Gotham  2015

RESOURCES Phillip Trelford, @ptrelford#fsharpgotham NYC, 2015

Page 16: 24 hours later - FSharp Gotham  2015

F# KOANS[<Koan>]let SquareEvenNumbersWithPipelineOperator() =(* In F#, you can use the pipeline operator to get the benefit of the parens style with the readability of the statement style. *)

let result = [0..5] |> List.filter isEven |> List.map square AssertEquality result __

Page 17: 24 hours later - FSharp Gotham  2015

TRYFSHARP.ORG

Page 18: 24 hours later - FSharp Gotham  2015

BUY THE BOOK