The ISAAC cipher: Difference between revisions
Content added Content deleted
m (→{{header|Wren}}: Wren-trait -> Wren-iterate) |
m (Corrected typos.) |
||
Line 3,557: | Line 3,557: | ||
{{trans|Pascal}} |
{{trans|Pascal}} |
||
We choose the translate the Pascal version as the it’s easier to translate to Nim from Pascal rather than from C. |
We choose the translate the Pascal version as the it’s easier to translate to Nim from Pascal rather than from C. |
||
This is not an exact |
This is not an exact translation: the more important difference is the use of a global state record rather than a list of global variables. This global state is transmitted to each procedure. This way, it is possible to run several PRNG concurrently. |
||
We |
We also replaced the eight variables "a" to "h" with an array. This allows to simplify the code at several places by using a loop. And we changed the "mod" to "and", even if the compiler will likely optimize the modulo when the second operand is a power of two. |
||
Note that the "mix" procedure could possibly be transformed in a template or be marked as "inline" (in the C version, it is a "define"). But as we are not in procedure whose performance is critical, expanding the code rather than calling a procedure is not very useful. |
Note that the "mix" procedure could possibly be transformed in a template or be marked as "inline" (in the C version, it is a "define"). But as we are not in a procedure whose performance is critical, expanding the code rather than calling a procedure is not very useful. |
||
<syntaxhighlight lang="nim">import strutils |
<syntaxhighlight lang="nim">import strutils |