ABSTRACT
We present JAttack, a framework that enables template-based testing for compilers. Using JAttack, a developer writes a template program that describes a set of programs to be generated and given as test inputs to a compiler. Such a framework enables developers to incorporate their domain knowledge on testing compilers, giving a basic program structure that allows for exploring complex programs that can trigger sophisticated compiler optimizations. A developer writes a template program in the host language (Java) that contains holes to be filled by JAttack. Each hole, written using a domain-specific language, constructs a node within an extended abstract syntax tree (eAST). An eAST node defines the search space for the hole, i.e., a set of expressions and values. JAttack generates programs by executing templates and filling each hole by randomly choosing expressions and values (available within the search space defined by the hole). Additionally, we introduce several optimizations to reduce JAttack’s generation cost. While JAttack could be used to test various compiler features, we demonstrate its capabilities in helping test just-in-time (JIT) Java compilers, whose optimizations occur at runtime after a sufficient number of executions. Using JAttack, we have found six critical bugs that were confirmed by Oracle developers. Four of them were previously unknown, including two unknown CVEs (Common Vulnerabilities and Exposures). JAttack shows the power of combining developers’ domain knowledge (via templates) with random testing to detect bugs in JIT compilers.
- Alfred Aho, Monica Lam, Ravi Sethi, and Jeffrey Ullman. 2007. Compilers: Principles, Techniques, and Tools. Addison-Wesley.Google ScholarDigital Library
- Mohammad Amin Alipour, Alex Groce, Rahul Gopinath, and Arpit Christi. 2016. Generating Focused Random Tests Using Directed Swarm Testing. In International Symposium on Software Testing and Analysis. ACM, 70–81.Google Scholar
- Oracle Corporation and/or its affiliates. 2021. The Java HotSpot Performance Engine Architecture. https://www.oracle.com/java/technologies/whitepaper.html.Google Scholar
- Oracle Corporation and/or its affiliates. 2021. [JDK-8251535] Partial peeling at unsigned test adds incorrect loop exit check - Java Bug System. https://bugs.openjdk.java.net/browse/JDK-8251535.Google Scholar
- Oracle Corporation and/or its affiliates. 2021. Regression Test Harness for the JDK: jtreg. https://openjdk.java.net/jtreg.Google Scholar
- James H. Andrews, Lionel C. Briand, Yvan Labiche, and Akbar Siami Namin. 2006. Using Mutation Analysis for Assessing and Comparing Testing Coverage Criteria. IEEE Transactions on Software Engineering 32, 8 (2006), 608–624.Google ScholarDigital Library
- John Aycock. 2003. A Brief History of Just-in-Time. Comput. Surveys 35, 2 (2003), 97–113.Google ScholarDigital Library
- Auréle Barriére, Sandrine Blazy, and David Pichardie. 2020. Towards Formally Verified Just-in-Time compilation. In International Workshop on Coq for Programming Languages.Google Scholar
- Jonathan Bell and Gail Kaiser. 2014. Unit Test Virtualization with VMVM. In International Conference on Software Engineering. ACM, 550–561.Google Scholar
- Jonathan Bell and Luís Pina. 2018. CROCHET: Checkpoint and Rollback via Lightweight Heap Traversal on Stock JVMs. In Proceedings of the 2018 European Conference on Object-Oriented Programming. Dagstuhl, 17:1–17:31.Google Scholar
- William Blair, Andrea Mambretti, Sajjad Arshad, Michael Weissbacher, William Robertson, Engin Kirda, and Manuel Egele. 2020. HotFuzz: Discovering Algorithmic Denial-of-Service Vulnerabilities Through Guided Micro-Fuzzing. In The Symposium on Network and Distributed System Security. The Internet Society.Google Scholar
- Tegan Brennan, Nicolás Rosner, and Tevfik Bultan. 2020. JIT Leaks: Inducing Timing Side Channels through Just-In-Time Compilation. In Symposium on Security and Privacy. IEEE, 1207–1222.Google ScholarCross Ref
- Tegan Brennan, Seemanta Saha, and Tevfik Bultan. 2020. JVM Fuzzing for JIT-Induced Side-Channel Detection. In International Conference on Software Engineering. ACM, 1011–1023.Google Scholar
- Fraser Brown, John Renner, Andres Nötzli, Sorin Lerner, Hovav Shacham, and Deian Stefan. 2020. Towards a Verified Range Analysis for JavaScript JITs. In Programming Language Design and Implementation. ACM, 135–150.Google Scholar
- Nicolas Bruno and Surajit Chaudhuri. 2005. Flexible Database Generators. In International Conference on Very Large Data Bases. VLDB Endowment, 1097–1107.Google Scholar
- Stefan Brunthaler. 2010. Efficient Interpretation Using Quickening. In Symposium on Dynamic Languages. ACM, 1–14.Google Scholar
- Stefanos Chaliasos, Thodoris Sotiropoulos, Diomidis Spinellis, Arthur Gervais, Benjamin Livshits, and Dimitris Mitropoulos. 2022. Finding Typing Compiler Bugs. In Programming Language Design and Implementation. ACM, 183–198.Google Scholar
- Junjie Chen, Wenxiang Hu, Dan Hao, Yingfei Xiong, Hongyu Zhang, Lu Zhang, and Bing Xie. 2016. An Empirical Comparison of Compiler Testing Techniques. In International Conference on Software Engineering. ACM, 180–190.Google Scholar
- Junjie Chen, Jibesh Patra, Michael Pradel, Yingfei Xiong, Hongyu Zhang, Dan Hao, and Lu Zhang. 2020. A Survey of Compiler Testing. Comput. Surveys 53, 1 (2020), 4:1–4:36.Google Scholar
- Junjie Chen, Guancheng Wang, Dan Hao, Yingfei Xiong, Hongyu Zhang, and Lu Zhang. 2019. History-Guided Configuration Diversification for Compiler Test-Program Generation. In International Conference on Software Engineering. IEEE, 305–316.Google Scholar
- TY Chen, SC Cheung, and SM Yiu. 1998. Metamorphic testing: a new approach for generating next test cases.Technical Report.Google Scholar
- Yuting Chen, Ting Su, and Zhendong Su. 2019. Deep Differential Testing of JVM Implementations. In International Conference on Software Engineering. IEEE, 1257–1268.Google Scholar
- Yuting Chen, Ting Su, Chengnian Sun, Zhendong Su, and Jianjun Zhao. 2016. Coverage-Directed Differential Testing of JVM Implementations. In Programming Language Design and Implementation. ACM, 85–99.Google Scholar
- Wai-Mee Ching and Alex Katz. 1993. The Testing of an APL Compiler. In International Conference on APL. ACM, 55–62.Google ScholarDigital Library
- Shafiul Azam Chowdhury, Sohil Lal Shrestha, Taylor T. Johnson, and Christoph Csallner. 2020. SLEMI: Equivalence modulo input (EMI) based mutation of CPS models for finding compiler bugs in Simulink. In International Conference on Software Engineering. ACM, 335–346.Google ScholarDigital Library
- Koen Claessen and John Hughes. 2000. QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs. In International Conference on Functional Programming. ACM, 268–279.Google ScholarDigital Library
- Intel Corporation. 2016. android-art-intel/Fuzzer: Java* Fuzzer for Android*. https://github.com/android-art-intel/Fuzzer.Google Scholar
- Brett Daniel, Danny Dig, Kely Garcia, and Darko Marinov. 2007. Automated Testing of Refactoring Engines. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 185–194.Google Scholar
- Leonardo De Moura and Nikolaj Bjørner. 2008. Z3: An Efficient SMT Solver. In International Conference on Tools and Algorithms for the Construction and Analysis of Systems. Springer, 337–340.Google ScholarCross Ref
- R.A. DeMillo, R.J. Lipton, and F.G. Sayward. 1978. Hints on Test Data Selection: Help for the Practicing Programmer. Computer 11, 4 (1978), 34–41.Google ScholarDigital Library
- Alastair F. Donaldson, Paul Thomson, Vasyl Teliman, Stefano Milizia, André Perez Maselco, and Antoni Karpiński. 2021. Test-Case Reduction and Deduplication Almost for Free with Transformation-Based Compiler Testing. In Programming Language Design and Implementation. ACM, 1017–1032.Google Scholar
- John K. Feser, Swarat Chaudhuri, and Isil Dillig. 2015. Synthesizing Data Structure Transformations from Input-Output Examples. In Programming Language Design and Implementation. ACM, 229–239.Google Scholar
- Gordon Fraser and Andrea Arcuri. 2011. EvoSuite: automatic test suite generation for object-oriented software. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering (Szeged, Hungary). ACM, 416–419.Google ScholarDigital Library
- Joel Galenson, Philip Reames, Rastislav Bodik, Björn Hartmann, and Koushik Sen. 2014. CodeHint: Dynamic and Interactive Synthesis of Code Snippets. In International Conference on Software Engineering. ACM, 653–663.Google Scholar
- Milos Gligoric, Tihomir Gvero, Vilas Jagannath, Sarfraz Khurshid, Viktor Kuncak, and Darko Marinov. 2010. Test Generation through Programming in UDITA. In International Conference on Software Engineering. ACM, 225–234.Google ScholarDigital Library
- Liang Gong, Michael Pradel, and Koushik Sen. 2015. JITProf: Pinpointing JIT-Unfriendly JavaScript Code. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 357–368.Google Scholar
- Alex Groce, Chaoqiang Zhang, Eric Eide, Yang Chen, and John Regehr. 2012. Swarm Testing. In International Symposium on Software Testing and Analysis. ACM, 78–88.Google Scholar
- Shu-yu Guo and Jens Palsberg. 2011. The Essence of Compiling with Traces. In Symposium on Principles of Programming Languages. ACM, 563–574.Google Scholar
- Tihomir Gvero, Viktor Kuncak, and Ruzica Piskac. 2011. Interactive Synthesis of Code Snippets. In Computer Aided Verification. Springer, 418–423.Google Scholar
- Andrew Haley. 2015. How to change compilation policy to trigger C2 compilation ASAP?https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2015-May/018010.html.Google Scholar
- Chris Hawblitzel, Shuvendu K. Lahiri, Kshama Pawar, Hammad Hashmi, Sedar Gokbulut, Lakshan Fernando, Dave Detlefs, and Scott Wadsworth. 2013. Will You Still Compile Me Tomorrow? Static Cross-Version Compiler Validation. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 191–201.Google Scholar
- Christian Holler, Kim Herzig, and Andreas Zeller. 2012. Fuzzing with Code Fragments. In USENIX Security Symposium. USENIX, 38.Google Scholar
- Paul Holser. 2020. junit-quickcheck – junit-quickcheck: Property-based testing, JUnit-style. https://pholser.github.io/junit-quickcheck/index.html.Google Scholar
- Jinru Hua and Sarfraz Khurshid. 2017. EdSketch: Execution-Driven Sketching for Java. In International SPIN Symposium on Model Checking of Software. ACM, 162–171.Google Scholar
- Christian Humer, Christian Wimmer, Christian Wirth, Andreas Wöß, and Thomas Würthinger. 2014. A Domain-Specific Language for Building Self-Optimizing AST Interpreters. In International Conference on Generative Programming: Concepts and Experiences. ACM, 123–132.Google ScholarDigital Library
- Sungjae Hwang, Sungho Lee, Jihoon Kim, and Sukyoung Ryu. 2021. JUSTGen: Effective Test Generation for Unspecified JNI Behaviors on JVMs. In International Conference on Software Engineering. IEEE, 1708–1718.Google Scholar
- Azul Systems, Inc.2018. AzulSystems/JavaFuzzer: Java* Fuzzer for Android*. https://github.com/AzulSystems/JavaFuzzer.Google Scholar
- Free Software Foundation, Inc.2021. Testsuites (GNU Compiler Collection (GCC) Internals). https://gcc.gnu.org/onlinedocs/gccint/Testsuites.html.Google Scholar
- Red Hat, Inc.2018. shipilev/JavaFuzzer: Java* Fuzzer for JVM. https://github.com/shipilev/JavaFuzzer.Google Scholar
- Radu Iosif. 2002. Symmetry Reduction Criteria for Software Model Checking. In International SPIN Symposium on Model Checking of Software. Springer, 22–41.Google Scholar
- Karthick Jayaraman, David Harvison, Vijay Ganesh, and Adam Kiezun. 2009. jFuzz: A Concolic Whitebox Fuzzer for Java. In NASA Formal Methods Symposium.Google Scholar
- Jinseong Jeon, Xiaokang Qiu, Jeffrey S. Foster, and Armando Solar-Lezama. 2015. JSketch: Sketching for Java. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 934–937.Google Scholar
- Susmit Jha, Sumit Gulwani, Sanjit A. Seshia, and Ashish Tiwari. 2010. Oracle-Guided Component-Based Program Synthesis. In International Conference on Software Engineering. ACM, 215–224.Google Scholar
- Yue Jia and Mark Harman. 2008. Constructing Subtle Faults Using Higher Order Mutation Testing. In IEEE International Working Conference on Source Code Analysis and Manipulation. IEEE, 249–258.Google Scholar
- Yue Jia and Mark Harman. 2011. An Analysis and Survey of the Development of Mutation Testing. IEEE Transactions on Software Engineering 37, 5 (2011), 649–678.Google ScholarDigital Library
- Neil D. Jones, Carsten K. Gomard, and Peter Sestoft. 1993. Partial Evaluation and Automatic Program Generation. Prentice Hall.Google ScholarDigital Library
- René Just, Darioush Jalali, Laura Inozemtseva, Michael D. Ernst, Reid Holmes, and Gordon Fraser. 2014. Are Mutants a Valid Substitute for Real Faults in Software Testing?. In International Symposium on the Foundations of Software Engineering. 654–665.Google ScholarDigital Library
- Rody Kersten, Kasper Luckow, and Corina S. Păsăreanu. 2017. POSTER: AFL-based Fuzzing for Java with Kelinci. In Conference on Computer and Communications Security. ACM, 2511–2513.Google Scholar
- Vu Le, Mehrdad Afshari, and Zhendong Su. 2014. Compiler Validation via Equivalence modulo Inputs. In Programming Language Design and Implementation. ACM, 216–226.Google Scholar
- Vu Le, Chengnian Sun, and Zhendong Su. 2015. Finding Deep Compiler Bugs via Guided Stochastic Program Mutation. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications. ACM, 386–399.Google ScholarDigital Library
- Vu Le, Chengnian Sun, and Zhendong Su. 2015. Randomized Stress-Testing of Link-Time Optimizers. In International Symposium on Software Testing and Analysis. ACM, 327–337.Google Scholar
- Gwangmu Lee, Woochul Shim, and Byoungyoung Lee. 2021. Constraint-guided Directed Greybox Fuzzing. In USENIX Security Symposium. USENIX, 3559–3576.Google Scholar
- Christopher Lidbury, Andrei Lascu, Nathan Chong, and Alastair F. Donaldson. 2015. Many-Core Compiler Fuzzing. In Programming Language Design and Implementation. ACM, 65–76.Google Scholar
- Vsevolod Livinskii, Dmitry Babokin, and John Regehr. 2020. Random Testing for C and C++ Compilers with YARPGen. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications. ACM, 196:1–196:25.Google Scholar
- Valentin J. M. Manès, HyungSeok Han, Choongwoo Han, Sang Kil Cha, Manuel Egele, Edward J. Schwartz, and Maverick Woo. 2021. The Art, Science, and Engineering of Fuzzing: A Survey. IEEE Transactions on Software Engineering 47, 11 (2021), 2312–2331.Google ScholarCross Ref
- William M McKeeman. 1998. Differential testing for software. Digital Technical Journal 10, 1 (1998), 100–107.Google Scholar
- Robin Morisset, Pankaj Pawan, and Francesco Zappa Nardelli. 2013. Compiler Testing via a Theory of Sound Optimisations in the C11/C++11 Memory Model. In Programming Language Design and Implementation. ACM, 187–196.Google Scholar
- Magnus O. Myreen. 2010. Verified Just-in-Time Compiler on X86. In Symposium on Principles of Programming Languages. ACM, 107–118.Google ScholarDigital Library
- Kazuhiro Nakamura and Nagisa Ishiura. 2016. Random testing of C compilers based on test program generation by equivalence transformation. In Asia Pacific Conference on Circuits and Systems. IEEE, 676–679.Google ScholarCross Ref
- Jakob Botsch Nielsen. 2018. Fuzzing the.NET JIT Compiler. https://mattwarren.org/2018/08/28/Fuzzing-the-.NET-JIT-Compiler/.Google Scholar
- Jakob Botsch Nielsen. 2020. jakobbotsch/Fuzzlyn: Fuzzer for the.NET toolchains, developed as a project for the 2018 Language-Based Security course at Aarhus University. https://github.com/jakobbotsch/Fuzzlyn.Google Scholar
- Carlos Pacheco, Shuvendu K. Lahiri, Michael D. Ernst, and Thomas Ball. 2007. Feedback-Directed Random Test Generation. In International Conference on Software Engineering. IEEE, 75–84.Google Scholar
- Rohan Padhye, Caroline Lemieux, and Koushik Sen. 2019. JQF: Coverage-Guided Property-Based Testing in Java. In International Symposium on Software Testing and Analysis. ACM, 398–401.Google Scholar
- Rohan Padhye, Caroline Lemieux, Koushik Sen, Mike Papadakis, and Yves Le Traon. 2019. Semantic Fuzzing with Zest. In International Symposium on Software Testing and Analysis. ACM, 329–340.Google Scholar
- Rohan Padhye, Caroline Lemieux, Koushik Sen, Laurent Simon, and Hayawardh Vijayakumar. 2019. FuzzFactory: Domain-Specific Fuzzing with Waypoints. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications. ACM, 174:1–174:29.Google Scholar
- Soyeon Park, Wen Xu, Insu Yun, Daehee Jang, and Taesoo Kim. 2020. Fuzzing JavaScript Engines with Aspect-preserving Mutation. In Symposium on Security and Privacy. IEEE, 1629–1642.Google Scholar
- Hui Peng, Yan Shoshitaishvili, and Mathias Payer. 2018. T-Fuzz: Fuzzing by Program Transformation. In Symposium on Security and Privacy. IEEE, 697–710.Google ScholarCross Ref
- Guillermo Polito, Stéphane Ducasse, and Pablo Tesone. 2022. Interpreter-guided Differential JIT Compiler Unit Testing. In Programming Language Design and Implementation. ACM, 981–992.Google Scholar
- LLVM Project. 2021. LLVM Testing Infrastructure Guide. https://llvm.org/docs/TestingGuide.html.Google Scholar
- John Regehr, Yang Chen, Pascal Cuoq, Eric Eide, Chucky Ellison, and Xuejun Yang. 2012. Test-Case Reduction for C Compiler Bugs. In Programming Language Design and Implementation. ACM, 335–346.Google Scholar
- Richard Schumi and Jun Sun. 2021. SpecTest: Specification-Based Compiler Testing. In Fundamental Approaches to Software Engineering. Springer, 269–291.Google Scholar
- Boris Shingarov. 2019. Formal Verification of JIT by Symbolic Execution. In International Workshop on Virtual Machines and Intermediate Languages.Google Scholar
- Rishabh Singh and Armando Solar-Lezama. 2011. Synthesizing Data Structure Manipulations from Storyboards. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 289–299.Google ScholarDigital Library
- Emin Gün Sirer and Brian N. Bershad. 2000. Using Production Grammars in Software Testing. In Conference on Domain-Specific Languages. ACM, 1–13.Google Scholar
- Armando Solar-Lezama. 2013. Program Sketching. International Journal on Software Tools for Technology Transfer 15, 5–6(2013), 475–495.Google ScholarDigital Library
- Armando Solar-Lezama, Liviu Tancau, Rastislav Bodik, Sanjit Seshia, and Vijay Saraswat. 2006. Combinatorial Sketching for Finite Programs. In International Conference on Architectural Support for Programming Languages and Operating Systems. ACM, 404–415.Google Scholar
- Chengnian Sun, Vu Le, and Zhendong Su. 2016. Finding Compiler Bugs via Live Code Mutation. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications. ACM, 849–863.Google ScholarDigital Library
- Yixuan Tang, Zhilei Ren, Weiqiang Kong, and He Jiang. 2020. Compiler testing: a systematic literature analysis. Frontiers of Computer Science 14, 1 (2020), 1:20.Google Scholar
- Nikolai Tillmann and Wolfram Schulte. 2005. Parameterized Unit Tests. In Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering. ACM, 253–262.Google Scholar
- Jacob Van Geffen, Luke Nelson, Isil Dillig, Xi Wang, and Emina Torlak. 2020. Synthesizing JIT Compilers for In-Kernel DSLs. In Computer Aided Verification. Springer, 564–586.Google Scholar
- Vasudev Vikram, Rohan Padhye, and Koushik Sen. 2021. Growing A Test Corpus with Bonsai Fuzzing. In International Conference on Software Engineering. ACM, 723–735.Google Scholar
- Tielei Wang, Tao Wei, Guofei Gu, and Wei Zou. 2010. TaintScope: A Checksum-Aware Directed Fuzzing Tool for Automatic Software Vulnerability Detection. In Symposium on Security and Privacy. IEEE, 497–512.Google Scholar
- Xi Wang, David Lazar, Nickolai Zeldovich, Adam Chlipala, and Zachary Tatlock. 2014. Jitk: A Trustworthy In-Kernel Interpreter Infrastructure. In Symposium on Operating Systems Design and Implementation. USENIX, 33–47.Google Scholar
- Xuejun Yang, Yang Chen, Eric Eide, and John Regehr. 2011. Finding and Understanding Bugs in C Compilers. In Programming Language Design and Implementation. ACM, 283–294.Google Scholar
- Xuejun Yang, Yang Chen, Eric Eide, and John Regehr. 2021. GCC Bug List Found by Random Testing (Total 79). https://embed.cs.utah.edu/csmith/gcc-bugs.html.Google Scholar
- Xuejun Yang, Yang Chen, Eric Eide, and John Regehr. 2021. LLVM Bug List Found by Random Testing (Total 203). https://embed.cs.utah.edu/csmith/llvm-bugs.html.Google Scholar
- Guixin Ye, Zhanyong Tang, Shin Hwei Tan, Songfang Huang, Dingyi Fang, Xiaoyang Sun, Lizhong Bian, Haibo Wang, and Zheng Wang. 2021. Automated Conformance Testing for JavaScript Engines via Deep Compiler Fuzzing. In Programming Language Design and Implementation. ACM, 435–450.Google Scholar
- Takahide Yoshikawa, Kouya Shimura, and Toshihiro Ozawa. 2003. Random Program Generator for Java JIT Compiler Test System. In International Conference on Quality Software. IEEE, 20–23.Google Scholar
- Wei You, Xueqiang Wang, Shiqing Ma, Jianjun Huang, Xiangyu Zhang, XiaoFeng Wang, and Bin Liang. 2019. ProFuzzer: On-the-fly Input Type Probing for Better Zero-Day Vulnerability Discovery. In Symposium on Security and Privacy. IEEE, 769–786.Google Scholar
- Qirun Zhang, Chengnian Sun, and Zhendong Su. 2017. Skeletal Program Enumeration for Rigorous Compiler Testing. In Programming Language Design and Implementation. ACM, 347–361.Google Scholar
- Yingquan Zhao, Zan Wang, Junjie Chen, Mengdi Liu, Mingyuan Wu, Yuqun Zhang, and Lingming Zhang. 2022. History-Driven Test Program Synthesis for JVM Testing. In International Conference on Software Engineering. ACM, 1133–1144.Google Scholar
Index Terms
- Compiler Testing using Template Java Programs
Recommendations
JAttack: Java JIT Testing Using Template Programs
ICSE '23: Proceedings of the 45th International Conference on Software Engineering: Companion ProceedingsWe present JAttack, a framework that enables compiler testing using templates. JAttack allows compiler developers to write a template program that describes a set of concrete programs to be used to test compilers. Such a template-based approach ...
Template meta-programming for Haskell
We propose a new extension to the purely functional programming language Haskell that supports compile-time meta-programming. The purpose of the system is to support the algorithmic construction of programs at compile-time.The ability to generate code ...
Template meta-programming for Haskell
Haskell '02: Proceedings of the 2002 ACM SIGPLAN workshop on HaskellWe propose a new extension to the purely functional programming language Haskell that supports compile-time meta-programming. The purpose of the system is to support the algorithmic construction of programs at compile-time.The ability to generate code ...
Comments