Presentation is loading. Please wait.

Presentation is loading. Please wait.

Macho: Programming With Man Pages Anthony Cozzie, Murph Finnicum, Sam King University of Illinois at Urbana-Champaign.

Similar presentations


Presentation on theme: "Macho: Programming With Man Pages Anthony Cozzie, Murph Finnicum, Sam King University of Illinois at Urbana-Champaign."— Presentation transcript:

1 Macho: Programming With Man Pages Anthony Cozzie, Murph Finnicum, Sam King University of Illinois at Urbana-Champaign

2 Programming is hard! Extreme Detail Extreme Precision

3 Lots of Automated Tools Static Analysis – Coverity Code Snippet search engines – Prospector, SNIFF, Xsnippet, even Google Automated Debuggers – Genetic programming, Delta debugging

4 Automating Programming Computer makes decisions But it will make mistakes too! Programmer must go back and check the tool – not easy So, how can we do this efficiently?

5 Macho Architecture NL parsing Database Stitching Debugger Raw Text Requested Computation Code Snippets Candidate Programs Runtime Feedback Solutions

6 The Trick NL parsing Database Stitching Debugger

7 Examples! Example is end-to-end: covers many decisions Easy to understand compared to code

8 The Example (LS) Print the names of files in a directory. Sort the names.

9 Extract Implied Computation directory -> files files -> names print(names) sort(names) Print the names of files in a directory. Sort names.

10 Use Programmer’s Labels public static void main(String[] args) {.... //first (original) database files = directory.listFiles();.... }

11

12 Input to Synthesis: LS1 public static void Ls1(java.lang.String p_directory) { java.io.File tmp = new File(p_directory); java.io.File[] files = tmp.listFiles(); int tmp_0 = files.length; java.lang.String[] tmp_1 = new java.lang.String[tmp_0]; for(int tmp_3 = 0; tmp_3 < files.length; ++tmp_3) { java.io.File tmp_2 = files[tmp_3]; java.lang.String names = tmp_2.getName(); tmp_1[tmp_3] = names; } Arrays.sort(tmp_1); for(int tmp_5 = 0; tmp_5 < tmp_1.length; ++tmp_5) { java.lang.String tmp_4 = tmp_1[tmp_5]; System.out.println(tmp_4); }

13 Bugs! Prints hidden files Crashes if the input is not a directory

14

15 Synthesized Version of LS public static void Ls3(String p_dir) { java.io.File tmp = new File(p_dir); java.io.File[] files = tmp.listFiles(); boolean tmp_3 = tmp.isDirectory(); if(tmp_3) { Arrays.sort(files); for(int tmp_1 = 0; tmp_1 < files.length; ++tmp_1) { java.io.File tmp_0 = files[tmp_1]; java.lang.String names = tmp_0.getName(); boolean tmp_2 = tmp_0.isHidden(); if(!tmp_2) System.out.println(names); } else System.out.println(tmp + ""); }

16 Pure NL Spec Take the path "/home/zerocool/" If the path is a file, print it. Otherwise get the list of files in the directory. Sort the result alphabetically. Go over the result from the beginning to the end: If the current element's filename does not begin with ".", print it.

17 Macho Print the names of files in a directory. Sort the names. + simple example

18 Input Synergy NL: moderate information over a large part of the state space Examples: very precise information over a tiny part of the state space Together: win

19


Download ppt "Macho: Programming With Man Pages Anthony Cozzie, Murph Finnicum, Sam King University of Illinois at Urbana-Champaign."

Similar presentations


Ads by Google