In non-Turing complete languages like Clarity (used for writing smart contracts on the Stacks blockchain), loops and recursion are intentionally excluded to ensure predictability and prevent non-termination. However, these languages still provide support for cryptographic functions like sha256, which internally require looping to process data blocks.
I'm curious to understand how non-Turing complete languages implement functions like sha256 without violating their non-Turing complete nature. How is it possible for these functions to exist in such environments if they rely on looping mechanisms under the hood?