Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
10.1145/3622758.3622895acmconferencesArticle/Chapter ViewAbstractPublication PagessplashConference Proceedingsconference-collections
research-article

Toward Programming Languages for Reasoning: Humans, Symbolic Systems, and AI Agents

Published: 19 October 2023 Publication History

Abstract

Integration, composition, mechanization, and AI assisted development are the driving themes in the future of software development. At their core these concepts are rooted in the increasingly important role of computing in our world, the desire to deliver functionality faster, with higher quality, and to empower more people to benefit from programmatic automation. These themes, and how they impact the human developers driving them, are the foundations for the next generation of programming languages. At first glance the needs of mechanization tools, AI agents, and human developers along with the various goals around development velocity, software quality, and software democratization are a broad and seemingly diverse set of needs. However, at their core is a single challenge that, once resolved, enables us to make radical progress in all of these areas.
Our hypothesis is that, fundamentally, software development is a problem of reasoning about code and semantics. This is true for human developers implementing a feature, symbolic tools building models of application behaviour, and even for language based AI agents as they perform tasks. While the particular aspects of reasoning that each agent struggles with varies to some degree, they share many common themes and, surprisingly, most mainstream languages extensively employ (anti)features that make this task harder or infeasible! This paper proposes a novel approach to this challenge – instead of new language features or logical constructs, that add more complexity to what is already a problem of complexity, we propose radical simplification in the form of the Bosque platform and language.

References

[1]
Miltiadis Allamanis, Earl T. Barr, Christian Bird, Premkumar T. Devanbu, Mark Marron, and Charles A. Sutton. Mining semantic loop idioms. IEEE Transactions on Software Engineering, 44, 2018.
[2]
Miltiadis Allamanis and Charles Sutton. Mining idioms from source code. In FSE, 2014.
[3]
Async/await, 2018. https://blogs.msdn.microsoft.com/dsyme/2007/10/10/introducing-f-asynchronous-workflows/.
[4]
Vaggelis Atlidakis, Patrice Godefroid, and Marina Polishchuk. Restler: Stateful REST API fuzzing. In ICSE, 2019.
[5]
Gilles Barthe, Juan Manuel Crespo, Sumit Gulwani, Cesar Kunz, and Mark Marron. From relational verification to SIMD loop synthesis. In PPoPP, 2013.
[6]
Gavin Bierman, Erik Meijer, and Wolfram Schulte. The essence of data access in Cω: The power is in the dot! In ECOOP, 2005.
[7]
Stephen M. Blackburn and Kathryn S. McKinley. Ulterior reference counting: Fast garbage collection without a long wait. In OOPSLA, 2003.
[8]
Sam Blackshear, Nikos Gorogiannis, Peter W. O’Hearn, and Ilya Sergey. Racerd: Compositional static race detection. 2018.
[9]
Frederick P. Brooks, Jr. No silver bullet essence and accidents of software engineering. Computer, 20, 1987.
[10]
Sebastian Burckhardt, Chris Gillum, David Justo, Konstantinos Kallas, Connor McMahon, and Christopher S. Meiklejohn. Durable functions: Semantics for stateful serverless. Proceedings ACM Programming Languages, 5, 2021.
[11]
V8 doesn’t stable sort, 2018. https://bugs.chromium.org/p/v8/issues/detail?id=90.
[12]
Berkeley Churchill, Rahul Sharma, JF Bastien, and Alex Aiken. Sound loop superoptimization for google native client. In ASPLOS, 2017.
[13]
Dave Clarke and Sophia Drossopoulou. Ownership, encapsulation and the disjointness of type and effect. In OOPSLA, 2002.
[14]
David G. Clarke, John M. Potter, and James Noble. Ownership types for flexible alias protection. In OOPSLA, 1998.
[15]
Copilot, 2023. https://github.com/features/copilot.
[16]
Ron Cytron, Jeanne Ferrante, Barry K. Rosen, Mark N. Wegman, and F. Kenneth Zadeck. Efficiently computing static single assignment form and the control dependence graph. ACM Transactions on Programming Language Systems, 13, 1991.
[17]
O. J. Dahl, E. W. Dijkstra, and C. A. R. Hoare, editors. Structured Programming. Academic Press Ltd., London, UK, UK, 1972.
[18]
Leonardo de Moura, Nikolaj Bjørner, and et. al. Z3 SMT Theorem Prover. https://github.com/Z3Prover/z3, 2021.
[19]
Azure durable functions, 2019. https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview.
[20]
express.js, 2019. https://expressjs.com/.
[21]
Manuel Fähndrich and K. Rustan M. Leino. Declaring and checking non-null types in an object-oriented language. In OOPSLA, 2003.
[22]
Manuel Fahndrich and Songtao Xia. Establishing object invariants with delayed types. In OOPSLA, 2007.
[23]
Roy Thomas Fielding. Architectural Styles and the Design of Network-Based Software Architectures. PhD thesis, 2000.
[24]
R. W. Floyd. Assigning meanings to programs. Mathematical Aspects of Computer Science, 19, 1967.
[25]
Colin S. Gordon, Matthew J. Parkinson, Jared Parsons, Aleks Bromfield, and Joe Duffy. Uniqueness and reference immutability for safe parallelism. In OOPSLA, 2012.
[26]
Sumit Gulwani. Automating string processing in spreadsheets using input-output examples. In POPL, 2011.
[27]
Sumit Gulwani and Mark Marron. Nlyze: Interactive programming by natural language for spreadsheet data analysis and manipulation. In SIGMOD, 2014.
[28]
Zhenyu Guo, Sean McDirmid, Mao Yang, Li Zhuang, Pu Zhang, Yingwei Luo, Tom Bergan, Madan Musuvathi, Zheng Zhang, and Lidong Zhou. Failure recovery: When the cure is worse than the disease. In HotOS XIV, 2013.
[29]
Ashutosh Gupta and Andrey Rybalchenko. Invgen: An efficient invariant generator. In CAV, 2009.
[30]
Ben Hardekopf and Calvin Lin. Flow-sensitive pointer analysis for millions of lines of code. In CGO, 2011.
[31]
Michael Hind. Pointer analysis: Haven’t we solved this problem yet? In PASTE, 2001.
[32]
C. A. R. Hoare. An axiomatic basis for computer programming. Communications of the ACM, 12, 1969.
[33]
David Hovemeyer and William Pugh. Finding bugs is easy. SIGPLAN Notices, 39, 2004.
[34]
Daniel Jackson and Craig A. Damon. Elements of style: Analyzing a software design feature with a counterexample detector. ISSTA, 1996.
[35]
Java streams, 2019. https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html.
[36]
On partially-constructed objects, 2010. http://joeduffyblog.com/2010/06/27/on-partiallyconstructed-objects/.
[37]
Deepak Kapur, David R. Musser, and Alexander A. Stepanov. Tecton: A language for manipulating generic objects. In Program Specification, 1982.
[38]
Ken Kennedy and John R. Allen. Optimizing Compilers for Modern Architectures: A Dependence-based Approach. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2002.
[39]
Gerwin Klein, Kevin Elphinstone, Gernot Heiser, June Andronick, David Cock, Philip Derrin, Dhammika Elkaduwe, Kai Engelhardt, Rafal Kolanski, Michael Norrish, Thomas Sewell, Harvey Tuch, and Simon Winwood. sel4: Formal verification of an os kernel. In SOSP, 2009.
[40]
Stephen Kou and Jens Palsberg. From OO to FPGA: Fitting round objects into square hardware? In OOPSLA, 2010.
[41]
Chris Lattner, Andrew Lenharth, and Vikram Adve. Making context-sensitive points-to analysis with heap cloning practical for the real world. In PLDI, 2007.
[42]
K. Rustan M. Leino and Francesco Logozzo. Loop invariants on demand. In APLAS, 2005.
[43]
Xavier Leroy. A formally verified compiler back-end. Journal Automated Reasoning, 43, 2009.
[44]
LINQ, 2019. https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/.
[45]
Barbara Liskov and Stephen Zilles. Programming with abstract data types. In VHLL, 1974.
[46]
lodash, 2019. https://lodash.com/.
[47]
log4j CVE, 2021. https://nvd.nist.gov/vuln/detail/CVE-2021-44228.
[48]
Mikaël Mayer, Gustavo Soares, Maxim Grechkin, Vu Le, Mark Marron, Oleksandr Polozov, Rishabh Singh, Benjamin Zorn, and Sumit Gulwani. User interaction models for disambiguation in programming by example. In UIST, 2015.
[49]
Davood Mazinanian, Ameya Ketkar, Nikolaos Tsantalis, and Danny Dig. Understanding the use of lambda expressions in Java. Proceedings ACM Programming Languages, 1, 2017.
[50]
John McCarthy and Patrick J. Hayes. Some philosophical problems from the standpoint of artificial intelligence. In Machine Intelligence 4, pages 463–502. Edinburgh University Press, 1969.
[51]
Steve McConnell. Code Complete, Second Edition. Microsoft Press, Redmond, WA, USA, 2004.
[52]
Mario Méndez-Lojo, Augustine Mathew, and Keshav Pingali. Parallel inclusion-based points-to analysis. In OOPSLA, 2010.
[53]
Ana Milanova, Atanas Rountev, and Barbara G. Ryder. Parameterized object sensitivity for points-to analysis for Java. ACM Transactions on Software Engineering and Methodology, 14, 2005.
[54]
Robin Milner, Mads Tofte, and David Macqueen. The Definition of Standard ML. MIT Press, Cambridge, MA, USA, 1997.
[55]
Steven S. Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 1997.
[56]
David R. Musser, Gilmer J. Derge, and Atul Saini. STL Tutorial and Reference Guide, Second Edition: C++ Programming with the Standard Template Library. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2001.
[57]
Flemming Nielson, Hanne R. Nielson, and Chris Hankin. Principles of Program Analysis. Springer-Verlag, Berlin, Heidelberg, 1999.
[58]
James Noble, Andrew P. Black, Kim B. Bruce, Michael Homer, and Mark S. Miller. The left hand of equals. In Onward!, 2016.
[59]
npm.js, 2023. https://www.npmjs.com/.
[60]
Peter W. O’Hearn. Incorrectness logic. In POPL, 2019.
[61]
OpenAI. GPT-4 technical report, 2023.
[62]
Daniel Perelman, Sumit Gulwani, Dan Grossman, and Peter Provost. Test-driven synthesis. In PLDI, 2014.
[63]
Filip Pizlo, Erez Petrank, and Bjarne Steensgaard. A study of concurrent real-time garbage collectors. In PLDI, 2008.
[64]
Jonathan Protzenko, Jean-Karim Zinzindohoué, Aseem Rastogi, Tahina Ramananandro, Peng Wang, Santiago Zanella-Béguelin, Antoine Delignat-Lavaud, Cătălin Hriţcu, Karthikeyan Bhargavan, Cédric Fournet, and Nikhil Swamy. Verified low-level programming embedded in F*. In ICFP, 2017.
[65]
react, 2019. https://reactjs.org/.
[66]
John C. Reynolds. Separation logic: A logic for shared mutable data structures. In LICS, 2002.
[67]
Rust, 2022. https://www.rust-lang.org/.
[68]
Sriram Sankaranarayanan, Henny B. Sipma, and Zohar Manna. Non-linear loop invariant generation using gröbner bases. In POPL, 2004.
[69]
Semantic versioning 2.0.0, 2018. https://semver.org/.
[70]
Xujie Si, Hanjun Dai, Mukund Raghothaman, Mayur Naik, and Le Song. Learning loop invariants for program verification. In Advances in Neural Information Processing Systems 31, pages 7751–7762. 2018.
[71]
Bjarne Steensgaard. Points-to analysis in almost linear time. In POPL, 1996.
[72]
Alexandru Sălcianu and Martin Rinard. Purity and side effect analysis for Java programs. In VMCAI, 2005.
[73]
Jesse A. Tov and Riccardo Pucella. Practical affine types. In POPL, 2011.
[74]
3.3, 2019. https://www.typescriptlang.org/.
[75]
Peter Vanbroekhoven, Gerda Janssens, Maurice Bruynooghe, and Francky Catthoor. Transformation to dynamic single assignment using a simple data flow analysis. In APLAS, 2005.
[76]
Philip Wadler. Linear types can change the world! In Programming Concepts and Methods, 1990.
[77]
Wenyu Zhao, Stephen M. Blackburn, and Kathryn S. McKinley. Low-latency, high-throughput garbage collection. In PLDI, 2022.

Cited By

View all

Index Terms

  1. Toward Programming Languages for Reasoning: Humans, Symbolic Systems, and AI Agents

    Recommendations

    Comments

    Information & Contributors

    Information

    Published In

    cover image ACM Conferences
    Onward! 2023: Proceedings of the 2023 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software
    October 2023
    204 pages
    ISBN:9798400703881
    DOI:10.1145/3622758
    Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected].

    Sponsors

    In-Cooperation

    Publisher

    Association for Computing Machinery

    New York, NY, United States

    Publication History

    Published: 19 October 2023

    Permissions

    Request permissions for this article.

    Check for updates

    Author Tags

    1. Programming Language Design
    2. Reasoning

    Qualifiers

    • Research-article

    Conference

    Onward! '23
    Sponsor:

    Acceptance Rates

    Overall Acceptance Rate 40 of 105 submissions, 38%

    Upcoming Conference

    Contributors

    Other Metrics

    Bibliometrics & Citations

    Bibliometrics

    Article Metrics

    • 0
      Total Citations
    • 138
      Total Downloads
    • Downloads (Last 12 months)62
    • Downloads (Last 6 weeks)4
    Reflects downloads up to 30 Jan 2025

    Other Metrics

    Citations

    Cited By

    View all

    View Options

    Login options

    View options

    PDF

    View or Download as a PDF file.

    PDF

    eReader

    View online with eReader.

    eReader

    Figures

    Tables

    Media

    Share

    Share

    Share this Publication link

    Share on social media