Nothing Special   »   [go: up one dir, main page]

skip to main content
research-article
Open access

Live functional programming with typed holes

Published: 02 January 2019 Publication History

Abstract

Live programming environments aim to provide programmers (and sometimes audiences) with continuous feedback about a program's dynamic behavior as it is being edited. The problem is that programming languages typically assign dynamic meaning only to programs that are complete, i.e. syntactically well-formed and free of type errors. Consequently, live feedback presented to the programmer exhibits temporal or perceptive gaps.
This paper confronts this "gap problem" from type-theoretic first principles by developing a dynamic semantics for incomplete functional programs, starting from the static semantics for incomplete functional programs developed in recent work on Hazelnut. We model incomplete functional programs as expressions with holes, with empty holes standing for missing expressions or types, and non-empty holes operating as membranes around static and dynamic type inconsistencies. Rather than aborting when evaluation encounters any of these holes as in some existing systems, evaluation proceeds around holes, tracking the closure around each hole instance as it flows through the remainder of the program. Editor services can use the information in these hole closures to help the programmer develop and confirm their mental model of the behavior of the complete portions of the program as they decide how to fill the remaining holes. Hole closures also enable a fill-and-resume operation that avoids the need to restart evaluation after edits that amount to hole filling. Formally, the semantics borrows machinery from both gradual type theory (which supplies the basis for handling unfilled type holes) and contextual modal type theory (which supplies a logical basis for hole closures), combining these and developing additional machinery necessary to continue evaluation past holes while maintaining type safety. We have mechanized the metatheory of the core calculus, called Hazelnut Live, using the Agda proof assistant.
We have also implemented these ideas into the Hazel programming environment. The implementation inserts holes automatically, following the Hazelnut edit action calculus, to guarantee that every editor state has some (possibly incomplete) type. Taken together with this paper's type safety property, the result is a proof-of-concept live programming environment where rich dynamic feedback is truly available without gaps, i.e. for every reachable editor state.

Supplementary Material

WEBM File (a14-omar.webm)

References

[1]
Martín Abadi, Luca Cardelli, Pierre-Louis Curien, and Jean-Jacques Lévy. 1991. Explicit Substitutions. J. Funct. Program. 1, 4 (1991), 375–416.
[2]
Andreas Abel and Brigitte Pientka. 2010. Explicit Substitutions for Contextual Type Theory. In International Workshop on Logical Frameworks and Meta-languages: Theory and Practice (LFMTP).
[3]
Samson Abramsky. 1990. The lazy lambda calculus. In Research Topics in Functional Programming. Addison-Wesley Longman Publishing Co., Inc., 65–116. http://moscova.inria.fr/~levy/courses/X/M1/lambda/bib/90abramskylazy.pdf
[4]
Mehrdad Afshari, Earl T. Barr, and Zhendong Su. 2012. Liberating the programmer with prorogued programming. In Symposium on New Ideas in Programming and Reflections on Software (Onward!).
[5]
Alfred V. Aho and Thomas G. Peterson. 1972. A Minimum Distance Error-Correcting Parser for Context-Free Languages. SIAM J. Comput. 1, 4 (1972), 305–312.
[6]
Luís Eduardo de Souza Amorim, Sebastian Erdweg, Guido Wachsmuth, and Eelco Visser. 2016. Principled Syntactic Code Completion Using Placeholders. In International Conference on Software Language Engineering (SLE).
[7]
Dimitar Asenov and Peter Müller. 2014. Envision: A fast and flexible visual code editor with fluid interactions (Overview). In IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC).
[8]
Steve Awodey, Nicola Gambino, and Kristina Sojakova. 2012. Inductive types in homotopy type theory. In Symposium on Logic in Computer Science (LICS).
[9]
Brian E Aydemir, Aaron Bohannon, Matthew Fairbairn, J Nathan Foster, Benjamin C Pierce, Peter Sewell, Dimitrios Vytiniotis, Geoffrey Washburn, Stephanie Weirich, and Steve Zdancewic. 2005. Mechanized metatheory for the masses: the POPLMark challenge. In International Conference on Theorem Proving in Higher Order Logics. Springer, 50–65.
[10]
Roberto Baldoni, Emilio Coppa, Daniele Cono D’Elia, Camil Demetrescu, and Irene Finocchi. 2018. A Survey of Symbolic Execution Techniques. ACM Comput. Surv. 51, 3, Article 50 (2018).
[11]
H.P. Barendregt. 1984. The Lambda Calculus. Studies in Logic, Vol. 103. Elsevier.
[12]
Michael Bayne, Richard Cook, and Michael D. Ernst. 2011. Always-available Static and Dynamic Feedback. In International Conference on Software Engineering (ICSE).
[13]
Tomasz Blanc, Jean-Jacques Lévy, and Luc Maranget. 2005. Sharing in the Weak Lambda-Calculus. In Processes, Terms and Cycles: Steps on the Road to Infinity, Essays Dedicated to Jan Willem Klop, on the Occasion of His 60th Birthday (Lecture Notes in Computer Science), Vol. 3838. Springer, 70–87.
[14]
Maximilian C. Bolingbroke and Simon L. Peyton Jones. 2010. Supercompilation by evaluation. In Symposium on Haskell.
[15]
Edwin Brady. 2013. Idris, A General-Purpose Dependently Typed Programming Language: Design and Implementation. Journal of Functional Programming 23, 05 (2013), 552–593.
[16]
Sebastian Burckhardt, Manuel Fähndrich, Peli de Halleux, Sean McDirmid, Michal Moskal, Nikolai Tillmann, and Jun Kato. 2013. It’s Alive! Continuous Feedback in UI Programming. In Programming Language Design and Implementation (PLDI).
[17]
Margaret M. Burnett, John W. Atwood Jr., and Zachary T. Welch. 1998. Implementing Level 4 Liveness in Declarative Visual Programming Languages. In IEEE Symposium on Visual Languages.
[18]
Philippe Charles. 1991. A Practical Method for Constructing Efficient LALR(k) Parsers with Automatic Error Recovery. Ph.D. Dissertation. New York, NY, USA.
[19]
Sheng Chen and Martin Erwig. 2014. Counter-Factual Typing for Debugging Type Errors. In Principles of Programming Languages (POPL).
[20]
Sheng Chen and Martin Erwig. 2018. Systematic identification and communication of type errors. J. Funct. Program. 28 (2018).
[21]
Adam Chlipala, Leaf Petersen, and Robert Harper. 2005. Strict bidirectional type checking. In International Workshop on Types in Language Design and Implementation (TLDI).
[22]
David Raymond Christiansen. 2013. Bidirectional Typing Rules: A Tutorial. http://davidchristiansen.dk/tutorials/bidirectional. pdf .
[23]
Ravi Chugh, Brian Hempel, Mitchell Spradlin, and Jacob Albers. 2016. Programmatic and Direct Manipulation, Together at Last. In Programming Language Design and Implementation (PLDI).
[24]
Matteo Cimini and Jeremy G. Siek. 2016. The gradualizer: a methodology and algorithm for generating gradual type systems. In Principles of Programming Languages (POPL).
[25]
Pierre-Louis Curien. 1991. An Abstract Framework for Environment Machines. Theor. Comput. Sci. 82, 2 (1991), 389–402.
[26]
Evan Czaplicki. 2012. Elm: Concurrent FRP for Functional GUIs. Senior thesis, Harvard University (2012).
[27]
Evan Czaplicki. 2018. An Introduction to Elm. (2018). https://guide.elm-lang.org/ . Retrieved Apr. 7, 2018.
[28]
Curtis D’Alves, Tanya Bouman, Christopher Schankula, Jenell Hogg, Levin Noronha, Emily Horsman, Rumsha Siddiqui, and Christopher Kumar Anand. 2017. Using Elm to Introduce Algebraic Thinking to K-8 Students. In International Workshop on Trends in Functional Programming in Education (TFPIE).
[29]
Luis Damas and Robin Milner. 1982. Principal type-schemes for functional programs. In Principles of Programming Languages (POPL).
[30]
Rowan Davies and Frank Pfenning. 2001. A modal analysis of staged computation. J. ACM 48, 3 (2001), 555–604.
[31]
Philippe de Groote. 2002. On the Strong Normalisation of Intuitionistic Natural Deduction with Permutation-Conversions. Inf. Comput. 178, 2 (2002), 441–464.
[32]
Dominique Devriese, Marco Patrignani, and Frank Piessens. 2018. Parametricity versus the universal type. PACMPL 2, POPL (2018), 38:1–38:23.
[33]
Joshua Dunfield and Neelakantan R. Krishnaswami. 2013. Complete and easy bidirectional typechecking for higher-rank polymorphism. In International Conference on Functional Programming (ICFP).
[34]
Matthias Felleisen and Robert Hieb. 1992. The Revised Report on the Syntactic Theories of Sequential Control and State. Theor. Comput. Sci. 103, 2 (1992), 235–271.
[35]
Francisco Ferreira and Brigitte Pientka. 2014. Bidirectional Elaboration of Dependently Typed Programs. In Symposium on Principles and Practice of Declarative Programming (PPDP).
[36]
Sue Fitzgerald, Gary Lewandowski, Renee McCauley, Laurie Murphy, Beth Simon, Lynda Thomas, and Carol Zander. 2008. Debugging: finding, fixing and flailing, a multi-institutional study of novice debuggers. Computer Science Education 18, 2 (2008), 93–116.
[37]
Flutter Developers. 2017. Technical Overview - Flutter. https://flutter.io/technical-overview/ . Retrieved Sep. 21, 2017.
[38]
Jonathan Frankle, Peter-Michael Osera, David Walker, and Steve Zdancewic. 2016. Example-directed synthesis: a typetheoretic interpretation. In Principles of Programming Languages (POPL).
[39]
Ronald Garcia. 2013. Calculating Threesomes, With Blame. In International Conference on Functional Programming (ICFP).
[40]
Ronald Garcia and Matteo Cimini. 2015. Principal Type Schemes for Gradual Programs. In Principles of Programming Languages (POPL).
[41]
Herman Geuvers and Gueorgui I. Jojgov. 2002. Open Proofs and Open Terms: A Basis for Interactive Logic. In International Workshop on Computer Science Logic (CSL).
[42]
Adele Goldberg and David Robson. 1983. Smalltalk-80: the language and its implementation. Addison-Wesley Longman Publishing Co., Inc.
[43]
Susan L. Graham, Charles B. Haley, and William N. Joy. 1979. Practical LR Error Recovery. In Symposium on Compiler Construction (CC).
[44]
Philip J. Guo. 2013. Online Python tutor: embeddable web-based program visualization for CS education. In Technical Symposium on Computer Science Education (SIGCSE).
[45]
Matthew A. Hammer, Yit Phang Khoo, Michael Hicks, and Jeffrey S. Foster. 2014. Adapton: composable, demand-driven incremental computation. In Programming Language Design and Implementation (PLDI).
[46]
Robert Harper. 2016. Practical Foundations for Programming Languages (2nd ed.). Cambridge University Press.
[47]
Robert Harper and Christopher Stone. 2000. A Type-Theoretic Interpretation of Standard ML. In Proof, Language and Interaction: Essays in Honour of Robin Milner. MIT Press.
[48]
Christopher M. Hayden, Stephen Magill, Michael Hicks, Nate Foster, and Jeffrey S. Foster. 2012. Specifying and Verifying the Correctness of Dynamic Software Updates. In International Conference on Verified Software: Theories, Tools, Experiments (VSTTE).
[49]
Brian Hempel and Ravi Chugh. 2016. Semi-Automated SVG Programming via Direct Manipulation. In Symposium on User Interface Software and Technology (UIST).
[50]
David Herman, Aaron Tomb, and Cormac Flanagan. 2010. Space-efficient gradual typing. Higher-Order and Symbolic Computation 23, 2 (2010), 167.
[51]
Michael W. Hicks and Scott Nettles. 2005. Dynamic software updating. ACM Trans. Program. Lang. Syst. 27, 6 (2005), 1049–1096.
[52]
Catalin Hritcu, Michael Greenberg, Ben Karel, Benjamin C. Pierce, and Greg Morrisett. 2013. All Your IFCException Are Belong to Us. In IEEE Symposium on Security and Privacy. IEEE Computer Society, 3–17.
[53]
Yuu Igarashi, Taro Sekiyama, and Atsushi Igarashi. 2017. On Polymorphic Gradual Typing. Proc. ACM Program. Lang. 1, ICFP, Article 40 (Aug. 2017), 29 pages.
[54]
Mike Jones. 2017. Edit Code and Continue Debugging in Visual Studio (C#, VB, C++). https://docs.microsoft.com/en-us/ visualstudio/debugger/edit-and-continue . Retrieved Apr. 27, 2018.
[55]
Neil D. Jones, Carsten K. Gomard, and Peter Sestoft. 1993. Partial evaluation and automatic program generation. Prentice-Hall, Inc.
[56]
Gilles Kahn and David B. MacQueen. 1977. Coroutines and Networks of Parallel Processes. In IFIP Congress. 993–998.
[57]
Lennart C. L. Kats, Maartje de Jonge, Emma Nilsson-Nyman, and Eelco Visser. 2009. Providing rapid feedback in generated modular language environments: adding error recovery to scannerless generalized-LR parsing. In Conference on ObjectOriented Programming, Systems, Languages, and Applications (OOPSLA).
[58]
James C. King. 1976. Symbolic Execution and Program Testing. Commun. ACM 19, 7 (July 1976), 385–394.
[59]
Joomy Korkut and David Thrane Christiansen. 2018. Extensible Type-Directed Editing. In International Workshop on Type-Driven Development (TyDe).
[60]
Nico Lehmann and Éric Tanter. 2017. Gradual refinement types. In Principles of Programming Languages (POPL). http: //dl.acm.org/citation.cfm?id=3009856
[61]
Benjamin Lerner, Dan Grossman, and Craig Chambers. 2006. Seminal: Searching for ML Type-error Messages. In Workshop on ML.
[62]
Jean-Jacques Lévy and Luc Maranget. 1999. Explicit substitutions and programming languages. In International Conference on Foundations of Software Technology and Theoretical Computer Science. Springer, 181–200.
[63]
Eyal Lotem and Yair Chuchem. 2016. Project Lamdu. http://www.lamdu.org/ . Accessed: 2016-04-08.
[64]
Lena Magnusson. 1995. The implementation of ALF: a proof editor based on Martin-Löf’s monomorphic type theory with explicit substitution. Ph.D. Dissertation. Chalmers Institute of Technology.
[65]
Conor McBride. 2000. Dependently typed functional programs and their proofs. Ph.D. Dissertation. University of Edinburgh, UK. http://hdl.handle.net/1842/374
[66]
Renee McCauley, Sue Fitzgerald, Gary Lewandowski, Laurie Murphy, Beth Simon, Lynda Thomas, and Carol Zander. 2008. Debugging: a review of the literature from an educational perspective. Computer Science Education 18, 2 (2008), 67–92.
[67]
Sean McDirmid. 2007. Living It Up with a Live Programming Language. In Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA).
[68]
Aleksandar Nanevski, Frank Pfenning, and Brigitte Pientka. 2008. Contextual modal type theory. ACM Trans. Comput. Log. 9, 3 (2008).
[69]
Greg L. Nelson, Benjamin Xie, and Andrew J. Ko. 2017. Comprehension First: Evaluating a Novel Pedagogy and Tutoring System for Program Tracing in CS1. In Conference on International Computing Education Research (ICER).
[70]
Ulf Norell. 2007. Towards a practical programming language based on dependent type theory. Ph.D. Dissertation. Department of Computer Science and Engineering, Chalmers University of Technology, SE-412 96 Göteborg, Sweden.
[71]
Ulf Norell. 2009. Dependently typed programming in Agda. In International Workshop on Types in Languages Design and Implementation (TLDI).
[72]
Martin Odersky, Christoph Zenger, and Matthias Zenger. 2001. Colored local type inference. In Principles of Programming Languages (POPL).
[73]
Cyrus Omar, Ian Voysey, Ravi Chugh, and Matthew A. Hammer. 2018. Live Functional Programming with Typed Holes (Extended Version). ArXiv e-prints (Nov. 2018). https://arxiv.org/abs/1805.00155
[74]
Cyrus Omar, Ian Voysey, Michael Hilton, Jonathan Aldrich, and Matthew A. Hammer. 2017a. Hazelnut: A Bidirectionally Typed Structure Editor Calculus. In Principles of Programming Languages (POPL). http://dl.acm.org/citation.cfm?id= 3009900
[75]
Cyrus Omar, Ian Voysey, Michael Hilton, Joshua Sunshine, Claire Le Goues, Jonathan Aldrich, and Matthew A. Hammer. 2017b. Toward Semantic Foundations for Program Editors. In Summit on Advances in Programming Languages (SNAPL).
[76]
Zvonimir Pavlinovic, Tim King, and Thomas Wies. 2015. Practical SMT-Based Type Error Localization. In International Conference on Functional Programming (ICFP).
[77]
Roly Perera, Umut A. Acar, James Cheney, and Paul Blain Levy. 2012. Functional programs that explain their work. In International Conference on Functional Programming (ICFP).
[78]
Fernando Pérez and Brian E. Granger. 2007. IPython: a System for Interactive Scientific Computing. Computing in Science and Engineering 9, 3 (May 2007), 21–29. http://ipython.org
[79]
Simon Peyton Jones, Sean Leather, and Thijs Alkemade. 2014. Language options — Glasgow Haskell Compiler 8.4.1 User’s Guide (Typed Holes). http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html . Retrieved Apr 16, 2018.
[80]
Brigitte Pientka. 2010. Beluga: Programming with Dependent Types, Contextual Data, and Contexts. In International Symposium on Functional and Logic Programming (FLOPS).
[81]
Brigitte Pientka and Andrew Cave. 2015. Inductive Beluga: Programming Proofs. In International Conference on Automated Deduction.
[82]
Brigitte Pientka and Joshua Dunfield. 2008. Programming with proofs and explicit contexts. In Conference on Principles and Practice of Declarative Programming (PPDP).
[83]
Benjamin C. Pierce. 2002. Types and Programming Languages. MIT Press.
[84]
Benjamin C. Pierce and David N. Turner. 2000. Local type inference. ACM Trans. Program. Lang. Syst. 22, 1 (2000), 1–44.
[85]
Gordon D. Plotkin. 2004. A structural approach to operational semantics. J. Log. Algebr. Program. 60-61 (2004), 17–139.
[86]
Patrick Rein, Stefan Ramson, Jens Lincke, Robert Hirschfeld, and Tobias Pape. 2019. Exploratory and Live, Programming and Coding - A Literature Study Comparing Perspectives on Liveness. Programming Journal 3, 1 (2019).
[87]
Mitchel Resnick, John Maloney, Andrés Monroy-Hernández, Natalie Rusk, Evelyn Eastmond, Karen Brennan, Amon Millner, Eric Rosenbaum, Jay Silver, Brian Silverman, and Yasmin Kafai. 2009. Scratch: Programming for All. Commun. ACM 52, 11 (Nov. 2009), 60–67.
[88]
Wilmer Ricciotti, Jan Stolarek, Roly Perera, and James Cheney. 2017. Imperative functional programs that explain their work. PACMPL 1, ICFP (2017).
[89]
Martin C. Rinard. 2012. Obtaining and reasoning about good enough software. In Design Automation Conference (DAC).
[90]
Eric L. Seidel, Ranjit Jhala, and Westley Weimer. 2016. Dynamic Witnesses for Static Type Errors (or, Ill-typed Programs Usually Go Wrong). In International Conference on Functional Programming (ICFP).
[91]
Jeremy G. Siek and Walid Taha. 2006. Gradual Typing for Functional Languages. In Scheme and Functional Programming Workshop. http://scheme2006.cs.uchicago.edu/13-siek.pdf
[92]
Jeremy G. Siek and Walid Taha. 2007. Gradual Typing for Objects. In European Conference on Object-Oriented Programming (ECOOP).
[93]
Jeremy G. Siek, Michael M. Vitousek, Matteo Cimini, and John Tang Boyland. 2015a. Refined Criteria for Gradual Typing. In Summit on Advances in Programming Languages (SNAPL).
[94]
Jeremy G. Siek, Michael M. Vitousek, Matteo Cimini, Sam Tobin-Hochstadt, and Ronald Garcia. 2015b. Monotonic References for Efficient Gradual Typing. In European Symposium on Programming (ESOP).
[95]
Jeremy G. Siek and Philip Wadler. 2010. Threesomes, With and Without Blame. In Principles of Programming Languages (POPL).
[96]
Armando Solar-Lezama. 2009. The Sketching Approach to Program Synthesis. In Asian Symposium on Programming Languages and Systems (APLAS).
[97]
Saurabh Srivastava, Sumit Gulwani, and Jeffrey S Foster. 2013. Template-based program verification and program synthesis. International Journal on Software Tools for Technology Transfer 15, 5-6 (2013), 497–518.
[98]
Gareth Paul Stoyle, Michael W. Hicks, Gavin M. Bierman, Peter Sewell, and Iulian Neamtiu. 2007. Mutatis Mutandis: Safe and predictable dynamic software updating. ACM Trans. Program. Lang. Syst. 29, 4 (2007), 22.
[99]
M. Strecker, M. Luther, and F. von Henke. 1998. Interactive and automated proof construction in type theory. In Automated Deduction — A Basis for Applications. Vol. I: Foundations. Kluwer Academic Publishers, Chapter 3: Interactive Theorem Proving.
[100]
Matúš Sulír and Jaroslav Porubän. 2018. Augmenting Source Code Lines with Sample Variable Values. In Conference on Program Comprehension (ICPC).
[101]
Asumu Takikawa, Daniel Feltey, Earl Dean, Matthew Flatt, Robert Bruce Findler, Sam Tobin-Hochstadt, and Matthias Felleisen. 2015. Towards Practical Gradual Typing. In European Conference on Object-Oriented Programming (ECOOP).
[102]
Steven L. Tanimoto. 1990. VIVA: A visual language for image processing. J. Vis. Lang. Comput. 1, 2 (1990), 127–139.
[103]
Steven L. Tanimoto. 2013. A perspective on the evolution of live programming. In International Workshop on Live Programming (LIVE).
[104]
Andrew P. Tolmach and Andrew W. Appel. 1995. A Debugger for Standard ML. J. Funct. Program. 5, 2 (1995), 155–200.
[105]
Christian Urban, Stefan Berghofer, and Michael Norrish. 2007. Barendregt’s Variable Convention in Rule Inductions. In Conference on Automated Deduction (CADE).
[106]
B Victor. 2012. Inventing on principle, Invited talk at the Canadian University Software Engineering Conference (CUSEC). http://worrydream.com/#!/InventingOnPrinciple
[107]
Markus Voelter, Daniel Ratiu, Bernhard Schaetz, and Bernd Kolb. 2012. mbeddr: An Extensible C-based Programming Language and IDE for Embedded Systems. In SPLASH.
[108]
Markus Voelter, Janet Siegmund, Thorsten Berger, and Bernd Kolb. 2014. Towards User-Friendly Projectional Editors. In International Conference on Software Language Engineering (SLE).
[109]
Dimitrios Vytiniotis, Simon L. Peyton Jones, and José Pedro Magalhães. 2012. Equality proofs and deferred type errors: a compiler pearl. In International Conference on Functional Programming (ICFP).
[110]
Philip Wadler and Robert Bruce Findler. 2009. Well-Typed Programs Can’t Be Blamed. In European Symposium on Programming (ESOP).
[111]
David Wakeling. 2007. Spreadsheet functional programming. J. Funct. Program. 17, 1 (2007), 131–143.
[112]
Gerald M Weinberg. 1971. The Psychology of Computer Programming. Van Nostrand Reinhold New York.
[113]
David Weintrop, Afsoon Afzal, Jean Salac, Patrick Francis, Boyang Li, David C. Shepherd, and Diana Franklin. 2018. Evaluating CoBlox: A Comparative Study of Robotics Programming Environments for Adult Novices. In Conference on Human Factors in Computing (CHI).
[114]
David Weintrop and Uri Wilensky. 2015. To block or not to block, that is the question: students’ perceptions of blocks-based programming. In International Conference on Interaction Design and Children (IDC).
[115]
John Whitington and Tom Ridge. 2017. Visualizing the Evaluation of Functional Programs for Debugging. In Symposium on Languages, Applications and Technologies (SLATE).
[116]
Andrew K. Wright and Matthias Felleisen. 1994. A syntactic approach to type soundness. Information and Computation 115, 1 (1994), 38–94.
[117]
Ningning Xie, Xuan Bi, and Bruno C. d. S. Oliveira. 2018. Consistent Subtyping for All. In European Symposium on Programming (ESOP).
[118]
Y. S. Yoon and B. A. Myers. 2014. A longitudinal study of programmers’ backtracking. In IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC).
[119]
Danfeng Zhang, Andrew C. Myers, Dimitrios Vytiniotis, and Simon L. Peyton Jones. 2017. SHErrLoc: A Static Holistic Error Locator. ACM Trans. Program. Lang. Syst. 39, 4 (2017), 18:1–18:47.
[120]
John Zhang, Anirudh Verma, Chinmay Sheth, Christopher W Schankula, Stephanie Koehl, Andrew Kelly, Yumna Irfan, and Christopher K Anand. 2018. Graphics Programming in Elm Develops Math Knowledge & Social Cohesion. In International Conference on Computer Science and Software Engineering (CASCON).

Cited By

View all
  • (2024)Statically Contextualizing Large Language Models with Typed HolesProceedings of the ACM on Programming Languages10.1145/36897288:OOPSLA2(468-498)Online publication date: 8-Oct-2024
  • (2024)Haskelite: A Tracing Interpreter Based on a Pattern-Matching CalculusProceedings of the 17th ACM SIGPLAN International Haskell Symposium10.1145/3677999.3678274(1-13)Online publication date: 29-Aug-2024
  • (2024)Example-Based Reasoning about the Realizability of Polymorphic ProgramsProceedings of the ACM on Programming Languages10.1145/36746368:ICFP(317-337)Online publication date: 15-Aug-2024
  • Show More Cited By

Recommendations

Comments

Please enable JavaScript to view thecomments powered by Disqus.

Information & Contributors

Information

Published In

cover image Proceedings of the ACM on Programming Languages
Proceedings of the ACM on Programming Languages  Volume 3, Issue POPL
January 2019
2275 pages
EISSN:2475-1421
DOI:10.1145/3302515
Issue’s Table of Contents
This work is licensed under a Creative Commons Attribution International 4.0 License.

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 02 January 2019
Published in PACMPL Volume 3, Issue POPL

Permissions

Request permissions for this article.

Check for updates

Badges

Author Tags

  1. contextual modal type theory
  2. gradual typing
  3. live programming
  4. structured editing
  5. typed holes

Qualifiers

  • Research-article

Funding Sources

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)323
  • Downloads (Last 6 weeks)49
Reflects downloads up to 26 Nov 2024

Other Metrics

Citations

Cited By

View all
  • (2024)Statically Contextualizing Large Language Models with Typed HolesProceedings of the ACM on Programming Languages10.1145/36897288:OOPSLA2(468-498)Online publication date: 8-Oct-2024
  • (2024)Haskelite: A Tracing Interpreter Based on a Pattern-Matching CalculusProceedings of the 17th ACM SIGPLAN International Haskell Symposium10.1145/3677999.3678274(1-13)Online publication date: 29-Aug-2024
  • (2024)Example-Based Reasoning about the Realizability of Polymorphic ProgramsProceedings of the ACM on Programming Languages10.1145/36746368:ICFP(317-337)Online publication date: 15-Aug-2024
  • (2024)Autocorrection in Projectional EditorsCompanion Proceedings of the 8th International Conference on the Art, Science, and Engineering of Programming10.1145/3660829.3660844(94-98)Online publication date: 11-Mar-2024
  • (2024)Total Type Error Localization and Recovery with HolesProceedings of the ACM on Programming Languages10.1145/36329108:POPL(2041-2068)Online publication date: 5-Jan-2024
  • (2024)UNFOLD: Enabling Live Programming for Debugging GUI Applications2024 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC)10.1109/VL/HCC60511.2024.00041(306-316)Online publication date: 2-Sep-2024
  • (2024)Going beyond templates: composition and evolution in nested OSTRICHSoftware and Systems Modeling10.1007/s10270-024-01178-wOnline publication date: 20-May-2024
  • (2023)Semantic Versioning for Python ProgramsCompanion Proceedings of the 2023 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity10.1145/3618305.3623589(13-15)Online publication date: 22-Oct-2023
  • (2023)Trace-Guided Inductive Synthesis of Recursive Functional ProgramsProceedings of the ACM on Programming Languages10.1145/35912557:PLDI(860-883)Online publication date: 6-Jun-2023
  • (2023)Engraft: An API for Live, Rich, and Composable ProgrammingProceedings of the 36th Annual ACM Symposium on User Interface Software and Technology10.1145/3586183.3606733(1-18)Online publication date: 29-Oct-2023
  • Show More Cited By

View Options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Login options

Full Access

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media