윤재에요 2023. 6. 13. 01:52

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:
    1. Save the execution status of the caller(발신자의 실행 상태를 저장하세요)
    2. Carry out the parameter-passing process(매개 변수 전달 프로세스를 수행하세요.)
    3. Pass the return address(리턴 주소를 전달하세요.)
    4. Transfer control to the callee(callee에게 제어를 전달하세요)
  • Return Semantics:
    1. If pass-by-value-result parameters are used, move the current values of those parameters to their corresponding actual parameters(Pass-by-value-result 매개 변수가 사용되는 경우, 해당 매개 변수의 현재 값을 해당 실제 매개 변수로 이동합니다.)
    2.  If it is a function, move the functional value to a place the caller can get it(그것이 함수라면, 기능 값을 발신자가 얻을 수 있는 곳으로 옮기세요.)
    3. Restore the execution status of the caller(발신자의 실행 상태를 복원하세요)
    4. 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 개념을 확장한다.