keyword programming in java

80
Keyword Programming in Java Greg Little and Robert C. Miller MIT CSAIL This work was supported in part by the National Science Foundation under award number IIS-0447800, and by Quanta Computer as part of the TParty project.

Upload: ivor-tyson

Post on 02-Jan-2016

35 views

Category:

Documents


0 download

DESCRIPTION

Keyword Programming in Java. Greg Little and Robert C. Miller MIT CSAIL This work was supported in part by the National Science Foundation under award number IIS-0447800, and by Quanta Computer as part of the TParty project. Keyword Programming. Problem. src. array. cursor. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Keyword Programming in Java

Keyword Programming in Java

Greg Little and Robert C. MillerMIT CSAIL

This work was supported in part by the National Science Foundation under award number IIS-0447800,and by Quanta Computer as part of the TParty project.

Page 2: Keyword Programming in Java

Keyword Programming

Page 3: Keyword Programming in Java

Problem

src

read a line from src,and add it to array

array

cursor

Page 4: Keyword Programming in Java

AutoComplete

read a line from src,and add it to array

Page 5: Keyword Programming in Java

AutoComplete

read a line from src,and add it to array

Page 6: Keyword Programming in Java

read a line from src,and add it to array

AutoComplete

Page 7: Keyword Programming in Java

AutoComplete

read a line from src,and add it to array

Page 8: Keyword Programming in Java

AutoComplete

read a line from src,and add it to array

Page 9: Keyword Programming in Java

read a line from src,and add it to array

AutoComplete

Page 10: Keyword Programming in Java

read a line from src,and add it to array

AutoComplete

Page 11: Keyword Programming in Java

AutoComplete

read a line from src,and add it to array

Page 12: Keyword Programming in Java

Keyword Programming

read a line from src,and add it to array

Page 13: Keyword Programming in Java

Keyword Programming

read a line from src,and add it to array

Page 14: Keyword Programming in Java

Keyword Programming

read a line from src,and add it to array

Page 15: Keyword Programming in Java

Keyword Programming

read a line from src,and add it to array

Page 16: Keyword Programming in Java

Keyword Programming

read a line from src,and add it to array

Page 17: Keyword Programming in Java

Related Work

AutoCompletesyntactically valid prefix

Jungloids [Mandelin et al PLDI ’05]

XSnippet [Sahavechaphan et al OOPSLA ’06]

input and output types

Keyword Programmingkeywords from expression

Page 18: Keyword Programming in Java

Motivation

Page 19: Keyword Programming in Java

Overview

• Algorithm

• Evaluation

Page 20: Keyword Programming in Java

Algorithm

array.add(src.readLine());

Page 21: Keyword Programming in Java

array.add(src.readLine);

array readLine

src

Algorithm

Page 22: Keyword Programming in Java

array.add(src.readLine);

array readLine

src

Algorithm

BufferedReader

StringList<String>

Page 23: Keyword Programming in Java

arrayList<String>

readLineString

BufferedReader

srcBufferedReader

addboolean

List<String>, String

Algorithm

Page 24: Keyword Programming in Java

arrayList<String>

readLineString

BufferedReader

srcBufferedReader

addboolean

List<String>, String

Algorithm

Function

Page 25: Keyword Programming in Java

Algorithm

Function Database

Dynamic Program

Extract Tree

Page 26: Keyword Programming in Java

Function Database

arrayList<String>

Page 27: Keyword Programming in Java

Function Database

arrayList<String>

addboolean

List<String>, String

Page 28: Keyword Programming in Java

Function Database

arrayList<String>

addboolean

List<String>, Stringsrc

BufferedReader

Page 29: Keyword Programming in Java

List Functions

arrayList<String>

addboolean

List<String>, Stringsrc

BufferedReaderreadLine

String

BufferedReader

Page 30: Keyword Programming in Java

Function Database

arrayList<String>

addboolean

List<String>, Stringsrc

BufferedReaderreadLine

String

BufferedReader

new StringString

Page 31: Keyword Programming in Java

Score Functions

arrayList<String>

addboolean

List<String>, Stringsrc

BufferedReaderreadLine

String

BufferedReader

new StringString

Page 32: Keyword Programming in Java

Score Functions

arrayList<String>

addboolean

List<String>, Stringsrc

BufferedReaderreadLine

String

BufferedReader

new StringString

add line

Page 33: Keyword Programming in Java

1

Score Functions

arrayList<String>

addboolean

List<String>, Stringsrc

BufferedReaderreadLine

String

BufferedReader

new StringString

add line

Page 34: Keyword Programming in Java

Score Functions

arrayList<String>

addboolean

List<String>, Stringsrc

BufferedReaderreadLine

String

BufferedReader

new StringString

add line

11

Page 35: Keyword Programming in Java

Dynamic Program

List<String> BufferedReader String

List<String> boolean BufferedReader String

List<String> boolean BufferedReader Stringadd

List<String>, Stringsrc readLine

BufferedReader

array addList<String>, String

readLineBufferedReader

arrayboolean

array

src new String

src

?

arrayList<String>

addboolean

List<String>, Stringsrc

BufferedReaderreadLine

String

BufferedReader

new StringString

11

addList<String>, String

1

1

1

1

1

1 1

12

1

Page 36: Keyword Programming in Java

Extract Tree

List<String> BufferedReader String

List<String> boolean BufferedReader String

List<String> boolean BufferedReader Stringadd

List<String>, Stringsrc readLine

BufferedReader

array addList<String>, String

readLineBufferedReader

array

array

src new String

src

12

Page 37: Keyword Programming in Java

Extract Tree

List<String> BufferedReader String

List<String> boolean BufferedReader String

List<String> boolean BufferedReader Stringadd

List<String>, Stringsrc readLine

BufferedReader

array addList<String>, String

readLineBufferedReader

array

array

src new String

src

12

Page 38: Keyword Programming in Java

Extract Tree

List<String> BufferedReader String

List<String> boolean BufferedReader String

List<String> boolean BufferedReader Stringadd

List<String>, Stringsrc readLine

BufferedReader

array addList<String>, String

readLineBufferedReader

array

array

src new String

src

12

Page 39: Keyword Programming in Java

Extract Tree

List<String> BufferedReader String

List<String> boolean BufferedReader String

List<String> boolean BufferedReader Stringadd

List<String>, Stringsrc readLine

BufferedReader

array addList<String>, String

readLineBufferedReader

array

array

src new String

src

12

Page 40: Keyword Programming in Java

Extract Tree

BufferedReader

addList<String>, String

array readLineBufferedReader

src

List<String> String

boolean

Page 41: Keyword Programming in Java

Render as Java

BufferedReader

addList<String>, String

array readLineBufferedReader

src

List<String> String

boolean

array.add(src.readLine())

Page 42: Keyword Programming in Java

More Complex

.Math.max(x, y)..........

Keep best n functions per box

max x y . .Math.max(x, x)..........

3

Discourage double counting

Page 43: Keyword Programming in Java

Artificial Corpussense of speed in real projectssense of accuracy in wide variety of contexts

User Studysense of accuracy on real inputssense for how real inputs look

Evaluation

Page 44: Keyword Programming in Java

Artificial Corpus

Azureus 340 kloc

Buddi 28 kloc

CAROL 18 kloc

Dnsjava 17 kloc

Jakarta CC 10 kloc

jEdit 125 kloc

jMemorize 15 kloc

Jmol 88 kloc

JRuby 72 kloc

Radeox 71 kloc

RSSOwl 71 kloc

Sphinx 67 kloc

TV-Browser 120 kloc

Zimbra 256 kloc

multiple open source repositories

Popular

Could Compile

Page 45: Keyword Programming in Java

Artificial Corpus

Azureus 340 kloc

Buddi 28 kloc

CAROL 18 kloc

Dnsjava 17 kloc

Jakarta CC 10 kloc

jEdit 125 kloc

jMemorize 15 kloc

Jmol 88 kloc

JRuby 72 kloc

Radeox 71 kloc

RSSOwl 71 kloc

Sphinx 67 kloc

TV-Browser 120 kloc

Zimbra 256 kloc

Page 46: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

Page 47: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

RubySymbol newSymbol getRuntime name

Page 48: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

RubySymbol newSymbol getRuntime nameRuby Symbol new Symbol get Runtime name

Page 49: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

RubySymbol newSymbol getRuntime nameRuby Symbol new Symbol get Runtime nameruby symbol new symbol get runtime name

Page 50: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

RubySymbol newSymbol getRuntime nameRuby Symbol new Symbol get Runtime nameruby symbol new symbol get runtime namename runtime get symbol symbol ruby new

Page 51: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

name runtime get symbol symbol ruby new

Page 52: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

name runtime get symbol symbol ruby new

Algorithm

Page 53: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

Algorithm

name runtime get symbol symbol ruby new

Page 54: Keyword Programming in Java

Artificial Corpus

RubySymbol.newSymbol(getRuntime(), name)

Algorithm

Record:- match?- how long?- how many keywords?

name runtime get symbol symbol ruby new

Page 55: Keyword Programming in Java

Results

overall 91%

Page 56: Keyword Programming in Java

Results

under 500ms

Page 57: Keyword Programming in Java

Results

Page 58: Keyword Programming in Java

Results

Page 59: Keyword Programming in Java

User Study

solicited experienced Java programmers (from college mailing lists)

motivated with money—chance to win $20

web based study

good data for 49 participants

ages: 18 - 74

about 70% students

3 females

Page 60: Keyword Programming in Java

User Study

Page 61: Keyword Programming in Java

User Study

Page 62: Keyword Programming in Java

ResultsA

lgori

thm

as-isCorrect Incorrect

vowels.indexOf(c) vowels.index(c)

vowels.index(c) vowels.isIn(c)

index of c in vowels check vowels for c, return neg -1 if c is in vowels

vowels search c search

vowels.charAt(c)

vowels.indexOf(c,Integer.SIZE))

c

Page 63: Keyword Programming in Java

Results

Alg

ori

thm

as-is

Page 64: Keyword Programming in Java

Results

java key/pseudo

using as-is

using algorithm

Page 65: Keyword Programming in Java

Results

java key/pseudo

using as-is 53%

using algorithm 71% 53%

Page 66: Keyword Programming in Java

Future Work

print name of f

Integer.valueOf(f.getName())

System.out.print(f.getName())

a priori word weights

becomeswant

offname

printfname

1113

1113

Page 67: Keyword Programming in Java

Future Work

println f name

System.err.println(f.getName())

System.out.println(f.getName())

a priori function weights

becomes

want

printlnfname

1113

printlnfname

1113

Page 68: Keyword Programming in Java

Future Work

synonyms

lowercase toLowerCase

add vs append

spell correction

Page 69: Keyword Programming in Java

Conclusion

array.add(src.readLine());

Page 70: Keyword Programming in Java

Backup Slides

70

Page 71: Keyword Programming in Java

E-mail

[email protected]

Page 72: Keyword Programming in Java
Page 73: Keyword Programming in Java
Page 74: Keyword Programming in Java
Page 75: Keyword Programming in Java
Page 76: Keyword Programming in Java
Page 77: Keyword Programming in Java
Page 78: Keyword Programming in Java
Page 79: Keyword Programming in Java
Page 80: Keyword Programming in Java