4
W_t = M_t[i] if 0 <= t <= 15
W_t = ROTL_1(W_(t-3) XOR W_(t-8) XOR W_(t-14) XOR W_(t-16)) if 16 <= t <= 79
이것은 SHA-1 표준의 것입니다. haskell에서 당신이하는 일은 반복적 인 함수를 작성하는 것입니다. 그러나 더 효율적으로하기 위해서 전체 재귀를 풀고 싶습니다. 인라인은 코드의 기하 급수적 인 폭발로 이어질 수 있으므로 작동하지 않습니다. 내가 생각하기에 상수 라인을 생성하기 위해 TH를 쓰려면 W_0
, W_1
, W_2
등등 W_79
까지.루프 및 재귀 언 롤
또 다른 예는 경우 루프 언 롤링입니다
For t=0 to 79:
{
T = ROTL_5(a) + f_t(b, c, d) + e + K_t + W_t
e = d
d = c
c = ROTL_30(b)
b = a
a = T
}
내가 재귀 함수 호출을 방지 할뿐만 아니라이 루프를 풀다 싶습니다 (나는 GHC는 최적화의이 종류를 수행 할 것이라고 생각하지 않습니다) .
그래서 내가이 글을 쓰기 전에이 일을하는 더 좋은 방법이 있는지 묻고 싶다. 여기서 최적화가 매우 중요하다고 말하기 만하면됩니다.
나는 다른 방법이 있다고 생각하지 않으므로이 대답을 받아 들일 것입니다. – Satvik