Download presentation
Presentation is loading. Please wait.
Published byTyrone Evans Modified over 9 years ago
1
Gradual Programming: Bridging the Semantic Gap Bor-Yuh Evan Chang Bor-Yuh Evan Chang Amer Diwan Jeremy G. Siek University of Colorado, Boulder PLDI FIT 2009
2
2 Have you noticed a time where your program is not optimized where you expect? Bor-Yuh Evan Chang, Amer Diwan, and Jeremy G. Siek - Gradual Programming “I need a map data structure ” Load class file Run class initialization Create hashtable Load class file Run class initialization Create hashtable Problem Problem: Tools (IDEs, checkers, optimizers) have no knowledge of what the programmer cares about … hampering programmer productivity, software reliability, and execution efficiency semantic gap Observation Observation: A disconnect between programmer intent and program meaning
3
3 Example: Iteration Order class OpenArray extends Object { private Double data[]; public boolean contains(Object lookFor) { for (i = 0; i < data.length; i++) { if (data[i].equals(lookFor)) return true; } return false; } } Bor-Yuh Evan Chang, Amer Diwan, and Jeremy G. Siek - Gradual Programming parallel Compiler cannot choose a different iteration order (e.g., parallel) class OpenArray extends Object { private Double data[]; public boolean contains(Object lookFor) { for (i = 0; i < data.length; i++) { if (data[i].equals(lookFor)) return true; } return false; } Must specify an iteration order Must specify an iteration order even when it should not matter
4
4 Wild and Crazy Idea: Use Non-Determinism Programmer starts with a potentially non-deterministic program Analysis identifies instances of “under- determinedness” Programmer eliminates “under- determinedness” Bor-Yuh Evan Chang, Amer Diwan, and Jeremy G. Siek - Gradual Programming class OpenArray extends Object { private Double data[]; public boolean contains(Object lookFor) { for (i = 0; i < data.length; i++) { if (data[i].equals(lookFor)) return true; } return false; } class OpenArray extends Object { private Double data[]; public boolean contains(Object lookFor) { for (i = 0; i < data.length; i++) { if (data[i].equals(lookFor)) return true; } return false; } class OpenArray extends Object { private Double data[]; public boolean contains(Object lookFor) { i 0.. data.length-1 { if (data[i].equals(lookFor)) return true; } return false; } class OpenArray extends Object { private Double data[]; public boolean contains(Object lookFor) { i 0.. data.length-1 { if (data[i].equals(lookFor)) return true; } return false; } “over-determined” “under-determined” just right starting point Question Question: What does this mean? Is it “under-determined”? Response Response: Depends, is the iteration order important? Question Question: What does this mean? Is it “under-determined”? Response Response: Depends, is the iteration order important?
5
5 Let’s try a few program variants Bor-Yuh Evan Chang, Amer Diwan, and Jeremy G. Siek - Gradual Programming public boolean contains(Object lookFor) { for (i = data.length-1; i >= 0; i--) { if (data[i].equals(lookFor)) return true; } return false; } public boolean contains(Object lookFor) { for (i = data.length-1; i >= 0; i--) { if (data[i].equals(lookFor)) return true; } return false; } public boolean contains(Object lookFor) { for (i = 0; i < data.length; i++) { if (data[i].equals(lookFor)) return true; } return false; } public boolean contains(Object lookFor) { for (i = 0; i < data.length; i++) { if (data[i].equals(lookFor)) return true; } return false; } public boolean contains(Object lookFor) { parallel_for (0, data.length-1) i => { if (data[i].equals(lookFor)) return true; } return false; } public boolean contains(Object lookFor) { parallel_for (0, data.length-1) i => { if (data[i].equals(lookFor)) return true; } return false; } Do they compute the same result? Approach Approach: Try to verify equivalence of program variants up to a specification Yes Pick any one No Ask user Yes Pick any one No Ask user What about here?
6
6 Surprisingly, analysis says no. Why? Exceptions! Bor-Yuh Evan Chang, Amer Diwan, and Jeremy G. Siek - Gradual Programming Need user interaction to refine specification that captures programmer intent null a.data = a.contains( ) left-to-right iteration returns true right-to-left iteration throws NullPointerException
7
7 Scary Proposal? “Fix semantics per program”: Abstract constructs with many possible concrete implementations Apply program analysis to find inconsistent implementations Interact with the user to refine the specification Language designer role can enumerate the possible implementations Bor-Yuh Evan Chang, Amer Diwan, and Jeremy G. Siek - Gradual Programming
8
8 Bridging the Semantic Gap Bor-Yuh Evan Chang, Amer Diwan, and Jeremy G. Siek - Gradual Programming “I need a map data structure ” “Looks like iterator order matters for your program” “Yes, I need iteration in sorted order” “Let’s use a balanced binary tree (TreeMap)”
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.