박성희
가입: 2025년 3월 13일 올린 글: 11
|
올려짐: 2025년5월29일 22:34 주제: [숙제 7] Exercise 3 관련 질문입니다. |
|
|
안녕하세요 프로그래밍언어 수강 중인 박성희입니다.
[OP]의 [Eq]에서 Loc를 받는 경우 좌측과 우측에 대한 Loc 내부의 세부타입 까지 같아야 하는 걸로 이해했습니다.
Γ e1 : τ and Γ e2 : τ (τ=i,b,s,or l)
--------------------------------------
Γ e1=e2 : b
그렇다면 저장해있는 타입이 다른 것 (예를 들자면 malloc 1과 malloc "PL2025")를 비교하려면 타입 오류?를 일으켜야 할 것 같은데요
그런데 현재 구현 상에는 exp1 (Loc int), exp2 (Loc int)로써 op2fn에 결과값을 끌고 와서 이항연산을 마무리하는 것으로 보입니다만, 여기서 Loc가 저장한 타입을 비교할 수가 있나요?
M언어의 구현 상 Loc는 그 내용이 주소값이 int밖에 없어서 추가적인 정보가 없는 한 해당하는 함수 내부에서는 주소값만 비교할 수 있을 뿐 그 안에 덩어리의 타입이 뭔지 파악할 수는 없을 것 같다는 게 제 생각이긴 합니다.
(op2fn에 메모리에 인자로 받지 않은 데다가 만약 받는 다고 해도 거기 안에서 타입체킹을 해야 한다는 소리인데 그러면 문제가 너무 복잡해지지 않을까 하는 생각도 있습니다.)
물론 Exercise 4와 같은 경우 타입 체킹을 할 수 있으니 문제가 없을 것 같습니다.
조금 고민을 해 보니 해당하는 문제가 Dynamic Semantics를 따라가는 것이니까 구체적인 타입이 정확하게 정의가 되지는 않은 상황으로 해당하는 상황에서 eq가 정의하는 8가지 규칙만 충실히 구현을 하면 된다라고 결론을 냈었는데 검토 중
인용: | EQUAL Semantics에 대해 : 3장 "Static Semantics: Type System"의 스펙을 따라 다음과 같이 정합니다.
서로 다른 타입을 비교하거나, Pair끼리의 비교, Closure끼리의 비교는 타입 에러입니다. |
에 대한 문구 때문에 혹시나 해서 질문 드렸습니다.
숙제7 관련해서 질문을 너무 많이 드리는 것 같은 데
바쁘신 와중에도 항상 신경 써서 답변해 주셔서 감사합니다.. |
|