{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,9]],"date-time":"2026-01-09T03:12:31Z","timestamp":1767928351182,"version":"3.49.0"},"reference-count":122,"publisher":"Association for Computing Machinery (ACM)","issue":"6","license":[{"start":{"date-parts":[[2019,10,16]],"date-time":"2019-10-16T00:00:00Z","timestamp":1571184000000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Comput. Surv."],"published-print":{"date-parts":[[2020,11,30]]},"abstract":"<jats:p>Metaprogramming is the process of writing computer programs that treat programs as data, enabling them to analyze or transform existing programs or generate new ones. While the concept of metaprogramming has existed for several decades, activities focusing on metaprogramming have been increasing rapidly over the past few years, with most languages offering some metaprogramming support and the amount of metacode being developed growing exponentially. In this article, we introduce a taxonomy of metaprogramming languages and present a survey of metaprogramming languages and systems based on the taxonomy. Our classification is based on the metaprogramming model adopted by the language, the phase of the metaprogram evaluation, the metaprogram source location, and the relation between the metalanguage and the object language.<\/jats:p>","DOI":"10.1145\/3354584","type":"journal-article","created":{"date-parts":[[2019,10,16]],"date-time":"2019-10-16T18:55:35Z","timestamp":1571252135000},"page":"1-39","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":28,"title":["A Survey of Metaprogramming Languages"],"prefix":"10.1145","volume":"52","author":[{"ORCID":"https:\/\/orcid.org\/0000-0003-2170-9820","authenticated-orcid":false,"given":"Yannis","family":"Lilis","sequence":"first","affiliation":[{"name":"ICS-FORTH, Heraklion, Crete, Greece"}]},{"given":"Anthony","family":"Savidis","sequence":"additional","affiliation":[{"name":"University of Crete and ICS-FORTH, Heraklion, Crete, Greece"}]}],"member":"320","published-online":{"date-parts":[[2019,10,16]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"The D Programming Language","author":"Alexandrescu Andrei","unstructured":"Andrei Alexandrescu . 2010. The D Programming Language . Addison-Wesley Professional . Andrei Alexandrescu. 2010. The D Programming Language. Addison-Wesley Professional."},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/3158140"},{"key":"e_1_2_1_3_1","volume-title":"BCEL - Byte code engineering library. Retrieved","author":"Commons Apache","year":"2019","unstructured":"Apache Commons . 2006. BCEL - Byte code engineering library. Retrieved January 2019 from https:\/\/commons.apache.org\/proper\/commons-bcel\/. Apache Commons. 2006. BCEL - Byte code engineering library. Retrieved January 2019 from https:\/\/commons.apache.org\/proper\/commons-bcel\/."},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/1449913.1449931"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/2658761.2658775"},{"key":"e_1_2_1_6_1","volume-title":"Workshop on Scheme and Functional Programming (Scheme\u201911)","author":"Atkinson Kevin","year":"2011","unstructured":"Kevin Atkinson and Matthew Flatt . 2011 . Adapting scheme-like macros to a c-like language . In Workshop on Scheme and Functional Programming (Scheme\u201911) . Retrieved January 2019 from http:\/\/scheme2011.ucombinator.org\/papers\/Atkinson2011.pdf. Kevin Atkinson and Matthew Flatt. 2011. Adapting scheme-like macros to a c-like language. In Workshop on Scheme and Functional Programming (Scheme\u201911). Retrieved January 2019 from http:\/\/scheme2011.ucombinator.org\/papers\/Atkinson2011.pdf."},{"key":"e_1_2_1_7_1","volume-title":"D-expressions: Lisp power, Dylan style. Technical Report. Retrieved","author":"Bachrach Jonathan","year":"1999","unstructured":"Jonathan Bachrach and Keith Playford . 1999 . D-expressions: Lisp power, Dylan style. Technical Report. Retrieved January 2019 from https:\/\/people.csail.mit.edu\/jrb\/Projects\/dexprs.pdf. Jonathan Bachrach and Keith Playford. 1999. D-expressions: Lisp power, Dylan style. Technical Report. Retrieved January 2019 from https:\/\/people.csail.mit.edu\/jrb\/Projects\/dexprs.pdf."},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/504282.504285"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/508386.508396"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512562"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSR.1998.685739"},{"key":"e_1_2_1_12_1","volume-title":"Proceedings of the Workshop on Partial Evaluation and Semantics-Based Program Manipulation, 88--99","author":"Bawden Alan","year":"1999","unstructured":"Alan Bawden . 1999 . Quasiquotation in Lisp . In Proceedings of the Workshop on Partial Evaluation and Semantics-Based Program Manipulation, 88--99 . University of Aarhus. Invited talk. Retrieved January 2019 from https:\/\/3e8.org\/pub\/scheme\/doc\/Quasiquotation%20in%20Lisp%20(Bawden).pdf. Alan Bawden. 1999. Quasiquotation in Lisp. In Proceedings of the Workshop on Partial Evaluation and Semantics-Based Program Manipulation, 88--99. University of Aarhus. Invited talk. Retrieved January 2019 from https:\/\/3e8.org\/pub\/scheme\/doc\/Quasiquotation%20in%20Lisp%20(Bawden).pdf."},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/62678.62687"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/976270.976273"},{"key":"e_1_2_1_15_1","volume-title":"Proceedings of the 2002 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-Based Program Manipulation (PEPM\u201902)","author":"Brabrand Claus","unstructured":"Claus Brabrand and Michael I. Schwartzbach . 2002. Growing languages with metamorphic syntax macros . In Proceedings of the 2002 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-Based Program Manipulation (PEPM\u201902) . ACM, 31--40. DOI:http:\/\/doi.acm.org\/10.1145\/503032.503035 Claus Brabrand and Michael I. Schwartzbach. 2002. Growing languages with metamorphic syntax macros. In Proceedings of the 2002 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-Based Program Manipulation (PEPM\u201902). ACM, 31--40. DOI:http:\/\/doi.acm.org\/10.1145\/503032.503035"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/1028976.1029004"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2007.11.003"},{"key":"e_1_2_1_18_1","volume-title":"AspectR - Simple aspect-oriented programming in Ruby. Retrieved","author":"Bryant Avi","year":"2019","unstructured":"Avi Bryant and Robert Feldt . 2002. AspectR - Simple aspect-oriented programming in Ruby. Retrieved January 2019 from http:\/\/aspectr.sourceforge.net\/. Avi Bryant and Robert Feldt. 2002. AspectR - Simple aspect-oriented programming in Ruby. Retrieved January 2019 from http:\/\/aspectr.sourceforge.net\/."},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2489837.2489840"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.5555\/954186.954190"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/2989225.2989234"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/217838.217868"},{"key":"e_1_2_1_23_1","volume-title":"Proceedings of the OOPSLA\u201998 Workshop on Reflective Programming in C++ and Java. Retrieved","author":"Chiba Shigeru","year":"1998","unstructured":"Shigeru Chiba . 1998 . Javassist - A reflection-based programming wizard for java . In Proceedings of the OOPSLA\u201998 Workshop on Reflective Programming in C++ and Java. Retrieved January 2019 from http:\/\/citeseerx.ist.psu.edu\/viewdoc\/download;jsessionid&equals;2404E80FF2C51CC1892AD4539970A569?doi&equals;10.1.1.39.7059&rep&equals;&equals;rep1&type&equals;&equals;pdf. Shigeru Chiba. 1998. Javassist - A reflection-based programming wizard for java. In Proceedings of the OOPSLA\u201998 Workshop on Reflective Programming in C++ and Java. Retrieved January 2019 from http:\/\/citeseerx.ist.psu.edu\/viewdoc\/download;jsessionid&equals;2404E80FF2C51CC1892AD4539970A569?doi&equals;10.1.1.39.7059&rep&equals;&equals;rep1&type&equals;&equals;pdf."},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/99583.99607"},{"key":"e_1_2_1_25_1","volume-title":"Proceedings of the European Interactive Workshop on Aspects in Software. EIWAS. Retrieved","author":"Costanza Pascal","year":"2004","unstructured":"Pascal Costanza . 2004 . A short overview of AspectL . In Proceedings of the European Interactive Workshop on Aspects in Software. EIWAS. Retrieved January 2019 from http:\/\/www.p-cos.net\/documents\/aspectl-short-final.pdf. Pascal Costanza. 2004. A short overview of AspectL. In Proceedings of the European Interactive Workshop on Aspects in Software. EIWAS. Retrieved January 2019 from http:\/\/www.p-cos.net\/documents\/aspectl-short-final.pdf."},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/1863543.1863577"},{"key":"e_1_2_1_27_1","volume-title":"Eisenecker","author":"Czarnecki Krzysztof","year":"2000","unstructured":"Krzysztof Czarnecki and Ulrich W . Eisenecker . 2000 . Generative Programming : Methods, Tools, and Applications. ACM Press\/Addison-Wesley Publishing , New York. Krzysztof Czarnecki and Ulrich W. Eisenecker. 2000. Generative Programming: Methods, Tools, and Applications. ACM Press\/Addison-Wesley Publishing, New York."},{"key":"e_1_2_1_28_1","first-page":"124","article-title":"Taxonomy of the fundamental concepts of metaprogramming","volume":"37","author":"Dama\u0161evi\u010dius Robertas","year":"2008","unstructured":"Robertas Dama\u0161evi\u010dius and Vytautas \u0160tuikys . 2008 . Taxonomy of the fundamental concepts of metaprogramming . Information Technology and Control , 37 , 2 (2008), 124 -- 132 . Retrieved January 2019 from http:\/\/www.itc.ktu.lt\/index.php\/ITC\/article\/view\/11931\/6598. Robertas Dama\u0161evi\u010dius and Vytautas \u0160tuikys. 2008. Taxonomy of the fundamental concepts of metaprogramming. Information Technology and Control, 37, 2 (2008), 124--132. Retrieved January 2019 from http:\/\/www.itc.ktu.lt\/index.php\/ITC\/article\/view\/11931\/6598.","journal-title":"Information Technology and Control"},{"key":"e_1_2_1_29_1","volume-title":"Java Specification Request 269: Pluggable annotation processing API. Retrieved","author":"Darcy Joe","year":"2019","unstructured":"Joe Darcy . 2006. Java Specification Request 269: Pluggable annotation processing API. Retrieved January 2019 from http:\/\/jcp.org\/en\/jsr\/detail?id&equals;269. Joe Darcy. 2006. Java Specification Request 269: Pluggable annotation processing API. Retrieved January 2019 from http:\/\/jcp.org\/en\/jsr\/detail?id&equals;269."},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2462166"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/2661088.2661097"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1023\/A:1011549115358"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1007\/11561347_22"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.cl.2004.11.003"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2006.01.003"},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.1007\/BF01806308"},{"key":"e_1_2_1_37_1","volume-title":"The Scheme Programming Language","author":"Dybvig R. Kent","unstructured":"R. Kent Dybvig . 2009. The Scheme Programming Language ( 4 th ed.). MIT Press . R. Kent Dybvig. 2009. The Scheme Programming Language (4th ed.). MIT Press.","edition":"4"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1007\/11561347_19"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/2048066.2048099"},{"key":"e_1_2_1_40_1","volume-title":"Proceedings of the 5th International Conference on Generative Programming and Component Engineering (GPCE\u201906)","author":"F\u00e4hndrich Manuel","unstructured":"Manuel F\u00e4hndrich , Michael Carbin , and James R. Larus . 2006. Reflective program generation with patterns . In Proceedings of the 5th International Conference on Generative Programming and Component Engineering (GPCE\u201906) . 275--284. DOI:http:\/\/doi.acm.org\/10.1145\/1173706.1173748 Manuel F\u00e4hndrich, Michael Carbin, and James R. Larus. 2006. Reflective program generation with patterns. In Proceedings of the 5th International Conference on Generative Programming and Component Engineering (GPCE\u201906). 275--284. DOI:http:\/\/doi.acm.org\/10.1145\/1173706.1173748"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/581478.581486"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796812000093"},{"key":"e_1_2_1_43_1","volume-title":"Retrieved","author":"Fleutot Fabien","year":"2019","unstructured":"Fabien Fleutot . 2007. Metalua Manual . Retrieved January 2019 from http:\/\/metalua.luaforge.net\/metalua-manual.html. Fabien Fleutot. 2007. Metalua Manual. Retrieved January 2019 from http:\/\/metalua.luaforge.net\/metalua-manual.html."},{"key":"e_1_2_1_44_1","volume-title":"AOP on .NET -- PostSharp. Retrieved","author":"Fraiteur Gael","year":"2015","unstructured":"Gael Fraiteur . 2008. AOP on .NET -- PostSharp. Retrieved April 1, 2015 , from https:\/\/www.postsharp.net\/aop.net. Gael Fraiteur. 2008. AOP on .NET -- PostSharp. Retrieved April 1, 2015, from https:\/\/www.postsharp.net\/aop.net."},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/507635.507646"},{"key":"e_1_2_1_46_1","first-page":"261","article-title":"Fast binding-time analysis for multi-level specialization. In Proceedings of the 2nd International Andrei Ershov Memorial Conference on Perspectives of System Informatics","volume":"1181","author":"Gl\u00fcck Robert","year":"1996","unstructured":"Robert Gl\u00fcck and Jesper J\u00f8rgensen . 1996 . Fast binding-time analysis for multi-level specialization. In Proceedings of the 2nd International Andrei Ershov Memorial Conference on Perspectives of System Informatics . Springer LNCS 1181 , 261 -- 272 . DOI:http:\/\/dx.doi.org\/10.1007\/3-540-62064-8_22 10.1007\/3-540-62064-8_22 Robert Gl\u00fcck and Jesper J\u00f8rgensen. 1996. Fast binding-time analysis for multi-level specialization. In Proceedings of the 2nd International Andrei Ershov Memorial Conference on Perspectives of System Informatics. Springer LNCS 1181, 261--272. DOI:http:\/\/dx.doi.org\/10.1007\/3-540-62064-8_22","journal-title":"Springer LNCS"},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-48443-4_3"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0054103"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.5555\/3005729.3005736"},{"key":"e_1_2_1_51_1","first-page":"216","article-title":"AspectS - aspect-oriented programming with squeak. In Revised Papers from the International Conference NetObjectDays on Objects, Components, Architectures, Services, and Applications for a Networked World (NODe'02)","volume":"2591","author":"Hirschfeld Robert","year":"2002","unstructured":"Robert Hirschfeld . 2002 . AspectS - aspect-oriented programming with squeak. In Revised Papers from the International Conference NetObjectDays on Objects, Components, Architectures, Services, and Applications for a Networked World (NODe'02) . Springer LNCS 2591 , 216 -- 232 . DOI:http:\/\/dx.doi.org\/10.1007\/3-540-36557-5_17 10.1007\/3-540-36557-5_17 Robert Hirschfeld. 2002. AspectS - aspect-oriented programming with squeak. In Revised Papers from the International Conference NetObjectDays on Objects, Components, Architectures, Services, and Applications for a Networked World (NODe'02). Springer LNCS 2591, 216--232. DOI:http:\/\/dx.doi.org\/10.1007\/3-540-36557-5_17","journal-title":"Springer LNCS"},{"key":"e_1_2_1_52_1","volume-title":"Modular Programming Languages (JMLC\u201900)","author":"Hof Markus","year":"1897","unstructured":"Markus Hof . 2000. Composable message semantics in Oberon . In Modular Programming Languages (JMLC\u201900) . Springer LNCS 1897 , 11--25. DOI:https:\/\/doi.org\/10.1007\/10722581_2 10.1007\/10722581_2 Markus Hof. 2000. Composable message semantics in Oberon. In Modular Programming Languages (JMLC\u201900). Springer LNCS 1897, 11--25. DOI:https:\/\/doi.org\/10.1007\/10722581_2"},{"key":"e_1_2_1_53_1","volume-title":"Fan: Compile-time metaprogramming for OCaml. Retrieved","author":"Hongbo Zhang","year":"2013","unstructured":"Zhang Hongbo and Steve Zdancewic . 2013 . Fan: Compile-time metaprogramming for OCaml. Retrieved January 2019 from http:\/\/zhanghongbo.me\/fan\/_downloads\/metaprogramming_for_ocaml.pdf. Zhang Hongbo and Steve Zdancewic. 2013. Fan: Compile-time metaprogramming for OCaml. Retrieved January 2019 from http:\/\/zhanghongbo.me\/fan\/_downloads\/metaprogramming_for_ocaml.pdf."},{"key":"e_1_2_1_54_1","doi-asserted-by":"publisher","DOI":"10.1007\/11561347_21"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/1218563.1218584"},{"key":"e_1_2_1_56_1","doi-asserted-by":"publisher","DOI":"10.1145\/1890028.1890029"},{"key":"e_1_2_1_57_1","volume-title":"Aspect oriented programming with spring. Retrieved","author":"Johnson Rod","year":"2019","unstructured":"Rod Johnson . 2011. Aspect oriented programming with spring. Retrieved January 2019 from http:\/\/docs.spring.io\/spring\/docs\/current\/spring-framework-reference\/html\/aop.html. Rod Johnson. 2011. Aspect oriented programming with spring. Retrieved January 2019 from http:\/\/docs.spring.io\/spring\/docs\/current\/spring-framework-reference\/html\/aop.html."},{"key":"e_1_2_1_58_1","volume-title":"Proceedings of the 2008 AOSD Workshop on Software Engineering Properties of Languages and Aspect Technologies (SPLAT'08)","author":"Kaewkasi Chanwit","unstructured":"Chanwit Kaewkasi and John R. Gurd . 2008. Groovy AOP: A dynamic AOP system for a JVM-based language . In Proceedings of the 2008 AOSD Workshop on Software Engineering Properties of Languages and Aspect Technologies (SPLAT'08) . ACM, Article 3. DOI:http:\/\/doi.acm.org\/10.1145\/1408647.1408650 Chanwit Kaewkasi and John R. Gurd. 2008. Groovy AOP: A dynamic AOP system for a JVM-based language. In Proceedings of the 2008 AOSD Workshop on Software Engineering Properties of Languages and Aspect Technologies (SPLAT'08). ACM, Article 3. DOI:http:\/\/doi.acm.org\/10.1145\/1408647.1408650"},{"key":"e_1_2_1_59_1","volume-title":"Proceedings of the 2009 ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM'09)","author":"Kameyama Yukiyoshi","year":"2009","unstructured":"Yukiyoshi Kameyama , Oleg Kiselyov , and Chung-chieh Shan. 2009 . Shifting the stage: Staging with delimited control . In Proceedings of the 2009 ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM'09) , 111--120. DOI:http:\/\/doi.acm.org\/10.1145\/1480945.1480962 Yukiyoshi Kameyama, Oleg Kiselyov, and Chung-chieh Shan. 2009. Shifting the stage: Staging with delimited control. In Proceedings of the 2009 ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM'09), 111--120. DOI:http:\/\/doi.acm.org\/10.1145\/1480945.1480962"},{"key":"e_1_2_1_60_1","doi-asserted-by":"publisher","DOI":"10.1109\/CGO.2003.1191532"},{"key":"e_1_2_1_61_1","volume-title":"Ritchie","author":"Kernighan Brian W.","year":"1988","unstructured":"Brian W. Kernighan and Dennis M . Ritchie . 1988 . The C Programming Language (2nd ed.). Prentice-Hall , Englewood Cliffs, NJ. Brian W. Kernighan and Dennis M. Ritchie. 1988. The C Programming Language (2nd ed.). Prentice-Hall, Englewood Cliffs, NJ."},{"key":"e_1_2_1_62_1","volume-title":"Bobrow","author":"Kiczales Gregor","year":"1991","unstructured":"Gregor Kiczales , Jim Rivieres , and Daniel G . Bobrow . 1991 . The Art of the Metaobject Protocol. MIT Press . Gregor Kiczales, Jim Rivieres, and Daniel G. Bobrow. 1991. The Art of the Metaobject Protocol. MIT Press."},{"key":"e_1_2_1_63_1","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0053381"},{"key":"e_1_2_1_64_1","volume-title":"Griswold","author":"Kiczales Gregor","year":"2001","unstructured":"Gregor Kiczales , Erik Hilsdale , Jim Hugunin , Mik Kersten , Jeffrey Palm , and William G . Griswold . 2001 . An overview of AspectJ. In Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP'01). Springer LNCS 2072, 327--354. DOI:http:\/\/dx.doi.org\/10.1007\/3-540-45337-7_18 10.1007\/3-540-45337-7_18 Gregor Kiczales, Erik Hilsdale, Jim Hugunin, Mik Kersten, Jeffrey Palm, and William G. Griswold. 2001. An overview of AspectJ. In Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP'01). Springer LNCS 2072, 327--354. DOI:http:\/\/dx.doi.org\/10.1007\/3-540-45337-7_18"},{"key":"e_1_2_1_65_1","volume-title":"Reducing boilerplate code with project Lombok. Retrieved","author":"Kimberlin Michael","year":"2019","unstructured":"Michael Kimberlin . 2010. Reducing boilerplate code with project Lombok. Retrieved January 2019 from http:\/\/jnb.ociweb.com\/jnb\/jnbJan2010.html. Michael Kimberlin. 2010. Reducing boilerplate code with project Lombok. Retrieved January 2019 from http:\/\/jnb.ociweb.com\/jnb\/jnbJan2010.html."},{"key":"e_1_2_1_66_1","doi-asserted-by":"publisher","DOI":"10.1145\/319838.319859"},{"key":"e_1_2_1_67_1","doi-asserted-by":"publisher","DOI":"10.1145\/1297027.1297044"},{"key":"e_1_2_1_68_1","first-page":"589","article-title":"Marco: Safe, expressive macros for any language. In Proceedings of the 26th European Conference on Object-Oriented Programming (ECOOP'12)","volume":"7313","author":"Lee Byeongcheol","year":"2012","unstructured":"Byeongcheol Lee , Robert Grimm , Martin Hirzel , and Kathryn S. McKinley . 2012 . Marco: Safe, expressive macros for any language. In Proceedings of the 26th European Conference on Object-Oriented Programming (ECOOP'12) . Springer LNCS 7313 , 589 -- 613 . DOI:http:\/\/dx.doi.org\/10.1007\/978-3-642-31057-7_26 10.1007\/978-3-642-31057-7_26 Byeongcheol Lee, Robert Grimm, Martin Hirzel, and Kathryn S. McKinley. 2012. Marco: Safe, expressive macros for any language. In Proceedings of the 26th European Conference on Object-Oriented Programming (ECOOP'12). Springer LNCS 7313, 589--613. DOI:http:\/\/dx.doi.org\/10.1007\/978-3-642-31057-7_26","journal-title":"Springer LNCS"},{"key":"e_1_2_1_69_1","doi-asserted-by":"publisher","DOI":"10.5381\/jot.2014.13.1.a1"},{"key":"e_1_2_1_70_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.2241"},{"key":"e_1_2_1_72_1","doi-asserted-by":"publisher","DOI":"10.1145\/38765.38821"},{"key":"e_1_2_1_73_1","doi-asserted-by":"publisher","DOI":"10.1145\/2364527.2364572"},{"key":"e_1_2_1_74_1","doi-asserted-by":"publisher","DOI":"10.1145\/2737924.2737963"},{"key":"e_1_2_1_75_1","doi-asserted-by":"publisher","DOI":"10.1145\/2245276.2232057"},{"key":"e_1_2_1_76_1","doi-asserted-by":"publisher","DOI":"10.1145\/2543728.2543739"},{"key":"e_1_2_1_77_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2006.05.002"},{"key":"e_1_2_1_78_1","volume-title":"Proceedings of the International Workshop on Adaptive and Self-Managing Enterprise Applications (ASMEA\u201905)","author":"Nicoara Angela","year":"2005","unstructured":"Angela Nicoara and Gustavo Alonso . 2005 . Dynamic AOP with PROSE . In Proceedings of the International Workshop on Adaptive and Self-Managing Enterprise Applications (ASMEA\u201905) . Retrieved January 2019 from http:\/\/www.deutsche-telekom-laboratories.com\/\u223cangela\/papers\/AngelaNicoara-ASMEA2005.pdf. Angela Nicoara and Gustavo Alonso. 2005. Dynamic AOP with PROSE. In Proceedings of the International Workshop on Adaptive and Self-Managing Enterprise Applications (ASMEA\u201905). Retrieved January 2019 from http:\/\/www.deutsche-telekom-laboratories.com\/\u223cangela\/papers\/AngelaNicoara-ASMEA2005.pdf."},{"key":"e_1_2_1_79_1","volume-title":"Proceedings of ECOOP 2000 Workshop on Reflection and Metalevel Architectures: State of the Art, and Future Trends. ACM Press.","author":"Nizhegorodov Dmitry","year":"2000","unstructured":"Dmitry Nizhegorodov . 2000 . Jasper: Type-Safe MOP-based language extensions and reflective template processing in java . In Proceedings of ECOOP 2000 Workshop on Reflection and Metalevel Architectures: State of the Art, and Future Trends. ACM Press. Dmitry Nizhegorodov. 2000. Jasper: Type-Safe MOP-based language extensions and reflective template processing in java. In Proceedings of ECOOP 2000 Workshop on Reflection and Metalevel Architectures: State of the Art, and Future Trends. ACM Press."},{"key":"e_1_2_1_80_1","volume-title":"Proceedings of the 3rd JSSST Workshop on Programming and Programming Languages (PPL\u201901)","author":"Oiwa Yutaka","year":"2001","unstructured":"Yutaka Oiwa , Hidehiko Masuhara , and Akinori Yonezawa . 2001 . DynJava: Type safe dynamic code generation in java . In Proceedings of the 3rd JSSST Workshop on Programming and Programming Languages (PPL\u201901) . Retrieved January 2019 from http:\/\/loome.cs.illinois.edu\/CS498F10\/readings\/dynjava.pdf. Yutaka Oiwa, Hidehiko Masuhara, and Akinori Yonezawa. 2001. DynJava: Type safe dynamic code generation in java. In Proceedings of the 3rd JSSST Workshop on Programming and Programming Languages (PPL\u201901). Retrieved January 2019 from http:\/\/loome.cs.illinois.edu\/CS498F10\/readings\/dynjava.pdf."},{"key":"e_1_2_1_81_1","volume-title":"Proceedings of the 5th Conference on USENIX Conference on Object-Oriented Technologies 8 Systems --","volume":"5","author":"Oliva Alexandre","year":"1999","unstructured":"Alexandre Oliva and Luiz Eduardo Buzato . 1999 . The design and implementation of Guaran\u00e1 . In Proceedings of the 5th Conference on USENIX Conference on Object-Oriented Technologies 8 Systems -- Vol. 5 (COOTS'99). USENIX Association, Berkeley, CA, 1--15. Retrieved January 2019 from https:\/\/www.usenix.org\/legacy\/events\/coots99\/full_papers\/oliva\/oliva.pdf. Alexandre Oliva and Luiz Eduardo Buzato. 1999. The design and implementation of Guaran\u00e1. In Proceedings of the 5th Conference on USENIX Conference on Object-Oriented Technologies 8 Systems -- Vol. 5 (COOTS'99). USENIX Association, Berkeley, CA, 1--15. Retrieved January 2019 from https:\/\/www.usenix.org\/legacy\/events\/coots99\/full_papers\/oliva\/oliva.pdf."},{"key":"e_1_2_1_82_1","volume-title":"Proceedings of the 2011 ACM International Conference on Object-Oriented Programming Systems Languages and Applications (OOPSLA'11)","author":"Palmer Zachary","year":"2048","unstructured":"Zachary Palmer and Scott F. Smith . 2011. Backstage Java: Making a difference in metaprogramming . In Proceedings of the 2011 ACM International Conference on Object-Oriented Programming Systems Languages and Applications (OOPSLA'11) . ACM, New York, 939--958. DOI:https:\/\/doi.org\/10.1145\/ 2048 066.2048137 10.1145\/2048066.2048137 Zachary Palmer and Scott F. Smith. 2011. Backstage Java: Making a difference in metaprogramming. In Proceedings of the 2011 ACM International Conference on Object-Oriented Programming Systems Languages and Applications (OOPSLA'11). ACM, New York, 939--958. DOI:https:\/\/doi.org\/10.1145\/2048066.2048137"},{"key":"e_1_2_1_83_1","volume-title":"Koch","author":"Parreaux Lionel","year":"2017","unstructured":"Lionel Parreaux , Antoine Voizard , Amir Shaikhha , and Christoph E . Koch . 2017 . Unifying analytic and statically-typed quasiquotes. Proceedings of ACM Programming Languages 2, POPL, Article 13, 33 pages. DOI:https:\/\/doi.org\/10.1145\/3158101 10.1145\/3158101 Lionel Parreaux, Antoine Voizard, Amir Shaikhha, and Christoph E. Koch. 2017. Unifying analytic and statically-typed quasiquotes. Proceedings of ACM Programming Languages 2, POPL, Article 13, 33 pages. DOI:https:\/\/doi.org\/10.1145\/3158101"},{"key":"e_1_2_1_85_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45429-2_1"},{"key":"e_1_2_1_86_1","doi-asserted-by":"publisher","DOI":"10.1145\/316686.316697"},{"key":"e_1_2_1_87_1","doi-asserted-by":"publisher","DOI":"10.1145\/2371401.2371420"},{"key":"e_1_2_1_88_1","volume-title":"Retrieved","author":"de Rauglaudre Daniel","year":"2019","unstructured":"Daniel de Rauglaudre . 2003. Camlp4 -- Tutorial. Retrieved January 2019 from http:\/\/caml.inria.fr\/pub\/docs\/tutorial-camlp4\/index.html. Daniel de Rauglaudre. 2003. Camlp4 -- Tutorial. Retrieved January 2019 from http:\/\/caml.inria.fr\/pub\/docs\/tutorial-camlp4\/index.html."},{"key":"e_1_2_1_89_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-47993-7_9"},{"key":"e_1_2_1_90_1","doi-asserted-by":"publisher","DOI":"10.5555\/2394758.2394784"},{"key":"e_1_2_1_91_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-28869-2_28"},{"key":"e_1_2_1_92_1","doi-asserted-by":"publisher","DOI":"10.1145\/1640134.1640141"},{"key":"e_1_2_1_93_1","doi-asserted-by":"publisher","DOI":"10.1145\/1868294.1868314"},{"key":"e_1_2_1_94_1","doi-asserted-by":"publisher","DOI":"10.1145\/1706356.1706361"},{"key":"e_1_2_1_95_1","volume-title":"Proceedings of IEEE Regional Conference 2005","author":"Vladimir","year":"2019","unstructured":"Vladimir O. Safonov and Dmitry A. Grigoriev. 2005. Aspect.NET -- An aspect-oriented programming tool for Microsoft.NET . In Proceedings of IEEE Regional Conference 2005 . Retrieved January 2019 from https:\/\/sites.google.com\/site\/aspectdotnet\/5.pdf. Vladimir O. Safonov and Dmitry A. Grigoriev. 2005. Aspect.NET -- An aspect-oriented programming tool for Microsoft.NET. In Proceedings of IEEE Regional Conference 2005. Retrieved January 2019 from https:\/\/sites.google.com\/site\/aspectdotnet\/5.pdf."},{"key":"e_1_2_1_96_1","doi-asserted-by":"publisher","DOI":"10.1145\/1869459.1869498"},{"key":"e_1_2_1_97_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2014.05.003"},{"key":"e_1_2_1_98_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-44806-3_2"},{"key":"e_1_2_1_99_1","doi-asserted-by":"publisher","DOI":"10.1145\/636517.636528"},{"key":"e_1_2_1_100_1","volume-title":"Metaprogramming in Nemerle. Retrieved","author":"Skalski Kamil","year":"2019","unstructured":"Kamil Skalski , Michal Moskal , and Pawel Olszta . 2004. Metaprogramming in Nemerle. Retrieved January 2019 from http:\/\/pdfs.semanticscholar.org\/c3b2\/e92909de69b162c064a211a2c56947542373.pdf. Kamil Skalski, Michal Moskal, and Pawel Olszta. 2004. Metaprogramming in Nemerle. Retrieved January 2019 from http:\/\/pdfs.semanticscholar.org\/c3b2\/e92909de69b162c064a211a2c56947542373.pdf."},{"key":"e_1_2_1_101_1","series-title":"Lecture Notes in Computer Science, 10223","volume-title":"Grand Timely Topics in Software Engineering (GTTSE\u201915)","author":"Smaragdakis Yannis","unstructured":"Yannis Smaragdakis , Aggelos Biboudis , and George Fourtounis . 2017. Structured program generation techniques . In Grand Timely Topics in Software Engineering (GTTSE\u201915) . Lecture Notes in Computer Science, 10223 . Springer . DOI:https:\/\/doi.org\/10.1007\/978-3-319-60074-1_7 10.1007\/978-3-319-60074-1_7 Yannis Smaragdakis, Aggelos Biboudis, and George Fourtounis. 2017. Structured program generation techniques. In Grand Timely Topics in Software Engineering (GTTSE\u201915). Lecture Notes in Computer Science, 10223. Springer. DOI:https:\/\/doi.org\/10.1007\/978-3-319-60074-1_7"},{"key":"e_1_2_1_102_1","volume-title":"Proceedings of the 40th International Conference on Tools Pacific: Objects for Internet, Mobile and Embedded Applications (CRPIT'02)","author":"Spinczyk Olaf","year":"2002","unstructured":"Olaf Spinczyk , Andreas Gal , and Wolfgang Schr\u00f6der-Preikschat . 2002 . AspectC++: An aspect-oriented extension to the C++ programming language . In Proceedings of the 40th International Conference on Tools Pacific: Objects for Internet, Mobile and Embedded Applications (CRPIT'02) , 53--60. Olaf Spinczyk, Andreas Gal, and Wolfgang Schr\u00f6der-Preikschat. 2002. AspectC++: An aspect-oriented extension to the C++ programming language. In Proceedings of the 40th International Conference on Tools Pacific: Objects for Internet, Mobile and Embedded Applications (CRPIT'02), 53--60."},{"key":"e_1_2_1_103_1","volume-title":"Programming groovy 2: Dynamic productivity for the Java developer. Pragmatic Bookshelf","author":"Subramaniam Venkat","unstructured":"Venkat Subramaniam . 2013. Programming groovy 2: Dynamic productivity for the Java developer. Pragmatic Bookshelf ( 1 st edition). Venkat Subramaniam. 2013. Programming groovy 2: Dynamic productivity for the Java developer. Pragmatic Bookshelf (1st edition).","edition":"1"},{"key":"e_1_2_1_104_1","doi-asserted-by":"publisher","DOI":"10.5555\/1098646"},{"key":"e_1_2_1_105_1","doi-asserted-by":"publisher","DOI":"10.1145\/3278122.3278139"},{"key":"e_1_2_1_106_1","doi-asserted-by":"publisher","DOI":"10.1145\/258993.259019"},{"key":"e_1_2_1_107_1","doi-asserted-by":"publisher","DOI":"10.1145\/604131.604134"},{"key":"e_1_2_1_108_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949309"},{"key":"e_1_2_1_109_1","volume-title":"Reflection and Open Implementations. Technical report","author":"Tanter \u00c9ric","unstructured":"\u00c9ric Tanter . 2004. Reflection and Open Implementations. Technical report , University of Chile . \u00c9ric Tanter. 2004. Reflection and Open Implementations. Technical report, University of Chile."},{"key":"e_1_2_1_110_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2007.10.005"},{"key":"e_1_2_1_111_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45046-7_7"},{"key":"e_1_2_1_112_1","volume-title":"Jos\u00e9 de Oliveira Guimar\u00e3es, and Antonio Francisco do Prado","author":"Tomioka Elisa","year":"1998","unstructured":"Elisa Tomioka , Jos\u00e9 de Oliveira Guimar\u00e3es, and Antonio Francisco do Prado . 1998 . R-Java, A Reflective Java Extension. Retrieved January 2019 from http:\/\/www.cyan-lang.org\/jose\/green\/rjava\/rjava-sbc.pdf. Elisa Tomioka, Jos\u00e9 de Oliveira Guimar\u00e3es, and Antonio Francisco do Prado. 1998. R-Java, A Reflective Java Extension. Retrieved January 2019 from http:\/\/www.cyan-lang.org\/jose\/green\/rjava\/rjava-sbc.pdf."},{"key":"e_1_2_1_113_1","doi-asserted-by":"publisher","DOI":"10.1145\/1391956.1391958"},{"key":"e_1_2_1_115_1","volume-title":"Technical Report","author":"Veldhuizen Todd","year":"2019","unstructured":"Todd Veldhuizen . 2003. C++ templates are Turing complete. Technical Report , Indiana University . Retrieved January 2019 from http:\/\/port70.net\/\u223cnsz\/c\/c%2B%2B\/turing.pdf. Todd Veldhuizen. 2003. C++ templates are Turing complete. Technical Report, Indiana University. Retrieved January 2019 from http:\/\/port70.net\/\u223cnsz\/c\/c%2B%2B\/turing.pdf."},{"key":"e_1_2_1_116_1","doi-asserted-by":"publisher","DOI":"10.1145\/1173706.1173709"},{"key":"e_1_2_1_117_1","doi-asserted-by":"publisher","DOI":"10.1145\/2635648.2635653"},{"key":"e_1_2_1_118_1","doi-asserted-by":"publisher","DOI":"10.1145\/155090.155105"},{"key":"e_1_2_1_119_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-48443-4_2"},{"key":"e_1_2_1_120_1","doi-asserted-by":"publisher","DOI":"10.1145\/1806596.1806642"},{"key":"e_1_2_1_121_1","volume-title":"OCaml Users and Developers Workshop.","author":"White Leo","year":"2013","unstructured":"Leo White . 2013 . Extension points for ocaml . OCaml Users and Developers Workshop. Leo White. 2013. Extension points for ocaml. OCaml Users and Developers Workshop."},{"key":"e_1_2_1_122_1","volume-title":"Reflective Java: Making Java even more flexible, 456--458. Retrieved","author":"Wu Zhixue","year":"1997","unstructured":"Zhixue Wu and Scarlet Schwiderski . 1997 . Reflective Java: Making Java even more flexible, 456--458. Retrieved January 2019 from https:\/\/pdfs.semanticscholar.org\/b7df\/83217f05f1d2d8be3ec7ecaeda72781dc7e2.pdf. Zhixue Wu and Scarlet Schwiderski. 1997. Reflective Java: Making Java even more flexible, 456--458. Retrieved January 2019 from https:\/\/pdfs.semanticscholar.org\/b7df\/83217f05f1d2d8be3ec7ecaeda72781dc7e2.pdf."},{"key":"e_1_2_1_123_1","volume-title":"Modular macros. Retrieved","author":"Yallop Jeremy","year":"2019","unstructured":"Jeremy Yallop and Leo White . 2015. Modular macros. Retrieved January 2019 from https:\/\/www.cl.cam.ac.uk\/\u223cjdy22\/papers\/modular-macros.pdf. Jeremy Yallop and Leo White. 2015. Modular macros. Retrieved January 2019 from https:\/\/www.cl.cam.ac.uk\/\u223cjdy22\/papers\/modular-macros.pdf."},{"key":"e_1_2_1_124_1","doi-asserted-by":"publisher","DOI":"10.1145\/2814204.2814213"},{"key":"e_1_2_1_125_1","doi-asserted-by":"publisher","DOI":"10.1007\/11561347_8"},{"key":"e_1_2_1_126_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-30175-2_1"}],"container-title":["ACM Computing Surveys"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3354584","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3354584","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T23:44:56Z","timestamp":1750203896000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3354584"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,10,16]]},"references-count":122,"journal-issue":{"issue":"6","published-print":{"date-parts":[[2020,11,30]]}},"alternative-id":["10.1145\/3354584"],"URL":"https:\/\/doi.org\/10.1145\/3354584","relation":{},"ISSN":["0360-0300","1557-7341"],"issn-type":[{"value":"0360-0300","type":"print"},{"value":"1557-7341","type":"electronic"}],"subject":[],"published":{"date-parts":[[2019,10,16]]},"assertion":[{"value":"2017-11-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2019-07-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2019-10-16","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}