finding minimum type error sources
play

Finding Minimum Type Error Sources Zvonimir Pavlinovic - PowerPoint PPT Presentation

Finding Minimum Type Error Sources Zvonimir Pavlinovic Tim King Thomas Wies New York University


  1. Finding ¡Minimum ¡Type ¡ Error ¡Sources ¡ ¡Zvonimir ¡Pavlinovic ¡ ¡ ¡ ¡ ¡Tim ¡King ¡ ¡ ¡ ¡ ¡Thomas ¡Wies ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡New ¡York ¡University ¡

  2. Motivating ¡example ¡ let f(lst:move list): (float*float) list = ... let rec loop lst x y dir acc = if lst = [] then acc print_string: ¡string ¡-­‑> ¡unit ¡ else print_string "foo" in List.rev ¡ (loop lst 0.0 0.0 0.0 [(0.0 ,0.0)]) Error: ¡This ¡expression ¡has ¡type ¡‘a ¡list ¡but ¡an ¡expression ¡was ¡ expected ¡of ¡type ¡unit ¡ [Zhang ¡& ¡Myers, ¡POPL ¡‘14] ¡

  3. Problem? ¡ • Type ¡error ¡reports ¡oPen ¡not ¡helpful ¡ • increased ¡debugging ¡Qme ¡ • difficult ¡to ¡learn ¡a ¡language ¡by ¡novice ¡programmers ¡ • How ¡to ¡improve? ¡ • consider ¡all ¡error ¡sources ¡ • rank ¡them ¡by ¡some ¡useful ¡criterion ¡ • report ¡top ¡ranked ¡sources ¡to ¡the ¡programmer ¡

  4. Solutions? ¡ • Previous ¡research ¡aUempts: ¡ • slice ¡of ¡type ¡inference ¡deducQon ¡ ¡ [Wand ¡`86, ¡Duggan ¡& ¡ Bent ¡`95] ¡ • program ¡slice ¡involved ¡in ¡error ¡ ¡ [Tip ¡& ¡Dinesh ¡`01, ¡Gast ¡`05] ¡ • specially ¡craPed ¡type ¡systems ¡ ¡ [ChiQl ¡`01, ¡Neubauer ¡& ¡ ¡ ¡ ¡ Thiemann ¡`03, ¡Chen ¡& ¡Erwig ¡`14] ¡ • Drawbacks: ¡ • focus ¡on ¡a ¡single ¡ranking ¡criterion ¡ • focus ¡on ¡a ¡specific ¡type ¡system ¡ • substanQal ¡compiler ¡modificaQons ¡

  5. Challenge ¡ • Can ¡we ¡enable ¡compilers ¡localize ¡type ¡errors ¡ • abstracQng ¡from ¡a ¡specific ¡ranking ¡criterion ¡ • for ¡various ¡type ¡systems ¡ • with ¡modest ¡compiler ¡modificaQons? ¡ • In ¡this ¡work: ¡ general ¡framework ¡for ¡type ¡error ¡ localiza3on ¡using ¡constraint ¡solving ¡

  6. De?initions ¡ ? ¡ let x = "hi" in not x Error ¡Source ¡ ¡ An ¡error ¡source ¡is ¡a ¡set ¡of ¡program ¡expressions ¡that, ¡ once ¡corrected, ¡yield ¡a ¡well-­‑typed ¡program ¡

  7. De?initions ¡ ? ¡ let x = "hi" in not x • Rank ¡sources ¡by ¡some ¡ useful ¡criterion ¡ • by ¡ ¡assigning ¡weights ¡to ¡expressions ¡ Minimum ¡Error ¡Source ¡ ¡ An ¡error ¡source ¡with ¡minimum ¡cumula3ve ¡weight ¡

  8. Ranking ¡criteria ¡-­‑ ¡example ¡ • Prefer ¡error ¡sources ¡requiring ¡fewer ¡correcQons? ¡ • assign ¡weights ¡equal ¡to ¡expression’s ¡AST ¡size ¡ ? ¡(5) ¡ ? ¡(1) ¡ ? ¡(1) ¡ ? ¡(1) ¡ ? ¡(3) ¡ let x = "hi" in not x

  9. Problem ¡de?inition ¡ Compu/ng ¡Minimum ¡Error ¡Sources ¡ ¡ Given ¡a ¡program ¡and ¡a ¡compiler-­‑provided ¡ranking ¡ criterion, ¡find ¡a ¡minimum ¡error ¡source ¡subject ¡to ¡ the ¡criterion ¡ • How? ¡ • search ¡through ¡all ¡hole ¡versions ¡of ¡an ¡input ¡program ¡ • reducQon ¡to ¡constraint ¡solving : ¡weighted ¡maximum ¡ sa3sfiability ¡modulo ¡theories ¡

  10. Framework ¡ Compiler ¡ input ¡program ¡and ¡ minimum ¡error ¡ ¡ ranking ¡criterion ¡ sources ¡ constraint ¡ Typing ¡Constraint ¡ Weighted ¡MaxSMT ¡ GeneraQon ¡ Solver ¡ • Support ¡for ¡various ¡type ¡systems ¡due ¡to ¡SMT ¡ • Modest ¡compiler ¡modificaQons ¡ • Abstracts ¡from ¡specific ¡ranking ¡criteria ¡

  11. Weighted ¡MaxSMT ¡ Input: ¡ ¡ • hard ¡clauses ¡ ¡ • must ¡hold ¡ • soP ¡clauses ¡ • each ¡clause ¡assigned ¡a ¡weight ¡ • each ¡clause ¡belongs ¡to ¡a ¡fixed ¡first-­‑order ¡theory ¡ • algebraic ¡data ¡types, ¡linear ¡integer ¡arithmeQc, ¡… ¡ ¡ Output: ¡ • A ¡saQsfiable ¡subset ¡of ¡soP ¡clauses ¡with ¡maximum ¡ cumulaQve ¡weight ¡(hard ¡clauses ¡must ¡hold) ¡

  12. Reduction ¡to ¡MaxSMT ¡ let x = "hi" in not x ? ¡ T let = ⇒ ( α let = α o ∧ T x = ⇒ α x = string ∧ T app = ⇒ ( α app = fun ( α i , α o ) ∧ hard ¡ T not = ⇒ α not = α app ∧ T i = ⇒ α i = α x )) ∧ T not impl = ⇒ α not = fun ( bool , bool ) ∧ T let ∧ T x ∧ T app ∧ T not ∧ T i ∧ T not impl w let w x w app w not w i w not impl

  13. Implementation ¡ • Subset ¡of ¡OCaml ¡(Caml) ¡ • Hindley-­‑Milner ¡type ¡system ¡ • Constraint ¡generaQon ¡using ¡EasyOCaml ¡ • constraint ¡encoded ¡in ¡the ¡theory ¡of ¡inducQve ¡data ¡types ¡ • Weighted ¡MaxSMT ¡procedures ¡using ¡Sat4j ¡and ¡ CVC4 ¡ • circa ¡500 ¡lines ¡of ¡Java ¡code ¡ • EvaluaQon ¡on ¡~350 ¡programs ¡from ¡ [Lerner ¡et ¡al., ¡`07] ¡

  14. Evaluation ¡ 180 ¡ seconds ¡ 160 ¡ 140 ¡ 120 ¡ 15% ¡increase ¡in ¡accuracy ¡over ¡OCaml ¡ 100 ¡ min ¡ 80 ¡ median ¡ • ranking ¡criterion: ¡size ¡of ¡expression ¡ 60 ¡ max ¡ 40 ¡ 20 ¡ 0 ¡ 0-­‑50 ¡ 50-­‑100 ¡ 100-­‑150 ¡ 150-­‑200 ¡ 200-­‑250 ¡ 250-­‑300 ¡ 300-­‑350 ¡ 350-­‑400 ¡ (47) ¡ (102) ¡ (65) ¡ (57) ¡ (53) ¡ (28) ¡ (3) ¡ (1) ¡ program ¡size ¡in ¡LOC ¡

  15. Constraint ¡size ¡ Constraint size 100000 10000 Number of assertions 1000 100 10 0 50 100 150 200 250 Program size (lines of code)

  16. Performance ¡improvements ¡ • Type ¡checking ¡EXPTIME-­‑complete ¡[Mairson ¡`90, ¡ Kfoury ¡et ¡al. ¡`90] ¡ • SoluQon? ¡ • Lazy ¡quanQfier-­‑based ¡instanQaQon ¡ • Lazy ¡unificaQon-­‑based ¡instanQaQon ¡ • Further ¡opQmizaQons ¡ • Constraint ¡slicing ¡ • PreempQve ¡cuvng ¡

  17. Contributions ¡ • Clean ¡problem ¡formulaQon ¡ • type ¡error ¡localizaQon ¡as ¡an ¡opQmizaQon ¡problem ¡ • abstracts ¡from ¡ranking ¡criteria ¡ • General ¡algorithm ¡ • reducQon ¡to ¡weighted ¡MaxSMT ¡constraint ¡solving ¡ • supports ¡various ¡type ¡systems ¡due ¡to ¡SMT ¡ • modest ¡compiler ¡modificaQons ¡ ¡ Thank ¡you! ¡

Recommend


More recommend