게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

6-1 질문있습니다.

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2010)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
구원준



가입: 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 구문을 지우지 않아도 같은 동작을 할 것입니다만, 한 번 지우고 정말 안돌아가는지 확인해 보세요. Smile
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2010) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay