Abstraction?
- 추상화
- hiding the details
- 관심있는 것에 집중
용어
- Abstraction(추상화): 더 간단하게 만드는 것
- Encapsulation(캡슐화): 하나의 단위로 만드는 것
- Information Hiding(정보은닉): 상세내용을 숨기는 것
- 추상화, 캡슐화, 정보은닉은 밀접한 연괸이 있음
- 캡슐화와 정보은닉은 통상 같은 의미로 사용하지만 구분하는 경우도 있음
데이터 타입의 발전
1957~1960(FORTRAN, ALGOL)
- 하드웨어에 직접 구현된 형태의 primitive data
1960~1963(COBOL,PL/I)
- 구조체의 등장 : primitive objects의 모음
1968~1970(Pascal, Algol68)
- 새로운 타입 정의 가능
- 새로운 타입을 사용하는 함수 정의 가능
1972~1975(캡슐화 시대)
- 정보은닉, 오버로딩, 상속
- 클래스 및 패키지 개념 등장
1980~1985(객체지향)
- Smalltoalk-80, C++, Ada-95
Abstract Data Types
Type = Set of Values + Set of operations
Abstract Data Types(ADT)
- ADT도 타입이다.(Value Set + Operation Set)
- 다만 operation의 구현이 드러나지 않음(추상화)
- value의 구현(저장형태 등)도 드러나지 않음
- ADT는 Algebraic data type인 경우가 많음
Algebraic Data Type
- 해당 데이터 타입에 적용 가능한 연산자들 사이에 특정 대수적 법칙이 만족됨
- 예시: pop(push(S,I))=S
ADT의 예시
정보은닉(Information Hiding)
정보은닉
- 인터페이스와 무관한 부분을 숨기는 설계 기법
- 정보은닉은 어떤 언어에도 구현 가능함
Subprograms as Abstract Operations
프로그램 구현 방법
- built-in types & built-in operations
- 라이브러리
- 사용자 정의 데이터타입 &operations
여기서 사용자 정의 operation은 subprogram으로 구현됨
Subprograms
- 구현되어 있지 않은 연산
- 특정 UDT와 연관될 경우 ADT의 연산자로 볼 수 있음
Subprogram 특징
Subprogram 종류
- 함수(functions)
- 결과 값(return value)을 이용
- 사용자 정의 operators
- 프로시저(procedures)
- 부대효과(side-effect)를 활용
- 사용자 정의 statements
Subprogram 명세
- 이름
- 시그니처(signature, prototype, protocol) = return type + parameter profile
- 몸체(body, action)
예시
- float FN(float X, int Y)
FN: float x int ->flaot
Subprogram Storage 구현
가장 간단한 구현 방법
- 서브 프로그램을 통째로 복사하여 수행 -> 비효율적
- recursion -> 실행시간에 복사하는 것이 필요할지도 모름
좀 더 나은 구현 방법
- 정적인 부분(static part)과 동적인 부분(dynamic part)을 구별
- 실행시간에는 동적인 부분만 관리
구현
- 정적인 부분: 코드, static data -> static segment
- 동적인 부분: 실인수, local data -> dynamic segment
Activation Records
Activation Records
- 서브프로그램과 연관된 동적 데이터를 관리하는 구조체
- 서브프로그램이 실행될 경우에만 생성됨
예시(C subprogram): 동적인 부분 표시
Stack Frame
Function Call/Return Nature
- 함수 호출 후 반드시 복귀됨(정상적인 경우)
- 복귀될 경우에는 최근에 호출된 함수가 먼저 복귀됨
Stack of Activation Records: AR 하나를 stack frame이라고 함
로컬 데이터 참조(Accessing Local Data)
Local Data 참조 방법
- 관련된 활성레코드의 프레임 포인터 값을 구함
- 참조하고자 하는 데이터 항목의 offset(상대주소)을 이용하여 I-value획득
General Semantics of Call and Return(호출과 반환의 일반적인 의미론)
- 언어의 하위 프로그램 호출 및 반환 작업은 함께 하위 프로그램 연계(subprogram linkage)라고 불린다.
- subprogram call과 연관된 Actions
- 매개 변수 전달 메커니즘
- 로컬값 저장소
- 프로그램 유닛 호출의 실행 상태 저장
- subprogram에게 control(제어) 전송(전달)
- nonlocal 접근 메커니즘
- subprogram return과 연관된 Actions
- 아웃모드 또는 복사전달의 경우 공식 매개 변수의 로컬 값을 실제 매개 변수로 이동
- 로컬에 대한 저장소 할당 해제
- 비로컬에 대한 반환(return) 메커니즘
- 제어를 호출 프로그램 단위로 반환
간단한 Subprogram 구현
FORTRAN77 Subprogram 구현
- 참조 전달
- 재귀 X
- COMMON을 통한 논로컬 참조
- 변수의 정적할당
- Call Semantics:
- Save the execution status of the caller(발신자의 실행 상태를 저장하세요)
- Carry out the parameter-passing process(매개 변수 전달 프로세스를 수행하세요.)
- Pass the return address(리턴 주소를 전달하세요.)
- Transfer control to the callee(callee에게 제어를 전달하세요)
- Return Semantics:
- If pass-by-value-result parameters are used, move the current values of those parameters to their corresponding actual parameters(Pass-by-value-result 매개 변수가 사용되는 경우, 해당 매개 변수의 현재 값을 해당 실제 매개 변수로 이동합니다.)
- If it is a function, move the functional value to a place the caller can get it(그것이 함수라면, 기능 값을 발신자가 얻을 수 있는 곳으로 옮기세요.)
- Restore the execution status of the caller(발신자의 실행 상태를 복원하세요)
- Transfer control back to the caller(제어를 발신자에게 다시 전송하세요.)
- 요구되는 Storage
- 발신자, 매개 변수, 반환 주소 및 기능 값의 상태 정보 (함수인 경우)
- 실행 중인 하위 프로그램의 비코드 부분의 형식 또는 레이아웃을 활성화 레코드라고 합니다.
- 활성화 레코드 인스턴스는 활성화 레코드의 구체적인 예입니다(특정 하위 프로그램 활성화를 위한 데이터 수집)
- 포트란 77 하위 프로그램은 주어진 시간에 하나 이상의 활성화 레코드 인스턴스를 가질 수 없습니다.
- FORTRAN 77 프로그램의 모든 프로그램 단위의 코드는 메모리에 함께 있을 수 있으며, 모든 단위의 데이터는 다른 곳에 함께 저장될 수 있습니다.
- 대안은 모든 로컬 하위 프로그램 데이터를 하위 프로그램 코드로 저장하는 것입니다.
활성화 레코드
스택-동적 지역변수 Subprogram 구현
더 어렵다 그 이유는
- 컴파일러는 로컬 변수의 암시적 할당과 할당을 유발하기 위해 코드를 생성해야 합니다.
- 재귀는 지원되어야 합니다 (하위 프로그램의 여러 동시 활성화 가능성을 추가합니다)
활성화 레코드 형식은 정적이지만 크기는 동적일 수 있습니다.
동적 링크는 발신자의 활성화 레코드 인스턴스 상단을 가리킵니다.
하위 프로그램이 호출될 때 활성화 레코드 인스턴스가 동적으로 생성됩니다
Subprograms in ALGOL-like Languages 구현
Factorial 예시
지속시간(lifetime)과 가시영역(Scope)
지속시간
- 해당 변수의 storage binding이 지속되는 시간
- 시간 축의 일부분(session)
- static data / dynamic data
가시영역
- 프로그램에서 해당 변수를 볼 수 있는 영역
- 공간의 일부분(section)
- global data / local data
지속시간 및 가시영역
- 지역 변수는 동적, 전역 변수는 정적인 경우가 대부분
- 예외 : static local in C
Scope Hole
- lifetime을 억지로 공간 축에 나타냄(아래 그림)
- 지역변수의 scope에 의해 가려지는 비 지연변수의 scope
- 살아있지만 부를 수 없다. scope hole에 있다.
Terminologies(용어)
lifetime에 따른 변수의 분류
- static var.
- dynamic var.
할당 방법에 따른 변수의 분류
- static allocation: 프로그램 적재 시 할당
- automatic allocation: 서브프로그램 진입 시 할당
- manual allocation: 명시적 연산자나 함수를 통해 변수 할당
용어 혼란: 혹자는 manual allocation을 dynamic allocation이라고 하기도 함
타입 안정성
type safety
- 언어 L에서 타입 범위 외의 값을 해당 타입의 값으로 취급하는 경우를 허용하지 않을 때, L은 타입 안전하다고 함
- 타입 안정성은 특정 프로그래밍 "언어"의 속성임
타입 안정성의 의미
- 어떤 함수 f: A->B가 있다고 가정하자
타입 안정성을 보장하려면 f(a)=b인 a, b 는 a는A에 속하고 b는 B에 속해야 한다.
타입 검사
- 타입 안정성을 검사하는 것
고찰
- /:intx int ->int 인 경우
- 3/0은 타입안정한가? 아니오
Granularity of Typing(타입의 세분성)
Strongly Typed
- 모든 타입 오류를 다 검출해냄
- 즉 타입 오류가 있는데도 불구하고 수행되는 경우는 없음
Weakly Typed
- 타입이라는 개념은 있음
- 하지만 어떤경우에는 타입 오류가 검출되지 않음
- 타입 변환 연산자, variant record 등이 문제의 원인일 수 있음
Typeless
- 어떤 이름은 임의 타입의 객체를 가리킬 수 있음
- 특정 이름에 대한 타입 선언도 별도로 없음
Type Cheking Time
Static Type Checking
- 수행 전에 타입 검사를 완료함
Dynamic Type Cheking
- 수행 중에 타입 검사
- 타입 descriptor를 수행 중 관리해야 함
주의점
- Strongly Typed Language라고 해서 반드시 Static Type Cheking을 수행하는 것은 아님
타입 정의
Data Definition
- const double PI = 3.141592;
- 데이터 이름: PI
- 데이터 값: 3.141592
Type Definition
Equality
두 종류의 동일성
- 데이터 동일성: 두 데이터가 같다.
- 타입 동일성: 두 타입이 같다.
- 참고: 타입에 대해서는 동일성(equality)란 말보다 동등성(equavalence)란 용어를 더 많이 사용함
Data Equality
- atomic data: 비트 패턴이 같으면 동일
- structured data: 대응하는 구성 원소가 같으면 동일
Type Equivalence 종류
- 이름 동등성(name equivalence): 이름이 같으면 동일
- 구조 동등성(structural equivalence): 구조가 같으면 동일
Subtle Question(미묘한 질문)
Parameterized Type(매개변수화된 유형)
- 좀 더 추상화하기위해 사용
- parameterized type 중에서 type parameter를 받는 경우에 generic type이라고 함
- ML은 type을 parameter로 허용함으로써 parameterized type 개념을 확장한다.
'Computer Science > 프로그래밍언어론' 카테고리의 다른 글
Chapter8 Sequence Control (0) | 2023.06.15 |
---|---|
Chapter7 Inheritance (0) | 2023.06.13 |
Chapter5-2 Structured Data Types (0) | 2023.06.12 |
Chapter5-1 Elementary Date Types (0) | 2023.04.20 |
Chapter4 Modeling Language Properties (0) | 2023.04.20 |