Art of Assembly - Page404에 나오는 내용입니다.
Logical Operator를 설명하면서
주석을 달아놓았더군요.
5. Note to C/C++ and Java users.
HLA's constant expressions use complete boolean evaluation
rather than short-circuit boolean evaluation.
Hence, HLA constant expressions do not behave identically
to C/C++/Java expressions.
여기서 나오는 'complete boolean evaluation'과
'short-circuit boolean evaluation'이 무엇인지 몰라
구글링을 했습니다.
먼저 한국어로 된 자료를 찾아보았더니, PPT자료가 나왔습니다.
'자연언어처리'
9페이지를 보면 관련 내용이 나와 있습니다.
Short-circuit evaluation이란
Boolean 수식을 처리할 때 앞 수식을 실행한 결과에 따라
뒤 수식의 실행 여부를 결정하는 것이라고합니다.
이 내용은 Perl을 공부하면서 본 내용과 비슷합니다.
(Beginning Perl Chapter 2)
여기서는 'lazy evaluation'이라고 얘기하였습니다.
여기에 나온 설명을 토대로 한 번 예제를 만들어보았습니다.

위 예제의 실행 결과는 다음과 같습니다.

두 번째 구문은 '2 >= 4'가 틀렸기에
'Sentence2 is false'가 출력되었습니다.
그리고 세 번째 구문은 '4 >= 2'가 맞았기에
'Sentence3 is true'가 출력되었지만,
'Four is more than or equal to two'가 출력되지 않았습니다.
그럼 'complete boolean evaluation'은
저런 꼼수(?)를 쓰지 않고 모두 다 검사한다는 뜻이겠더군요.
맞는가 싶어 찾아보았습니다.
그런나 따로 문서로 된 것은 찾지 못하고,
컴파일러 옵션 설명에서 찾았습니다.
complete boolean expression evaluation은
결과물을 이미 알지라도 모두 실행됨을 보장한다는군요.
short-circuit boolean expression evaluation은
전체가 명확히 결정되면 멈춘다고 합니다.
제 생각이 맞는 듯 싶네요.^^
C/C++/Java는 'short-circuit boolean evaluation'이지만,
HLA는 아니라고 하는군요.
그래서 실험(?)해보았습니다.


위의 Perl 구문을 C로 옮겨 적어보았습니다.
Perl과 같은 결과물을 내놓네요.
그럼 이제 HLA를 해보았습니다.
HLA에서는 IF구문 안에서 stdout.put이 실행되지 않아
조금 변형시켰습니다.


처음에 ecx의 값을 5로 하고,
구문 뒤에 값을 1씩 빼도록 하였습니다.
그런데 재미있게도 위의 Perl과 C에서 했던 것과 동일한 결과입니다.
구문 1과 4에서 1을 빼는 명령어가 실행되었고,
나머지 구문에서는 실행이 되지 않은 것을 알 수 있습니다.
책에서는 C/C++/Java와 다르다고 했는데,
왜 결과가 같이 나오는지 모르겠습니다.
제가 이해를 잘못한 것일까요?
아니면 코드를 잘못 만들어서 일까요?
잘 모르겠습니다.
이에 대해서는 좀 더 공부한 뒤에 살펴보겠습니다.
일단 이렇게 내용을 정리하겠습니다.
내심 HLA에서 complete boolean evaluation을 보기를 기대했는데,
조금은 아쉽게 되었습니다.^^
다만 다른 언어의 컴파일러 옵션으로 설정할 수 있다고 하니
후에 참조해야겠습니다.
참조
http://www.frameworkpascal.com
- 제가 만드는 프로그램 Test중입니다. (14)2007/05/12
- Common Pointer Problems(포인터를 쓸 때 겪는 문... (5)2007/05/11
- 제가 만드는 프로그램 Test중입니다. (13)2007/05/10
- complete boolean evaluation, short-circuit boo... (2)2007/05/10
- 'Beginning Perl'과 '학교에서는 가르쳐주지 않는... (6)2007/03/27
- Perl - 변수 Swap하는 법 (6)2007/03/22
- Perl - <=> == compare 함수 (8)2007/03/19
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.






002.pdf


댓글을 달아 주세요
제목부터 영어여서 당황.
내용이 어려워서 당황.
/럭셜청풍/
당황하셨나요?^^;;;;
이번에 이글루스가 멀티 이글루를 지원하게 되었는데,
저도 옮길까 생각해보았답니다.
그런데 이런 내용이 그리 많지 않아서 따로 있어야 할 이유를 모르겠더군요.
거기다 리퍼러 분석에 많은 시간을 투자하고 싶지 않은 이유도 있답니다.^^;;