3 ms·
This is called template-based compile-time programming. By making 3 instances of linear_feedback_shift_engine class template ( and 2 of xor_combine_engine ), y
by windenntw 17d ago
This is called template-based compile-time programming.
By making 3 instances of linear_feedback_shift_engine class template ( and 2 of xor_combine_engine ), you are forcing the compiler to expand the code exactly as-is 3 times, each with different parameters.
The parameters to the template are constant, therefore the compiler can easily look at how they are used and you are guaranteed ( even in a 1999 c++ compiler ) that the compiler will look at the copies of the code and merge them as much as possible into a single piece of code... which is the one that you see when you decompile the code.
So in summary, it means that you get to write fairly readable code while the final binary is fully optimized as-if you had spent the time merging all the variants as needed for the specific constants.
- eru 17d agoYou could get something similar from CPP macros. But the compiler wouldn't be able to help you as much.
- cmovq 16d agoMy point is that the straight-line non-templated function presented later in the article is significantly more readable, it’s like 8 lines of code with a few shifts and xors.