Content deleted Content added
Added content Tags: Reverted Mobile edit Mobile web edit |
Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5 |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 4:
'''Template metaprogramming''' ('''TMP''') is a [[metaprogramming]] technique in which [[Generic programming|templates]] are used by a [[compiler]] to generate temporary [[source code]], which is merged by the compiler with the rest of the source code and then compiled. The output of these templates can include [[compile time|compile-time]] [[constant (programming)|constant]]s, [[data structure]]s, and complete [[function (computer science)|function]]s. The use of templates can be thought of as [[Compile-time function execution|compile-time polymorphism]]. The technique is used by a number of languages, the best-known being [[C++]], but also [[Curl programming language|Curl]], [[D programming language|D]], [[Nim (programming language)|Nim]], and [[XL Programming Language|XL]].
Template metaprogramming was, in a sense, discovered accidentally.<ref name="Meyers2005">{{cite book|author=Scott Meyers|title=Effective C++: 55 Specific Ways to Improve Your Programs and Designs|url=https://books.google.com/books?id=Qx5oyB49poYC&q=%22Template+metaprogramming%22|date=12 May 2005|publisher=Pearson Education|isbn=978-0-13-270206-5}}</ref><ref>See [[wikibooks:C++ Programming/Templates/Template Meta-Programming#History of TMP|History of TMP]] on Wikibooks</ref>
Some other languages support similar, if not more powerful, compile-time facilities (such as [[Lisp (programming language)|Lisp]] [[Macro (computer science)#Syntactic macros|macros]]), but those are outside the scope of this article.
Line 413:
* {{cite book | authorlink1 = David Abrahams (computer programmer) | first1 = David | last1 = Abrahams | authorlink2 = Aleksey Gurtovoy | first2 = Aleksey | last2 = Gurtovoy | title = C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond | publisher = Addison-Wesley | isbn = 0-321-22725-5 | date = January 2005 }}
* {{cite book | authorlink1 = David Vandevoorde | first1 = David | last1 = Vandevoorde | authorlink2 = Nicolai M. Josuttis | first2 = Nicolai M. | last2 = Josuttis | title = C++ Templates: The Complete Guide | publisher = Addison-Wesley | isbn = 0-201-73484-2 | year = 2003 }}
* {{cite book | authorlink = Manuel Clavel | first = Manuel | last = Clavel | title = Reflection in Rewriting Logic: Metalogical Foundations and Metaprogramming Applications | isbn = 1-57586-238-7 | date = 2000-10-16 | publisher = Cambridge University Press }}
==External links==
Line 422:
* {{cite web | url = https://wiki.haskell.org/Template_Haskell | title = Template Haskell }} (type-safe metaprogramming in Haskell)
* {{cite web | authorlink = Walter Bright | first = Walter | last = Bright | url = http://www.digitalmars.com/d/templates-revisited.html | title = Templates Revisited }} (template metaprogramming in the [[D programming language]])
* {{cite web | url = http://staff.ustc.edu.cn/~xyfeng/teaching/FOPL/lectureNotes/MetaprogrammingCpp.pdf | title = Metaprogramming in C++ | authorlink = Johannes Koskinen | first = Johannes | last = Koskinen | access-date = 2014-06-20 | archive-date = 2014-08-28 | archive-url = https://web.archive.org/web/20140828190250/http://staff.ustc.edu.cn/~xyfeng/teaching/FOPL/lectureNotes/MetaprogrammingCpp.pdf | url-status = dead }}
* {{cite web | url = http://lcgapp.cern.ch/project/architecture/ReflectionPaper.pdf | title = Reflection support by means of template metaprogramming | first1 = Giuseppe | last1 = Attardi | first2 = Antonio | last2 = Cisternino | access-date = 2008-10-24 | archive-date = 2016-03-03 | archive-url = https://web.archive.org/web/20160303183212/http://lcgapp.cern.ch/project/architecture/ReflectionPaper.pdf | url-status = dead }}
* {{cite CiteSeerX | citeseerx = 10.1.1.14.5881 | title = Static data structures | first1 = Michael C. | last1 = Burton | first2 = William G. | last2 = Griswold | first3 = Andrew D. | last3 = McCulloch | first4 = Gary A. | last4 = Huber | year = 2002 }}
* {{cite web | url = http://www.codeproject.com/Articles/19989/Template-Meta-Programming-and-Number-Theory | title = Template Meta Programming and Number Theory | first = Zeeshan | last = Amjad | date = 13 August 2007 }}
|