24 hours later - fsharp gotham 2015
TRANSCRIPT
24 HOURS LATER Phillip Trelford, @ptrelford#fsharpgotham NYC, 2015
THIS TALK IS *NOT*About how to write a compiler the hard wayAll theoryFor the faint of heart
THIS TALK *IS* ABOUTDomain Specific LanguagesAbstract Syntax TreesParsingInterpretersCode Generation
LANGUAGE DESIGN (CONSIDERED OPTIONAL)
Adhoc• PHP• JavaScript• Scala
Copy&Delete• Java• J• Go
Copy&Add• C#• F#• Haskell
TO THE TURTLES CODE
Phillip Trelford, @ptrelford#fsharpgotham NYC, 2015
TURTLE LANGUAGErepeat 10 [right 36 repeat 5 [forward 54 right 72]]
TURTLE ASTtype command = | Forward of arg | Turn of arg | Repeat of arg * command list
THINGS YOU SHOULD NEVER DO Custom Operators Funny picture
TWO GIRLS (5 & 7YRS) + TURTLE
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
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
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.
http://tinyurl.com/funbasic
FUN BASIC - WINDOWS STORE APP
FUN SHARP RUNNING ON RASPIAN http://github.com/ptrelford/fu
nsharp
RESOURCES Phillip Trelford, @ptrelford#fsharpgotham NYC, 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 __
TRYFSHARP.ORG
BUY THE BOOK
QUESTIONS?
Twitter: @ptrelfordBlog: http://trelford.com/blogTurtle: http://fssnip.net/nN