이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
구원준
가입: 2009년 9월 24일 올린 글: 11
|
올려짐: 2010년11월10일 20:21 주제: 6-1 질문있습니다. |
|
|
1.
시멘틱 문서에는 [Paren] 에 해당하는 의미구조가 설명되어 있는데
M언어의 expression type에는 이에 해당하는 것이 없는 것 같습니다.
Parsing과정에서 Paren(thesis)가 알아서 처리되는 것이므로 이 시멘틱을 참고하지 않고 Vanila_run을 만들면 되는지 궁금합니다.
2.
아직 자세히 들여다 보지 않아서 이러한 질문이 적절한 것인지는 잘 모르겠습니다만....
vanila와 lowfat의 run이 구현상에서 어떤 차이를 갖는지 모르겠습니다.
vanila에서 type이 맞지 않을 때 runtime error를 발생시키면 되는 것인지 - 즉, raise 하는 부분이 vanila에는 있고 lowfat에는 없는 것인가요..? 그렇다 하더라도 구현을 다르게 할 이유는 없을 것 같습니다. 왜냐하면 raise가 있어도 들어가지는 않으니까요 - 궁금합니다. |
|
위로 |
|
|
최종욱
가입: 2009년 9월 15일 올린 글: 84
|
올려짐: 2010년11월10일 20:36 주제: |
|
|
저도 궁금하네요.
아래 글(https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=2464)에도 논의가 되었던 것 같은데
조성근 씀: | 여기서의 실행은 6-1에서의 실행과 다릅니다. 6-1의 eval에서는 타입이 맞지 않는 실행에 대해서 RuntimeError 예외를 발생시키며 실행이 중지합니다. 6-2의 eval에서는 타입이 맞지 않는 실행에 대해서 예외를 발생시켜주지 않아도 됩니다. 이미 정적으로 타입 검사를 마친 프로그램만 실행될테니까요. 단, read의 경우만 예외적으로 RuntimeError예외를 발생시켜 줍니다. |
결국 6-1에서 타입이 올바르지 않은 프로그램을 RuntimeError로 처리했다면, 그런 코드가 6-2의 run에도 그대로 사용되어도 별로 차이점이 없지 않을까요? 조교님의 답변은 안 해도 된다는 것 같지만 똑같이 구현해도 상관없을 것 같다는 생각이 들긴 합니다. 왜 굳이 비슷한 일을 하는(?) 코드를 두 번 짜도록 하는 데에는 뭔가 다른 의미가 있어서일까요.. _________________ Jongwook Choi
Seoul National University, School of Computer Science & Engineering |
|
위로 |
|
|
조성근
가입: 2009년 9월 14일 올린 글: 283
|
올려짐: 2010년11월11일 8:48 주제: |
|
|
1. 괄호는 parsing 과정에서 처리됩니다.
2.
6-1은 동적으로 타입을 검사해서 실행 중에 타입에러를 발생시키는 코드이고 6-2는 정적으로 타입을 검사해서 실행 전에 타입에러를 발생시키는 코드입니다. 두 문제의 가장 큰 차이점은 여기에 있습니다.
저는 여러분의 질문을 "실행 전에는 정적으로 타입 검사를 하고, 실행 중에는 또 동적으로 타입 검사를 해도 되는 것 아닌가?"로 이해했는데요. 제가 이해한 것이 맞나요? 믿을 수 있는 정적인 타입 체커를 통과한 프로그램들에 대해서 정말 실행 중에는 동적인 타입 검사를 하지 않아도 이상한 일이 발생하지 않는지 확인해 보시는 숙제로 보시면 될 것 같습니다. hw6_2.ml에는 getNum, getBool과 같이 타입의 올바름을 실행 도중에 확인하는 함수가 없는 것도 같은 맥락입니다.
구원준 씀: | 그렇다 하더라도 구현을 다르게 할 이유는 없을 것 같습니다. 왜냐하면 raise가 있어도 들어가지는 않으니까요 |
돌아가지 않을 raise 구문을 지우지 않아도 같은 동작을 할 것입니다만, 한 번 지우고 정말 안돌아가는지 확인해 보세요. |
|
위로 |
|
|
|