Compile-time function execution: Difference between revisions

Content deleted Content added
minor rewording to clarify
minor editing- moved sentence
Line 5:
==Examples==
The [[Lisp (programming language)|Lisp]] macro system is an early example of the use of compile-time evaluation of user-defined functions in the same language.
 
The Metacode extension to C++ (Vandevoorde 2013)<ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1471.pdf|title=Reflective Metaprogramming in C++|author=Daveed Vandevoorde, Edison Design Group|date=April 18, 2003|accessdate=July 19, 2015}} </ref> was an early experimental system to allow compile-time function evaluation (CTFE) and code injection as an improved syntax for C++ [[Template metaprogramming|template metaprogramming]].
 
In earlier versions of [[C++]], [[template metaprogramming]] is often used to compute values at compile time, such as:
Line 45 ⟶ 47:
 
In [[C++11]], this technique is known as [[C++11#constexpr – Generalized constant expressions|generalized constant expressions]] (<code>constexpr</code>).<ref>{{cite web|url=http://www.stroustrup.com/sac10-constexpr.pdf|author=Gabriel Dos Reis and Bjarne Stroustrup | title=General Constant Expressions for System Programming Languages. SAC-2010. The 25th ACM Symposium On Applied Computing. | date=March 2010}}</ref> [[C++14]] [[C++14#Relaxed constexpr restrictions|relaxes the constraints]] on constexpr – allowing local declarations and use of conditionals and loops (the general restriction that all data required for the execution be available at compile-time remains).
 
The Metacode extension to C++ (Vandevoorde 2013)<ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1471.pdf|title=Reflective Metaprogramming in C++|author=Daveed Vandevoorde, Edison Design Group|date=April 18, 2003|accessdate=July 19, 2015}} </ref> was an early experimental system to allow compile-time function evaluation (CTFE) and code injection as an improved syntax for C++ [[Template metaprogramming|template metaprogramming]].
 
Here's an example of compile time function evaluation in the [[D programming language]]:<ref>[http://d-programming-language.org/function.html#interpretation D 2.0 language specification: Functions]</ref>