함수는 헤더(header) 와 본체(body) 로 이루어 짐
헤더에는 리턴 타입(return type), 함수이름(id), 매개변수(parameter) 를 선언
함수 호출은 함수 이름과 인자(argument) 로 구성
정적 유효 범위(static scope)
- 선언된 이름은 선언된 블록 내에서만 유효함. 대부분 언어에서 표준 규칙으로 사용
동적 유효 범위(dynamic scope)
- 선언된 이름은 선언된 블록의 실행이 끝날 때까지 유효. 실행 경로에 따라 유효 범위가 달라짐
바인딩(binding) 은 이름을 어떤 속성(attribute)과 연관 짓는 것을 말하며, 보통 변수, 상수, 함수 등의 이름을 속성과 연관 짓는 것
정적 바인딩(static binding)
- 컴파일 시에 한번 바인딩이 이루어지고 ㅂ실행 동안 변하지 않고 유지됨. 적정 바인딩 되는 속성을 정적 속성이라 함
동적 바인딩(dynamic binding)
- 실행 중에 이루어지는 바인딩으로 실행 중간에도 속성 변경될 수 있음. 동적 바인딩 되는 속성을 동적 속성이라 함
식별자에 대한 속성 정보는 심볼 테이블(symbol table)에 유지 관리. 심볼 테이블은 유효한 속성 정보를 유지 관리하기 위한 자료 구조
값 전달(pass by value) : 함수를 호출할 때 인자의 값을 계산하여 대응하는 매개변수를 전달
참조 전달(pass by reference) : 함수를 호출할 때 인자의 값이 아니라 인자에 대한 참조(reference) 를 전달, 참조는 포인터와 비슷하지만 주소를 자동으로 따라가는 자동 주소참조(automatic dereferencing)이 이루어짐
값-결과 전달(pass by value-result) : 함수를 호출할 때와 함수로부터 리턴할 때 두번 매개변수를 전달. 첫번째 전달이 값 전달, 두번째 전달이 결과 전달
이름 전달(pass by name) : 지연 계산(delayed evaluation)을 사용. 인자는 대응되는 매개 변수가 사용될 때까지 계산되지 않고 매개변수가 사용될 때 계산됨. 현대 프로그래밍 언어에서는 거의 사용하지 않음
실행시간 스택(runtime stack) : 함수 호출에 필요한 지역 변수, 매개변수, 반환 값, 반환 주소등을 위한 기억공간이 할당
함수 호출을 구현하기 위한 자료구조는 활성 레코드(activation record) 또는 스택 프래임(stack frame) 이라 함
실행시간 스택(runtime stack) : 함수 호출에 필요한 지역 변수, 매개변수, 반환주소, 임시 변수등을 위한 기억 공간으로 사용, 함수 호출을 구현하기 위해서 사용되는 기억공간
데이터 영역(data segment) : 정적 변수(static variable)와 전역 변수(global variable) 들을 위한 기억공간
힙 영역(heap) : 동적 메모리 할당을 위한 기억 공간, 자바에서는 new 로 선언된 기억 공간 할당
접근 링크 : 정적 유효 범위 규칙을 사용하는 경우에 비지역 변수(nonlocal variable) 를 접근하는데 사용되며 정적 링크라고도 함. 호출된 함수를 위한 활성 레코드 내의 접근 링크는 호출된 함수가 정의된 바깥 블록(혹은 함수)의 활성 레코드를 가리키는 포인터를 갖으며 이 포인터를 이용하여 비지역 변수를 접근
비지역 변수를 찾아 접근하기 위해서는 경우에 따라서는 여러 번 링크를 따라가야 하며 이를 접근 체인(access chaining)이라함. 접근 링크를 한번 따라갈 때마다 함수가 선언된 바깥 블록 혹은 바깥 함수의 활성 레코드로 가게 됨. 이렇게 해서 해당 활성 레코드를 찾고 이 레코드 내에 있는 비지역 변수를 접근 함
'프로그래밍 언어론' 카테고리의 다른 글
[프로그래밍 언어론] 객체(object)와 클래스 (0) | 2022.08.22 |
---|---|
[프로그래밍 언어론] 예외 처리 (0) | 2022.08.22 |
[프로그래밍 언어론] 타입 시스템 (0) | 2022.08.22 |
[프로그래밍 언어론] 자료형(data type) (0) | 2022.08.22 |
[프로그래밍 언어론] 의미론(sementics) (0) | 2022.08.22 |