{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,6,2]],"date-time":"2026-06-02T05:36:14Z","timestamp":1780378574235,"version":"3.54.1"},"reference-count":14,"publisher":"Association for Computing Machinery (ACM)","issue":"9","license":[{"start":{"date-parts":[[2004,12,1]],"date-time":"2004-12-01T00:00:00Z","timestamp":1101859200000},"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":["Queue"],"published-print":{"date-parts":[[2004,12]]},"abstract":"<jats:p>In his keynote address at OOPSLA \u201998, Sun Microsystems Fellow Guy L. Steele Jr. said, \u201cFrom now on, a main goal in designing a language should be to plan for growth.\u201d Functions, user-defined types, operator overloading, and generics (such as C++ templates) are no longer enough: tomorrow\u2019s languages must allow programmers to add entirely new kinds of information to programs, and control how it is processed. This article argues that next-generation programming systems can accomplish this by combining three specific technologies.<\/jats:p>","DOI":"10.1145\/1039511.1039534","type":"journal-article","created":{"date-parts":[[2005,1,26]],"date-time":"2005-01-26T16:33:14Z","timestamp":1106757194000},"page":"48-57","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":15,"title":["Extensible Programming for the 21st Century"],"prefix":"10.1145","volume":"2","author":[{"given":"Gregory V.","family":"Wilson","sequence":"first","affiliation":[{"name":"University of Toronto"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2004,12]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"Ladd S. R. 2003. An evolutionary analysis of GNU C optimizations; see http:\/\/www.coyotegulch.com\/.]]  Ladd S. R. 2003. An evolutionary analysis of GNU C optimizations; see http:\/\/www.coyotegulch.com\/.]]"},{"key":"e_1_2_1_2_1","unstructured":"SUIF\n  : see http:\/\/suif.stanford.edu\/.]]  SUIF: see http:\/\/suif.stanford.edu\/.]]"},{"key":"e_1_2_1_3_1","doi-asserted-by":"crossref","unstructured":"Bachrach J. and K. Playford. 2001. The Java Syntactic Extender; see http:\/\/www.ai.mit.edu\/~jrb\/jse\/jse.pdf.]]  Bachrach J. and K. Playford. 2001. The Java Syntactic Extender; see http:\/\/www.ai.mit.edu\/~jrb\/jse\/jse.pdf.]]","DOI":"10.1145\/504282.504285"},{"key":"e_1_2_1_4_1","unstructured":"XDoclet: see http:\/\/xdoclet.sourceforge.net\/.]]  XDoclet: see http:\/\/xdoclet.sourceforge.net\/.]]"},{"key":"e_1_2_1_5_1","volume-title":"Code Generation in Action","author":"Herrington J.","unstructured":"Herrington , J. 2003. Code Generation in Action . Greenwich, CT : Manning .]] Herrington, J. 2003. Code Generation in Action. Greenwich, CT: Manning.]]"},{"key":"e_1_2_1_6_1","volume-title":"Code Generation in Microsoft .NET","author":"Dollard K.","unstructured":"Dollard , K. 2004. Code Generation in Microsoft .NET . Berkeley, CA : Apress .]] Dollard, K. 2004. Code Generation in Microsoft .NET. Berkeley, CA: Apress.]]"},{"key":"e_1_2_1_7_1","unstructured":"Czarnecki K. Eisenecker U. Gluck R.\n      Vandevoorde D. and \n      Veldhuizen T. L\n  . \n  1998\n  . Generative programming and active libraries. In Proceedings of Generic Programming '98 Lecture Notes in Computer Science 1766 Springer-Verlag Telos\n  .]]   Czarnecki K. Eisenecker U. Gluck R. Vandevoorde D. and Veldhuizen T. L. 1998. Generative programming and active libraries. In Proceedings of Generic Programming '98 Lecture Notes in Computer Science 1766 Springer-Verlag Telos.]]"},{"key":"e_1_2_1_8_1","volume-title":"JSP Examples and Best Practices","author":"Patzer A.","unstructured":"Patzer , A. 2002. JSP Examples and Best Practices . Berkeley, CA : Apress .]] Patzer, A. 2002. JSP Examples and Best Practices. Berkeley, CA: Apress.]]"},{"key":"e_1_2_1_9_1","unstructured":"See  reference 6 (Dollard) for a discussion of the pros and cons of using Microsoft .NET's CodeDom for code generation.]]  See reference 6 (Dollard) for a discussion of the pros and cons of using Microsoft .NET's CodeDom for code generation.]]"},{"key":"e_1_2_1_10_1","volume-title":"Literate Programming","author":"Knuth D. E.","unstructured":"Knuth , D. E. 1992. Literate Programming . Cambridge University Press .]] Knuth, D. E. 1992. Literate Programming. Cambridge University Press.]]"},{"key":"e_1_2_1_11_1","unstructured":"See  CONS (http:\/\/www.dsmit.com\/cons\/) and SCons (http:\/\/www.scons.org\/) for examples of code-oriented build tools. Interestingly the creator of Ant James Duncan Davidson has written: \"If I knew then what I know now I would have tried using a real scripting language such as JavaScript via the Rhino component or Python via JPython with bindings to Java objects which implemented the functionality expressed in today's tasks. Then there would be a first-class way to express logic and we wouldn't be stuck with XML as a format that is too bulky for the way that people really want to use the tool.\" http:\/\/x180.net\/Articles\/Java\/AntAndXML.html.]]  See CONS (http:\/\/www.dsmit.com\/cons\/) and SCons (http:\/\/www.scons.org\/) for examples of code-oriented build tools. Interestingly the creator of Ant James Duncan Davidson has written: \"If I knew then what I know now I would have tried using a real scripting language such as JavaScript via the Rhino component or Python via JPython with bindings to Java objects which implemented the functionality expressed in today's tasks. Then there would be a first-class way to express logic and we wouldn't be stuck with XML as a format that is too bulky for the way that people really want to use the tool.\" http:\/\/x180.net\/Articles\/Java\/AntAndXML.html.]]"},{"key":"e_1_2_1_12_1","volume-title":"see http:\/\/mozart-dev.sourceforge.net\/","author":"Mozart","unstructured":"Mozart : see http:\/\/mozart-dev.sourceforge.net\/ ; SuperX ++: see http:\/\/xplusplus.sourceforge.net\/; o:XML: see http:\/\/www.o-xml.org.]] Mozart: see http:\/\/mozart-dev.sourceforge.net\/; SuperX++: see http:\/\/xplusplus.sourceforge.net\/; o:XML: see http:\/\/www.o-xml.org.]]"},{"key":"e_1_2_1_13_1","unstructured":"ECMA-357: ECMAScript for XML: see http:\/\/www.ecma-international.org\/publications\/standards\/Ecma-357.htm.]]  ECMA-357: ECMAScript for XML: see http:\/\/www.ecma-international.org\/publications\/standards\/Ecma-357.htm.]]"},{"key":"e_1_2_1_14_1","volume-title":"Programming with circles, triangles, and rectangles","author":"Meijer E.","year":"2003","unstructured":"Meijer , E. Schulte, W. , and G. Bierman . Programming with circles, triangles, and rectangles ; see http:\/\/www.research.microsoft.com\/~emeijer\/Papers\/XML 2003 \/xml2003.html.]] Meijer, E. Schulte, W., and G. Bierman. Programming with circles, triangles, and rectangles; see http:\/\/www.research.microsoft.com\/~emeijer\/Papers\/XML2003\/xml2003.html.]]"}],"container-title":["Queue"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1039511.1039534","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/1039511.1039534","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T16:31:44Z","timestamp":1750264304000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1039511.1039534"}},"subtitle":["Is an open, more flexible programming environment just around the corner?"],"short-title":[],"issued":{"date-parts":[[2004,12]]},"references-count":14,"journal-issue":{"issue":"9","published-print":{"date-parts":[[2004,12]]}},"alternative-id":["10.1145\/1039511.1039534"],"URL":"https:\/\/doi.org\/10.1145\/1039511.1039534","relation":{},"ISSN":["1542-7730","1542-7749"],"issn-type":[{"value":"1542-7730","type":"print"},{"value":"1542-7749","type":"electronic"}],"subject":[],"published":{"date-parts":[[2004,12]]},"assertion":[{"value":"2004-12-01","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}