RbSyn: type- and effect-guided program synthesis

  title={RbSyn: type- and effect-guided program synthesis},
  author={Sankha Narayan Guria and Jeffrey S. Foster and David Van Horn},
  journal={Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation},
In recent years, researchers have explored component-based synthesis, which aims to automatically construct programs that operate by composing calls to existing APIs. However, prior work has not considered efficient synthesis of methods with side effects, e.g., web app methods that update a database. In this paper, we introduce RbSyn, a novel type- and effect-guided synthesis tool for Ruby. An RbSyn synthesis goal is specified as the type for the target method and a series of test cases it must鈥β

Figures and Tables from this paper

ANOSY: Approximated Knowledge Synthesis with Refinement Types for Declassification
This work implemented a prototype of Anosy, an approximate knowledge synthesizer for quantitative declassification policies, and showed that it is precise and permissive: up to 14 declassification queries were permitted before policy violation using the powersets of interval domain.


Component-based synthesis for complex APIs
This paper presents a novel type-directed algorithm for component-based synthesis using a compact Petri-net representation to model relationships between methods in an API, and implements it in a tool called SyPet.
Program synthesis from polymorphic refinement types
The tool was able to synthesize more complex programs than those reported in prior work, as well as most of the benchmarks tackled by existing synthesizers, often starting from a more concise and intuitive user input.
Synthesizing data structure transformations from input-output examples
We present a method for example-guided synthesis of functional programs over recursive data structures. Given a set of input-output examples, our method synthesizes a program in a functional language
Test-driven synthesis
A program synthesizer which can be parameterized by an arbitrary DSL that may contain conditionals and loops and therefore is able to synthesize programs in any domain and is compared to state-of-the-art DSL-specific synthesizers as well to the general purpose synthesizer Sketch.
Growing solver-aided languages with rosette
ROSETTE is introduced, a framework for designing solver-aided languages that frees designers from having to compile their languages to constraints and describes three case studies of using ROSETTE to implement languages and synthesizers for web scraping, spatial programming, and superoptimization of bitvector programs.
Program synthesis using conflict-driven learning
The notion of equivalence modulo conflict is introduced and it is shown how this idea can be used to learn useful lemmas that allow the synthesizer to prune large parts of the search space.
CodeHint: dynamic and interactive synthesis of code snippets
The implementation, which is called CodeHint, generates and evaluates code at runtime and hence can synthesize real-world Java code that involves I/O, reflection, native calls, and other advanced language features and improves programmer productivity by more than a factor of two.
Why3 - Where Programs Meet Provers
We present Why3, a tool for deductive program verification, and WhyML, its programming and specification language. WhyML is a first-order language with polymorphic types, pattern matching, and
Structuring the synthesis of heap-manipulating programs
A deductive approach to synthesizing imperative programs with pointers from declarative specifications expressed in Separation Logic, which introduces the novel framework of Synthetic Sep separation Logic (SSL), and implements a proof search engine for SSL in a form of the program synthesizer called SuSLik.
Digging for fold: synthesis-aided API discovery for Haskell
The study shows that programmers equipped with Hoogle+ generally solve tasks faster and were able to solve 50% more tasks overall and shows how to extend this elimination technique to automatically generate informative inputs that can be used to demonstrate program behavior to the user.