Skip to content

Does match clause create a new stackframe? #79

@simnalamburt

Description

@simnalamburt

TL;DR

match clause가 새 스택프레임을 만드나요?

설명

The E Programming Language 스펙상, 같은 스택프레임에서 동일한 name이 여러번 선언된것은 ill-formed인 반면, 다른 스택프레임에선 같은 name이 등장해도 괜찮습니다. 문제 스펙상 ill-formed 입력에 대해선 raise를 내거나 아무 결과를 리턴해도 무관하기 때문에, 새로운 스택프레임이 언제 생성되냐는 프로그램의 동작을 정의하는데에 있어 굉장히 중요한 문제입니다.

아래 두 clause의 경우 비교적 명확합니다

  • let clause의 경우 새 스택프레임이 생긴다고 문제에 명시되어있습니다
  • app clause의 경우 문제에 명시되어있지는 않으나, 함수 호출이니 새 스택프레임이 생긴다고 생각하는것이 상식적이겠습니다

반면 match clause의 경우 새 스택프레임이 생기는것인지 아닌지 명확하게 명시되어있지 않습니다. match로 인해 새 스택프레임이 생길 경우, 아래의 프로그램은 정상적으로 실행되어야하지만 새 스택프레임이 생기는것이 아닐경우, ill-formed입니다.

(def is_positive (i)
  (match (> i 0)
    ((i) (inl 0))
    ((is_positive) (inr 0))
  )
)

match가 함수호출은 아니므로 새 스택프레임을 만들지 않는다고 생각해도 말이 됩니다. 반면, match clause 안의 identifier가 바깥 변수들과 겹치는것이 불가능한것도 어색하고 대부분의 기존 프로그래밍 언어들과 동작이 다르므로 새 스택프레임을 만든다고 생각해도 말이 됩니다.

match clause가 새 스택프레임을 만드나요 만들지 않나요?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions