input/output-based task speciﬁcations became more popular, with notable examples like FlashFill
(Gulwani, 2011). Finally, sketch-based approaches (Solar-Lezama, 2008) that synthesize programs
from a provided skeleton of the target program greatly reduce the search space. Gulwani et al. (2017)
provides an excellent survey of these program synthesis approaches.
In recent years, deep learning has emerged as a useful tool for program synthesis. Yin and Neubig
(2017) used recurrent networks with attention to map text to abstract syntax trees and then code.
Ling et al. (2016) used similar models, with pointer networks, to generate complex class structures
from mixed natural language and structured speciﬁcations of Hearthstone cards. Learned models can
now be used to guide program search (Balog et al., 2016), generate program sketches (Guo et al.,
2021; Murali et al., 2017), convert pseudocode to code (Kulal et al., 2019), directly generate a target
alphacode