줄리아의 숏 서킷
개요
줄리아에서 &&
과 ||
는 논리곱, 논리합일 뿐만 아니라 숏-서킷 평가short-circuit Evaluation을 수행한다1. 가령 A && B
는 A
와 B
가 모두 참일 때 참을 리턴하는데, 사실 A
가 거짓이라면 B
가 참인지 거짓인지 볼 것도 없이 A && B
는 거짓이다. 숏-서킷 평가는 그 볼 것도 없는 B
를 실제로 안 보는 것이다. B
에 대한 계산을 생략함으로써 속도가 개선되는 상황이 있다.
같이보기
속도 비교
M = rand(0:2, 10^4, 10^4);
print(first(M))
@time if first(M) == 2 && sum(M) < 1000
print("!!")
end
@time if sum(M) < 1000 && first(M) == 2
print("!!")
end
두 조건문은 sum(M) < 1000
와 first(M) == 2
의 순서만 바뀌었을 뿐 정확히 같은 작업을 수행한다. 그러나 first(M) == 2
는 행렬 M
의 첫번째 원소가 2
인지 체크만 하고, sum(M)
은 모든 원소를 순회하며 덧셈을 하기 때문에 상대적으로 계산에 오래걸린다.
julia> M = rand(0:2, 10^4, 10^4);
julia> print(first(M))
0
만약 M
의 첫번째 원소가 위와 같이 0
이라면, sum(M) < 1000
인지 확인하기 위해 sum(M)
를 계산할 필요가 없다. 그 속도들은 다음과 같이 단지 순서만 바꿔도 유의미한 차이가 날 수도 있다.
julia> @time if first(M) == 2 && sum(M) < 1000
print("!!")
end
0.000009 seconds
julia> @time if sum(M) < 1000 && first(M) == 2
print("!!")
end
0.040485 seconds (1 allocation: 16 bytes)
환경
- OS: Windows
- julia: v1.7.0