{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,11]],"date-time":"2026-04-11T02:14:56Z","timestamp":1775873696541,"version":"3.50.1"},"publisher-location":"Berlin, Heidelberg","reference-count":58,"publisher":"Springer Berlin Heidelberg","isbn-type":[{"value":"9783540221197","type":"print"},{"value":"9783540259350","type":"electronic"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2004]]},"DOI":"10.1007\/978-3-540-25935-0_4","type":"book-chapter","created":{"date-parts":[[2010,7,22]],"date-time":"2010-07-22T19:46:50Z","timestamp":1279828010000},"page":"51-72","source":"Crossref","is-referenced-by-count":42,"title":["DSL Implementation in MetaOCaml, Template Haskell, and C++"],"prefix":"10.1007","author":[{"given":"Krzysztof","family":"Czarnecki","sequence":"first","affiliation":[]},{"given":"John T.","family":"O\u2019Donnell","sequence":"additional","affiliation":[]},{"given":"J\u00f6rg","family":"Striegnitz","sequence":"additional","affiliation":[]},{"given":"Walid","family":"Taha","sequence":"additional","affiliation":[]}],"member":"297","reference":[{"issue":"1","key":"4_CR1","doi-asserted-by":"publisher","first-page":"174","DOI":"10.1145\/291251.289440","volume":"34","author":"P. Bjesse","year":"1999","unstructured":"Bjesse, P., Claessen, K., Sheeran, M., Singh, S.: Lava: Hardware design in Haskell. ACM SIGPLAN Notices\u00a034(1), 174\u2013184 (1999)","journal-title":"ACM SIGPLAN Notices"},{"key":"4_CR2","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"57","DOI":"10.1007\/978-3-540-39815-8_4","volume-title":"Generative Programming and Component Engineering","author":"C. Calcagno","year":"2003","unstructured":"Calcagno, C., Taha, W., Huang, L., Leroy, X.: Implementing multi-stage languages using asts, gensym, and reflection. In: Pfenning, F., Smaragdakis, Y. (eds.) GPCE 2003. LNCS, vol.\u00a02830, pp. 57\u201376. Springer, Heidelberg (2003)"},{"key":"4_CR3","volume-title":"Parallel Programming in OpenMP++","author":"R. Chandra","year":"2000","unstructured":"Chandra, R., Dagum, L., Kohr, D.: Parallel Programming in OpenMP++. Morgan Kaufmann, San Francisco (2000)"},{"key":"4_CR4","volume-title":"Proceedings of Symposium on Practical Aspects of Declarative Languages","author":"A. Courtney","year":"2001","unstructured":"Courtney, A.: Frapp\u00e9: Functional reactive programming in Java. In: Proceedings of Symposium on Practical Aspects of Declarative Languages. ACM, New York (2001)"},{"key":"4_CR5","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"18","DOI":"10.1007\/3-540-48743-3_2","volume-title":"ECOOP \u201999 - Object-Oriented Programming","author":"K. Czarnecki","year":"1999","unstructured":"Czarnecki, K., Eisenecker, U.W.: Synthesizing objects. In: Guerraoui, R. (ed.) ECOOP 1999. LNCS, vol.\u00a01628, pp. 18\u201342. Springer, Heidelberg (1999)"},{"key":"4_CR6","volume-title":"Generative Programming: Methods, Tools, and Applications","author":"K. Czarnecki","year":"2000","unstructured":"Czarnecki, K., Eisenecker, U.W.: Generative Programming: Methods, Tools, and Applications. Addison-Wesley, Reading (2000)"},{"key":"4_CR7","unstructured":"Czarnecki, K., Eisenecker, U.W.: Named parameters for configuration generators (2000), http:\/\/www.generative-programming.org\/namedparams\/"},{"key":"4_CR8","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"25","DOI":"10.1007\/3-540-39953-4_3","volume-title":"Generic Programming","author":"K. Czarnecki","year":"2000","unstructured":"Czarnecki, K., Eisenecker, U.W., Gl\u00fcck, R., Vandevoorde, D., Veldhuizen, T.: Generative programming and active libraries (extended abstract). In: Jazayeri, M., Musser, D.R., Loos, R.G.K. (eds.) Dagstuhl Seminar 1998. LNCS, vol.\u00a01766, pp. 25\u201339. Springer, Heidelberg (2000)"},{"issue":"1","key":"4_CR9","first-page":"1","volume":"13","author":"S.P. Jones","year":"2003","unstructured":"Jones, S.P. (ed.): Haskell 98 language and libraries. Journal of Functional Programming\u00a013(1), 1\u2013255 (2003)","journal-title":"Journal of Functional Programming"},{"key":"4_CR10","doi-asserted-by":"crossref","unstructured":"Elliott, C., Finne, S., de Moore, O.: Compiling embedded languages. In: [48], pp. 9\u201327 (2000)","DOI":"10.1007\/3-540-45350-4_5"},{"key":"4_CR11","doi-asserted-by":"crossref","unstructured":"Elliott, C., Hudak, P.: Functional reactive animation. In: International Conference on Functional Programming, June 1997, pp. 163\u2013173 (1997)","DOI":"10.1145\/258948.258973"},{"key":"4_CR12","doi-asserted-by":"crossref","unstructured":"Finne, S., Peyton Jones, S.L.: Pictures: A simple structured graphics model. In: Proceedings of Glasgow Functional Programming Workshop (July 1995)","DOI":"10.14236\/ewic\/FP1995.6"},{"issue":"5","key":"4_CR13","first-page":"45","volume":"2","author":"Y. Futamura","year":"1971","unstructured":"Futamura, Y.: Partial evaluation of computation: An approach to a compiler-compiler. Systems, Computers, Controls\u00a02(5), 45\u201350 (1971)","journal-title":"Systems, Computers, Controls"},{"key":"4_CR14","volume-title":"The International Conference on Functional Programming (ICFP 2001)","author":"S. Ganz","year":"2001","unstructured":"Ganz, S., Sabry, A., Taha, W.: Macros as multi-stage computations: Type-safe, generative, binding macros in MacroML. In: The International Conference on Functional Programming (ICFP 2001), Florence, Italy, September 2001. ACM, New York (2001)"},{"key":"4_CR15","unstructured":"Gurtovoy, A.: Boost MPL Library (Template metaprogramming framework), http:\/\/www.boost.org\/libs\/mpl\/doc\/"},{"key":"4_CR16","doi-asserted-by":"crossref","unstructured":"Hammond, K., Loogen, R., Berhold, J.: Automatic Skeletons in Template Haskell. In: Proceedings of 2003 Workshop on High Level Parallel Programming, Paris, France (June 2003)","DOI":"10.1142\/S0129626403001380"},{"key":"4_CR17","unstructured":"Haney, S., Crotinger, J., Karmesin, S., Smith, S.: Pete: The portable expression template engine. Dr. Dobbs Journal (October 1999)"},{"issue":"3","key":"4_CR18","doi-asserted-by":"publisher","first-page":"465","DOI":"10.1017\/S0956796800001805","volume":"6","author":"P. Hudak","year":"1996","unstructured":"Hudak, P., Makucevich, T., Gadde, S., Whong, B.: Haskore music notation \u2013 an algebra of music. Journal of Functional Programming\u00a06(3), 465\u2013483 (1996)","journal-title":"Journal of Functional Programming"},{"key":"4_CR19","doi-asserted-by":"crossref","unstructured":"Hudak, P.: Building domain specific embedded languages. ACM Computing Surveys\u00a028A(electronic) (December 1996)","DOI":"10.1145\/242224.242477"},{"key":"4_CR20","doi-asserted-by":"crossref","DOI":"10.1017\/CBO9780511818073","volume-title":"The Haskell School of Expression \u2013 Learning Functional Programming through Multimedia","author":"P. Hudak","year":"2000","unstructured":"Hudak, P.: The Haskell School of Expression \u2013 Learning Functional Programming through Multimedia. Cambridge University Press, New York (2000)"},{"key":"4_CR21","doi-asserted-by":"crossref","first-page":"11","DOI":"10.1007\/3-540-56625-2_3","volume-title":"Mathematics of Program Construction; Second International Conference; Proceedings","author":"J. Hughes","year":"1993","unstructured":"Hughes, J.: Pretty-printing: an exercise in functional programming. In: Bird, R.S., Morgan, C.C., Woodcock, J.C.P. (eds.) Mathematics of Program Construction; Second International Conference; Proceedings, Berlin, Germany, pp. 11\u201313. Springer, Heidelberg (1993)"},{"key":"4_CR22","unstructured":"Hutton, G.: Combinator parsing. Journal of Functional Programming (1993)"},{"key":"4_CR23","unstructured":"ISO\/IEC. Programming languages \u2013 C++. ISO\/IEC 14882 Standard (October 2003)"},{"key":"4_CR24","unstructured":"J\u00e4rvi, J., Powell, G.: The lambda library: Lambda abstraction in C++. In: Second Workshop on C++ Template Programming, Tampa Bay, Florida, USA (October 2001)"},{"key":"4_CR25","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"crossref","first-page":"216","DOI":"10.1007\/3-540-61580-6_11","volume-title":"Partial Evaluation","author":"N.D. Jones","year":"1996","unstructured":"Jones, N.D.: What not to do when writing an interpreter for specialisation. In: Danvy, O., Thiemann, P., Gl\u00fcck, R. (eds.) Dagstuhl Seminar 1996. LNCS, vol.\u00a01110, pp. 216\u2013237. Springer, Heidelberg (1996)"},{"key":"4_CR26","volume-title":"Partial Evaluation and Automatic Program Generation","author":"N.D. Jones","year":"1993","unstructured":"Jones, N.D., Gomard, C.K., Sestoft, P.: Partial Evaluation and Automatic Program Generation. Prentice-Hall, Englewood Cliffs (1993)"},{"key":"4_CR27","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"91","DOI":"10.1007\/BFb0054088","volume-title":"ECOOP \u201998 - Object-Oriented Programming","author":"S. Krishnamurthi","year":"1998","unstructured":"Krishnamurthi, S., Felleisen, M., Friedman, D.P.: Synthesizing object-oriented and functional design to promote re-use. In: Jul, E. (ed.) ECOOP 1998. LNCS, vol.\u00a01445, pp. 91\u2013113. Springer, Heidelberg (1998)"},{"key":"4_CR28","unstructured":"Lynagh, I.: Template Haskell: A report from the field (May 2003), http:\/\/web.comlab.ox.ac.uk\/oucl\/work\/ian.lynagh\/papers\/"},{"key":"4_CR29","unstructured":"Lynagh, I.: Unrolling and simplifying expressions with Template Haskell (May 2003), http:\/\/web.comlab.ox.ac.uk\/oucl\/work\/ian.lynagh\/papers\/"},{"key":"4_CR30","unstructured":"Maddock, J., Cleary, S., et al.: Boost type traits library, http:\/\/www.boost.org\/libs\/typetraits\/"},{"key":"4_CR31","first-page":"90","volume-title":"Proceedings of the 1998 International Conference on Computer Languages","author":"J. Matthews","year":"1998","unstructured":"Matthews, J., Cook, B., Launchbury, J.: Microprocessor specification in Hawk. In: Proceedings of the 1998 International Conference on Computer Languages, pp. 90\u2013101. IEEE Computer Society Press, Los Alamitos (1998)"},{"key":"4_CR32","doi-asserted-by":"crossref","unstructured":"Mauny, M.: Parsers and printers as stream destructors embedded in functional languages. In: Proceedings of the Conference on Functional Programming Languages and Computer Architecture, pp. 360\u2013370. ACM\/IFIP (1989)","DOI":"10.1145\/99370.99405"},{"key":"4_CR33","unstructured":"MetaOCaml: A compiled, type-safe multi-stage programming language (2003), Available online from: http:\/\/www.metaocaml.org\/"},{"key":"4_CR34","doi-asserted-by":"crossref","unstructured":"Moggi, E.: Notions of computation and monads. Information and Computation\u00a093(1) (1991)","DOI":"10.1016\/0890-5401(91)90052-4"},{"key":"4_CR35","unstructured":"Myers, N.C.: Traits: a new and useful template technique. C++ Report 7(5) (June 1995)"},{"key":"4_CR36","doi-asserted-by":"publisher","first-page":"234","DOI":"10.1109\/IPDPS.2002.1016653","volume-title":"Proceedings 16th International Parallel & Distributed Processing Symposium","author":"J. O\u2019Donnell","year":"2002","unstructured":"O\u2019Donnell, J.: Overview of Hydra: A concurrent language for synchronous digital circuit design. In: Proceedings 16th International Parallel & Distributed Processing Symposium, April 2002, p. 234. IEEE Computer Society, Los Alamitos (2002); Workshop on Parallel and Distribued Scientific and Engineering Computing with Applications \u2013 PDSECA (abstract)"},{"issue":"2","key":"4_CR37","doi-asserted-by":"publisher","first-page":"195","DOI":"10.1017\/S0956796898003001","volume":"8","author":"C. Okasaki","year":"1998","unstructured":"Okasaki, C.: Even higher-order functions for parsing or why would anyone ever want to use a sixth-order function? Journal of Functional Programming\u00a08(2), 195\u2013199 (1998)","journal-title":"Journal of Functional Programming"},{"key":"4_CR38","unstructured":"Oregon Graduate Institute Technical Reports. P.O. Box 91000, Portland, OR 97291-1000,USA. Available online from: ftp:\/\/cse.ogi.edu\/pub\/tech-reports\/README.html"},{"key":"4_CR39","volume-title":"The International Conference on Functional Programming (ICFP 2002)","author":"E. Pa\u0161ali\u0107","year":"2002","unstructured":"Pa\u0161ali\u0107, E., Taha, W., Sheard, T.: Tagless staged interpreters for typed languages. In: The International Conference on Functional Programming (ICFP 2002), Pittsburgh, USA, October 2002. ACM, New York (2002)"},{"key":"4_CR40","doi-asserted-by":"crossref","unstructured":"Peterson, J., Hager, G., Hudak, P.: A language for declarative robotic programming. In: Proceedings of IEEE Conf. on Robotics and Automation (1999)","DOI":"10.1109\/ROBOT.1999.772516"},{"key":"4_CR41","doi-asserted-by":"publisher","first-page":"71","DOI":"10.1145\/158511.158524","volume-title":"The Symposium on Principles of Programming Languages (POPL 1993)","author":"S.P. Jones","year":"1993","unstructured":"Jones, S.P., Wadler, P.: Imperative functional programming. In: The Symposium on Principles of Programming Languages (POPL 1993), January 1993, pp. 71\u201384. ACM, New York (1993)"},{"key":"4_CR42","unstructured":"Rice Students. Multi-stage programming course projects (2000), http:\/\/www.cs.rice.edu\/~taha\/teaching\/"},{"key":"4_CR43","doi-asserted-by":"crossref","unstructured":"Sheard, T., El-Abidine Benaissa, Z., Pa\u0161ali\u0107, E.: DSL implementation using staging and monads. In: Second Conference on Domain-Specific Languages (DSL 1999), Austin, Texas, USENIX (1999)","DOI":"10.1145\/331960.331975"},{"key":"4_CR44","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1145\/581690.581691","volume-title":"ACM SIGPLAN Haskell Workshop 2002","author":"T. Sheard","year":"2002","unstructured":"Sheard, T., Jones, S.P.: Template metaprogramming for Haskell. In: Chakravarty, M.M.T. (ed.) ACM SIGPLAN Haskell Workshop 2002, October 2002, pp. 1\u201316. ACM Press, New York (2002)"},{"key":"4_CR45","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"550","DOI":"10.1007\/BFb0054107","volume-title":"ECOOP \u201998 - Object-Oriented Programming","author":"Y. Smaragdakis","year":"1998","unstructured":"Smaragdakis, Y., Batory, D.: Implementing layered designs with mixin layers. In: Jul, E. (ed.) ECOOP 1998. LNCS, vol.\u00a01445, pp. 550\u2013570. Springer, Heidelberg (1998)"},{"key":"4_CR46","unstructured":"Striegnitz, J., Smith, S.: An expression template aware lambda function. In: First Workshop on C++ Template Programming, Erfurt, Germany (October 2000)"},{"key":"4_CR47","unstructured":"Taha, W.: Multi-Stage Programming: Its Theory and Applications. PhD thesis, Oregon Graduate Institute of Science and Technology (1999); Available from [38]"},{"key":"4_CR48","series-title":"Lecture Notes in Computer Science","volume-title":"Semantics, Applications, and Implementation of Program Generation","year":"2000","unstructured":"Taha, W. (ed.): SAIG 2000. LNCS, vol.\u00a01924. Springer, Heidelberg (2000)"},{"key":"4_CR49","volume-title":"Proceedings of the Workshop on Partial Evaluation and Semantics-Based Program Maniplation (PEPM)","author":"W. Taha","year":"2000","unstructured":"Taha, W.: A sound reduction semantics for untyped CBN multi-stage computation. Or, the theory of MetaML is non-trivial. In: Proceedings of the Workshop on Partial Evaluation and Semantics-Based Program Maniplation (PEPM), Boston. ACM Press, New York (2000)"},{"key":"4_CR50","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"97","DOI":"10.1007\/978-3-540-39815-8_6","volume-title":"Generative Programming and Component Engineering","author":"W. Taha","year":"2003","unstructured":"Taha, W., Johann, P.: Staged notational definitions. In: Pfenning, F., Smaragdakis, Y. (eds.) GPCE 2003. LNCS, vol.\u00a02830, pp. 97\u2013116. Springer, Heidelberg (2003)"},{"key":"4_CR51","doi-asserted-by":"publisher","first-page":"203","DOI":"10.1145\/258993.259019","volume-title":"Proceedings of the Symposium on Partial Evaluation and Semantic-Based Program Manipulation (PEPM)","author":"W. Taha","year":"1997","unstructured":"Taha, W., Sheard, T.: Multi-stage programming with explicit annotations. In: Proceedings of the Symposium on Partial Evaluation and Semantic-Based Program Manipulation (PEPM), Amsterdam, pp. 203\u2013217. ACM Press, New York (1997)"},{"key":"4_CR52","doi-asserted-by":"crossref","unstructured":"Taha, W., Sheard, T.: MetaML: Multi-stage programming with explicit annotations. Theoretical Computer Science\u00a0248(1-2) (2000)","DOI":"10.1016\/S0304-3975(00)00053-0"},{"key":"4_CR53","doi-asserted-by":"crossref","unstructured":"Thiemann, P.: Programmable Type Systems for Domain Specific Languages. In: Comini, M., Falaschi, M. (eds.). Electronic Notes in Theoretical Computer Science, vol.\u00a076. Elsevier, Amsterdam (2002)","DOI":"10.1016\/S1571-0661(04)80796-5"},{"key":"4_CR54","unstructured":"Unruh, E.: Prime number computation. Internal document, ANSI X3J16-94- 0075\/ISO WG21-462 (1994)"},{"issue":"8","key":"4_CR55","first-page":"38","volume":"21","author":"T. Veldhuizen","year":"1996","unstructured":"Veldhuizen, T., Ponnambalam, K.: Linear algebra with C++ template metaprograms. Dr. Dobb\u2019s Journal of Software Tools\u00a021(8), 38\u201344 (1996)","journal-title":"Dr. Dobb\u2019s Journal of Software Tools"},{"issue":"5","key":"4_CR56","first-page":"26","volume":"7","author":"T.L. Veldhuizen","year":"1995","unstructured":"Veldhuizen, T.L.: Expression templates. C++ Report\u00a07(5), 26\u201331 (1995)","journal-title":"C++ Report"},{"issue":"4","key":"4_CR57","first-page":"36","volume":"7","author":"T.L. Veldhuizen","year":"1995","unstructured":"Veldhuizen, T.L.: Template metaprograms. C++ Report\u00a07(4), 36\u201343 (1995)","journal-title":"C++ Report"},{"key":"4_CR58","unstructured":"Wile, D.: Popart: Producer of parsers and related tools. system builders\u2019 manual. Technical report, USC Information Sciences Institute (1981)"}],"container-title":["Lecture Notes in Computer Science","Domain-Specific Program Generation"],"original-title":[],"link":[{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1007\/978-3-540-25935-0_4.pdf","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2020,11,19]],"date-time":"2020-11-19T04:58:45Z","timestamp":1605761925000},"score":1,"resource":{"primary":{"URL":"http:\/\/link.springer.com\/10.1007\/978-3-540-25935-0_4"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2004]]},"ISBN":["9783540221197","9783540259350"],"references-count":58,"URL":"https:\/\/doi.org\/10.1007\/978-3-540-25935-0_4","relation":{},"ISSN":["0302-9743","1611-3349"],"issn-type":[{"value":"0302-9743","type":"print"},{"value":"1611-3349","type":"electronic"}],"subject":[],"published":{"date-parts":[[2004]]}}}