Static Analysis Support for Domains with Limited Type Information
Total Page:16
File Type:pdf, Size:1020Kb
Static Analysis Support for Domains With Limited Type Information By Alisa J. Maas A dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy (Computer Sciences) at the UNIVERSITY OF WISCONSIN–MADISON 2021 Date of final oral examination: 06/25/2021 The dissertation is approved by the following members of the Final Oral Committee: Ben Liblit, former Associate Professor, Computer Sciences Tom Reps, Professor, Computer Sciences Loris D’Antoni, Assistant Professor, Computer Sciences Julian Dolby, Principal Research Staff Member, IBM Dimitris Papailiopoulos, Associate Professor, Electrical & Computer Engineering © Copyright by Alisa J. Maas 2021 All Rights Reserved i To frustrated developers everywhere. ii acknowledgments People think that computer science is the art of geniuses but the actual reality is the opposite, just many people doing things that build on each other, like a wall of mini stones. — Donald Knuth There are so many people who have been a part of helping me succeed, and it is fitting that the first traditional section of a dissertation acknowledges their support and encouragement. I could not be who I am without all of you, even the ones I haven’t met. I would like to thank my advisor, Ben Liblit, for everything. His curiosity and enthusiasm was a constant source of inspiration for me. Whenever I walked into a meeting feeling discouraged about my progress, Ben helped me to recognize the parts of my contributions that I was dismissive about. I seldom left meetings feeling anything other than excited to get back to work, and he instilled in me a desire to get things done right, not just done. Words are inadequate to express how grateful I am for his guidance. Julian Dolby served as a surrogate advisor when Ben transitioned to a full-time industry position at Amazon, and I am very thankful for his time, advice, and support, particularly at the end of my PhD. He was ever-more optimistic about research directions than I am inclined to be, and I know my research would be far worse off without his encouragement to test ideas rather than discarding them when my skept-ometer was off the charts. I would also like to thank the rest of my committee: Tom Reps, Loris D’Antoni, and Dimitris Papiliopoulos. Their feedback has helped me to focus my research interests in fruitful directions and their support has enabled me to push on when progress was challenging. The University of Wisconsin–Madison’s faculty, staff, and resources, both Computer Sciences and the school at large, made this research possible. I want to particularly thank Angela Thorp, the Graduate Program Coordinator. Angela provided invaluable support during my PhD process, far above and beyond the role of a program coordinator. She was supportive, empathetic, and offered a vital combination of encouragement and practical advice. Her hard work makes the logistics of navigating the PhD process possible. I also would like to particularly thank the Center for High Throughput Computing (CHTC) at the University of Wisconsin–Madison. The team there was incredibly helpful when I needed to run distributed experiments. I mainly interacted with Christina Koch and Jess Vera, both of whom provided troubleshooting and advice for how to streamline my experiments in a way that interacted well with the CHTC’s interface. iii Discussions with other members of the Liblit research group were very formative for me, and I would like to thank Peter Ohmann, Dave Bingham Brown, Pallavi Ghosh, Zi Wang, and Naveen Neelakandan, who were subject to group meetings with me. I inflicted each with numerous practice talks, brainstorming sessions, and endless questions. I am forever grateful for their support, particularly Peter, my former officemate. Although I did not overlap with him during my graduate studies, I am also very grateful for Tristan Ravitch’s research, as much of my own work was directly inspired by his work on polyglot programming during his time in the Liblit group. Although neither of them has ever taken a class in computer science, my parents (Aimee & David Maas) were formative for my growth into a burgeoning scientist and researcher. From a young age, they encouraged my questions and treated my thoughts and opinions seriously. My mom’s patience with us and her ability to remain calm even during stressful situations inspires me. She instilled in me her ability to break a stressful task down into smaller, manageable steps, without which I would never have completed any research projects. When I wanted to be an English teacher, my dad took it seriously, and made sure my writing skills could handle such a possible future career. He also first put into my head the idea that I might enjoy computer science. Without his suggesting it, I probably never would have even considered taking that first class. My sisters and their families are an integral part of my life, and I cannot imagine having done this without them. To Abby Andrews, her husband Jacob, and my nephew Ivan and niece Evelyn; and Kayla Kirkland, her husband Joseph, and my nephews Liam and Levi: thank you. I am incredibly grateful to have grown up with Abby and Kayla. Abby’s creativeness and humor and love is irreplaceable, as is Kayla’s resilience, love, and strength. I could not have picked better sisters to grow up with. I have been so thankful to welcome into the family both brothers-in-law and my niece and nephews. I want to thank the rest of my extended family: grandparents, aunts, uncles, cousins, cousins-of-cousins and others. You have been there for me all my life. I have no words to express how much I love and appreciate you all. Thank you. I would never have taken a second computer science class if it were not for my first programming teacher, Thomas VanDrunen, whose enthusiasm for computer science helped me realize how different programming was from the boring, clinical skill I expected. The other computer science students at my undergraduate school, Wheaton College, provided a tightly-knit community and introduced me to so many others who were passionate about Making Cool Things. In particular I want to thank Lily & James Hampton, John Charles & Emily Bauschatz, Drew & Suzanne Hannay, Kendall Park, Dan Opdyke, Andrew Wolfe, iv Leanne Miller, Becca Meloy, Tim MacDonald, and Cheney Hester. And Duckjstra. Not all of them were officially computer science majors, but all of them made my time in the computer science department far more fun. Long live the quote wall! My Madison friends also deserve many thanks for their love, support, and encouragement. They have played board games with me, stood in riddle-solving circles, and invented creative games to play far too late at night. Simply listing each of your names does not feel like enough. I would not have remained sane without you all. From the CS lunch/games crew, I especially want to thank Alex Cobian, for his endless support and treasure chest of board games; Alexi Brooks (and partner, Beth Miller) for hosting many game nights and for being a valued friend; Steven Brown, for more inside jokes than I can count (“We’re missing pieces!”) and many outings to cornfields and pumpkin patches; and so many others (Corey Schulz, Matthew Bernstein, all the Kevins except Thursday Kevin, Monica Thompson & Austen Ott, Chris Feilbach, and Mark Mansi). And, of course, Sally Seacow, the indomitable guardian of the CS 302 Testing Server. My church family, Laketrails, has supported and encouraged me more than they could possibly know. Learning and growing with them has helped me to be a better and happier human. I particularly want to thank my community group members (Max & Ann Harris, Claire & Nelson Mankey, Carl & Diana Anderson, Carla Winsor, Jeremy Erikson, Tucker Meyers, Josh Land, and Annette Dean) for the way they have loved me, prayed with and for me, and helped shape me into who I am today. So many friends do not fit neatly in a category, but I am no less thankful for them. Some are besties, conference-friends or cross-country friendships, and some defy categorization. Thank you so much, Katie Pinson, Ming-Ho Yee, Jake Hughes, Daniel Pelsmaeker, Jaime & Dave Ballard, and Kira Lawrence. You have served as friends, emotional support, and been bright spots in otherwise stressful times. Your presence in my life has vastly improved it. Although I have never met any of them, I am incredibly grateful for the authors whose books have made an impact on me. Some (though certainly not all!) of these authors are: Patricia C. Wrede, Diana Wynne Jones, Patrick Rothfuss, Brandon Sanderson, Timothy Zahn, Sherwood Smith, Naomi Novik, Madeline L’Engle, Vivian Vande Velde, C. S. Lewis, C. Dale Brittain, Gail Carson Levine, Lois Lowry, Rinsai Rossetti, Intisar Khanani, Drew Hayes, Jacyln Moriarty, Ron Stallworth, Carolyn Keene, and Marshall Ryan Maresca. Some books give me a flash of insight into the incredibly diverse ways people operate, some help me to feel seen and loved, and some just give me the space to slip into another world for a few hours. I am a better human for having read books by these authors. They instill me with curiosity v and empathy, and for that, I will never stop being grateful. Much of my love for programming developed from a love of worldbuilding and realistic characters: in some ways, the power to construct a world where you define the rules belongs both to the writer and to the programmer. This dissertation was supported in part by grants from CAPEs and CNPq; DARPA MUSE award FA8750-14-2-0270; and NSF grants CCF-0953478, CCF-1217582, CCF-1318489, and CCF-1420866.