I meant to say tan(Pi / 4) in that example. Sorry. Trying to assign tan(Pi / 2) to something will probably cause an error, or at the very least be an interesting test case, because the result is undefined.
Gareth aka. Kit On Mon 09/07/18 12:00 , "J. Gareth Moreton" gar...@moreton-family.com sent: > Besides being able to assign the function > > result to constants, the main benefit is > > that, for constant inputs, the result is > > deterministic and so the compiler can > > calculate this beforehand and replace a > > function call with an assignment. For > > example, if tan was a regular function, x > > := tan(Pi / 2) might look like this in > > assembly: > > > > MOVAPD XMM0, Pi > > DIVSD XMM0, TwoConstant > > CALL tan ; Result is now in XMM0, which is > > 1 > > > > It won't be exactly that, but you get the > > idea. If tan is defined as a pure > > function, then the result can be pre- > > calculated and the entire block changed to > > a simple assignment: > > > > MOVAPD XMM0, OneConstant ; value of tan(Pi > > / 2) > > > > It doesn't take a genius to know that that > > is faster by several orders of magnitude. > > > > More subtly, if it turns out that the > > function is never called with variable > > arguments, the entire function can be > > removed from the compiled binary, reducing > > its size. > > > > Gareth aka. Kit > > > > On Mon 09/07/18 10:25 , Sven Barth via > > fpc-devel fpc-devel@lists.freepascal.org > sent: > > > Ryan Joseph schrieb am Mo., 9. Juli > > 2018, 08:45: > > > > > > > On Jul 8, 2018, at 8:50 AM, J. Gareth > > Moreton wrote: > > > > > > > > With some blessing from Florian on the > > concept, I've set up a Wiki page > > > discussing the design proposals for the > > support of pure functions, as well > > > as some explanation on what they > > actually are. > > > > > > > > > > What are the performance benefits? It > > sounds like this is a proposal for a > > > compiler optimization which we can > > explicitly opt in to, but what exactly > > > is the optimization? > > > > > > If nothing else I like the idea as a way > > to enforce a function is not > > > accessing global state. Kind of like > > const for functions. > > > > > > It would allow you to declare constants > > that use those functions with the > > > compiler evaluating them at compile > > time. Also the compiler might be able > > > to optimize such functions better > > especially if they're inlined. *shrugs* > > > Regards, Sven > > __________________________________________ > > _____ > > > fpc-devel maillist - fpc- > > de > v...@lists.freepascal.org > > http://lists.freepascal.org/cgi- > bin/mailman/listinfo/fpc-devel [1] > > > > > > > > > > > > Links: > > > ------ > > > [1] > > > http://secureweb.fast.net.uk/parse.php? > redirect=http://lists.freepascal.org > > /cgi-bin/mailman/listinfo/fpc-devel > > > > > > > __________________________________________ _____ > > fpc-devel maillist - fpc- de...@lists.freepascal.org > http://lists.freepascal.org/cgi- bin/mailman/listinfo/fpc-devel > > > > _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel