Compile Time Abstraction Techniques for the D Programming Language Benjamin Shropshire
Abstraction What Why When How
Benjamin Shropshire3 What & Why What:Isolation of lower level complexity –Distillation of Intent –Removal of redundancy Why:Saving Time –Programming time –Maintenance time –User time
Benjamin Shropshire4 When to use Abstractions? Let the computer do what it is good at. Abstract where abstraction is a good fit
Benjamin Shropshire5 When to Not use Abstractions? If the abstraction doesn't fit, don't force it. Beware of premature optimizations. –Code speed –Coding speed –Test optimizations.
Compile time processing Nesting Templates Chained Recursion Nested Tuples
Benjamin Shropshire7 Nesting Templates Define two lists using two templates
Benjamin Shropshire8 Nesting Templates Multiple Tuples Useful naming
Benjamin Shropshire9 Chained Recursion Starting point Introduce alias to nested templates Nested templates that do something and then also use mixin
Benjamin Shropshire10 Chained Recursion Object Oriented style design Domain Specific Languages Closer to what is wanted
Benjamin Shropshire11 Nested Tuples Alias tuples inside of strut
Benjamin Shropshire12 Nested Tuples Use structs – Alias in templates don’t work – foreach works well on types
All Together Now Compile Time Parsing Compile Time Parser Generation
Benjamin Shropshire14 Compile Time Parsing Reading Data Building tree
Benjamin Shropshire15 Compile Time Parsing Attempt to parse D Attempt to parse B Build tuple of D’s Record unused input
Benjamin Shropshire16 Compile Time Parsing Found BCA Found BC failed on A, so parsing only B Found B failed on C, so parsing only B Failed on B, so failing
Benjamin Shropshire17 Compile Time Parsing
Benjamin Shropshire18 Compile Time Parser Generation Parse grammar Select production to instance Try each disjunction –Try each part Recurs to other productions Record checkpoints Backtrack through checkpoints on failure
Benjamin Shropshire19 Compile Time Parser Generation
Benjamin Shropshire20 Compile Time Abstraction Techniques for the D Programming Language Benjamin Shropshire Dr. Robert Hiromoto Michael Hewitt Dr. David Buehler Dr. Geoffrey Shropshire Eric Hewitt Special Thanks to: