게시판 인덱스

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

7-4관련 질문드립니다.

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



가입: 2021년 3월 9일
올린 글: 13

올리기올려짐: 2021년5월23일 18:38    주제: 7-4관련 질문드립니다. 인용과 함께 답변

안녕하세요, 4번 관련하여 질문 드립니다.

3. type system에서 t = l일 때, e1과 e2의 비교가 가능하다고 명시되어 있습니다. 하지만 타입 중에 l이라는 타입이 없고, dynamic semantic에서의 l을 의미한다고 생각했을 때, Loc가 가리키는 타입이 달라도 타입에러 없는 비교가 가능하다는 생각이 듭니다.
EQ(malloc (1),malloc(true)) 와 같은 연산도 가능할 것이라고 생각됩니다.
하지만 이 것은 location의 타입을 t loc으로 보았을 때, 서로 다른 타입을 EQ연산을 하면 타입 에러라는 숙제 공지사항의 Ex3 2.설명과 배치되는 것처럼 보입니다. 타입체킹을 할 때, location끼리 비교할 때는 어떤 타입을 가리키는지는 신경쓰지 않아도 괜찮을까요?

감사합니다. Very Happy [/tex]
위로
사용자 정보 보기 비밀 메시지 보내기
shkim



가입: 2019년 7월 30일
올린 글: 86

올리기올려짐: 2021년5월24일 11:43    주제: 인용과 함께 답변

문서를 보면 e1, e2의 타입 모두 t로 동일할 때에만 (e1 = e2)가 타입시스템을 통과하게 되어있습니다.
만약 e1: int loc, e2: string loc 이라면 e1, e2의 타입이 같지 않은 것이고 이는 정의되어 있지 않기 때문에 타입에러를 내야 합니다.
위로
사용자 정보 보기 비밀 메시지 보내기
박명훈



가입: 2021년 3월 9일
올린 글: 13

올리기올려짐: 2021년5월24일 15:26    주제: 답변 감사드립니다. 추가적으로 질문드립니다 인용과 함께 답변

답변 감사드립니다. 추가적으로 질문드립니다.

문서에 e1과 e2의 타입이 모두 t로 동일해야만 가능하다고 나와있지만, t = i or b or s l이라고 나와 있습니다. 하지만 l의 정의가 명확하지 않다는 생각이 듭니다.

만약 malloc (1) = malloc ("Hello")가 타입 체킹시에 불가능하다면

이 l의 정의는 semantic 상에서 고려할 때와 타입 시스템에서 고려할 때에는 다른 것인가요?
semantic상에서의 l은 Loc만을, type system에서는 t Loc을 의미한다고 생각하면 되나요?

semantic 상에서 l은 Loc만을 의미하고, loc에 어떠한 것이 저장되어있는가 하는 고려하지 않는 것처럼 보입니다. (malloc (1)) := "Hello" 또한 semantic 상에서는 가능한 동작처럼 보입니다. 그렇다면 semantic(실행기)에서 loc끼리 비교할 때에는 loc에 무엇이 들어가 있는지는 신경쓰지 않는 것인가요?
x = malloc (1)일 때,
x := "Hello"를 했다면 semantic에서는 가능한 동작이지만, Type system에서는 에러를 내게 됩니다.
만약 그렇다면 x의 type 추론 자체가 불가능한 것인데, 만약 M 실행기만을 이용한다면 위의 x:= "Hello"이후에
1) x = malloc(1)
2) x = malloc "Hello"

두 연산을 실행한다면, M 실행기는 어떻게 동작하는 것인가요?
M실행기에서 =를 판단할 때의 l는 단순히 Loc만을 의미하고 Loc t까지는 의미하지 않는다고 생각해서 false를 반환하는지,
아니면 말씀하신 것처럼 t로 동일하지 않으므로 x의 주소에 저장되어 있는 것이 "Hello"이기 때문에 1에 대해서 typeError, 2에 대해서는 false인지, 아니면 x는 처음에 malloc되었을 때, loc int이므로 1에 대해 false, 2에 대해 typeError를 반환하는지에 대해 질문드립니다.

타입 시스템 에서는 (4번의 type checker에서는)
x = malloc (1)이후에
3) x = malloc (1)
4) x= malloc ("Hello")
에서 3번에 대해서는 TyBool, 4번에 대해서는 TypeError를 추론한다고 봐도 될까요?

감사합니다
위로
사용자 정보 보기 비밀 메시지 보내기
shkim



가입: 2019년 7월 30일
올린 글: 86

올리기올려짐: 2021년5월24일 17:29    주제: 인용과 함께 답변

우선 타입시스템이 제대로 도는 프로그램을 reject 하는 것은 이상한 일이 아니라는 것을 알려드립니다.

Dynamic Semantics에서 l은 주소값, Static Semantics에서 t loc은 t타입의 location '타입'입니다.
마찬가지로 Static Semantics에서 i, b, s 또한 각각 정수, 불리안, 문자열의 '타입'입니다.

Dynamic Semantics에서는 주소가 어떤 타입의 값을 가리키는지 고려하지 않습니다.
타입시스템은 통과한 프로그램의 타입 안전성을 보장하기 위해 어떤 타입의 주소인지까지 확인합니다.
이 과정에서 제대로 도는 프로그램을 걸러낼 수도 있습니다.
이것은 수업시간에 배웠듯 이상한 일이 아닙니다.
이를 생각하고 M 실행기의 동작은 Dynamic Semantics를, 타입시스템의 동작은 Static Semantics를 그대로 따라주시면 혼동이 없을 것 같습니다.

주소값의 비교연산(=)도 실행기에서는 단순히 같은 주소값인지 만을 확인할 것이고 타입시스텝에서는 같은 타입의 주소인지 만을 확인할 것입니다.
위로
사용자 정보 보기 비밀 메시지 보내기
박명훈



가입: 2021년 3월 9일
올린 글: 13

올리기올려짐: 2021년5월24일 19:17    주제: 답변 감사드립니다. 인용과 함께 답변

답변 감사드립니다!
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2021) 시간대: GMT + 9 시간(한국)
페이지 11

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


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