200 likes | 383 Vues
Compile Time Abstraction Techniques for the D Programming Language. Benjamin Shropshire. Abstraction. What Why When How. What & Why. What: Isolation of lower level complexity Distillation of Intent Removal of redundancy Why: Saving Time Programming time Maintenance time User time.
E N D
Compile Time Abstraction Techniques for the D Programming Language Benjamin Shropshire
Abstraction What Why When How
What & Why • What: Isolation of lower level complexity • Distillation of Intent • Removal of redundancy • Why: Saving Time • Programming time • Maintenance time • User time Benjamin Shropshire
When to use Abstractions? • Let the computer do what it is good at. • Abstract where abstraction is a good fit Benjamin Shropshire
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. Benjamin Shropshire
Compile time processing Nesting Templates Chained Recursion Nested Tuples
Nesting Templates Define two lists using two templates Benjamin Shropshire
Nesting Templates • Multiple Tuples • Useful naming Benjamin Shropshire
Chained Recursion Starting point Introduce alias to nested templates Nested templates that do something and then also use mixin Benjamin Shropshire
Chained Recursion • Object Oriented style design • Domain Specific Languages • Closer to what is wanted Benjamin Shropshire
Nested Tuples Alias tuples inside of strut Benjamin Shropshire
Nested Tuples • Use structs • Alias in templates don’t work • foreach works well on types Benjamin Shropshire
All Together Now Compile Time Parsing Compile Time Parser Generation
Compile Time Parsing • Reading Data • Building tree Benjamin Shropshire
Compile Time Parsing Attempt to parse D Attempt to parse B Build tuple of D’s Record unused input Benjamin Shropshire
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 Shropshire
Compile Time Parsing Benjamin Shropshire
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 Shropshire
Compile Time Parser Generation Benjamin Shropshire
Dr. Robert Hiromoto Michael Hewitt Dr. David Buehler Dr. Geoffrey Shropshire Eric Hewitt Compile Time Abstraction Techniques for the D Programming Language Benjamin Shropshire Special Thanks to: Benjamin Shropshire