Title: Compile Time Abstraction Techniques for the D Programming Language
1Compile Time Abstraction Techniques for the D
Programming Language
2Abstraction
3What Why
- What Isolation of lower level complexity
- Distillation of Intent
- Removal of redundancy
- Why Saving Time
- Programming time
- Maintenance time
- User time
4When to use Abstractions?
- Let the computer do what it is good at.
- Abstract where abstraction is a good fit
5When to Not use Abstractions?
- If the abstraction doesn't fit, don't force it.
- Beware of premature optimizations.
- Code speed
- Coding speed
- Test optimizations.
6Compile time processing
- Nesting Templates
- Chained Recursion
- Nested Tuples
7Nesting Templates
Define two lists using two templates
8Nesting Templates
- Multiple Tuples
- Useful naming
9Chained Recursion
Starting point Introduce alias to nested
templates Nested templates that do something and
then also use mixin
10Chained Recursion
- Object Oriented style design
- Domain Specific Languages
- Closer to what is wanted
11Nested Tuples
Alias tuples inside of strut
12Nested Tuples
- Use structs
- Alias in templates dont work
- foreach works well on types
13All Together Now
- Compile Time Parsing
- Compile Time Parser Generation
14Compile Time Parsing
- Reading Data
- Building tree
15Compile Time Parsing
Attempt to parse D
Attempt to parse B
Build tuple of Ds Record unused input
16Compile 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
17Compile Time Parsing
18Compile 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
19Compile Time Parser Generation
20Compile Time Abstraction Techniques for the D
Programming Language Benjamin Shropshire
Special Thanks to
- Dr. Robert Hiromoto
- Michael Hewitt
- Dr. David Buehler
- Dr. Geoffrey Shropshire
- Eric Hewitt