4장은 코드 중심 내용이므로 나중에 깃허브에 올려두도록 해보겠다.
5장 내용 바로 시작해보겠다.
- 변수
- 이름, 주소, 값, 타입, 존속기간, 영역(scope)
- 이름 형식
- 길이가 너무 짧으면 의미 포함이 불가능하다
- FORTRAN 95: 최대 31글자이다.
- C99: 제한이 없으나 처음63개 문자만 의미, 외부 이름은 최대 31자에 제한된다.
- C#, Ada, Java: 제한 없고, 이름에 포함된 모든 문자는 의미가 있다.
- C++: 제한 없고, 흔히 언어 구현자가 제한한다.
- 특수문자
- PHP : 모든 변수 이름이 $로 시작한다.
- Perl : 모든 변수이름은 특수문자 $, @, %로 시작되며 각각 scalar, array, hash타입이다.
- 특수어
- 키워드
- 예약어
- 대부분의 언어에서 특수어는 예약어이다.
- 길이가 너무 짧으면 의미 포함이 불가능하다
- 주소(l-value)
- 값(r-value)
바인딩
- 바인딩(binding) - 개체와 속성간의 연관
- ex) 변수와 타입, 변수와 값, 기호와 연산 등
- 바인딩 시기: 바인딩이 일어나는 시기
- 언어 설계 시간 : 연산자기호와 연산간의 바인딩
- 언어 구현 시간(컴파일러 설계 시간) : 정수 타입과 그 크기 간의 바인딩 in C
- 컴파일 시간: 변수와 타입간의 바인딩
- 링킹(linking) 시간 : 라이브러리 함수 호출과 함수 코드와의 바인딩
- 적재(loading) 시간 : static 변수와 메모리 셀의 바인딩
- 실행 시간 : 비static 지역 변수와 메모리 셀의 바인딩
다음 코드에서 바인딩 시기를 알아보도록 하자.
// In Cint count;...count = count + 5 |
- count의 타입
- 변수와 타입간의 바인딩이므로 컴파일 시간에 바인딩
- count의 가능한 값들의 집합
- 정수 타입과 그 크기 간의 바인딩 이므로 언어 구현 시간에 바인딩
- 연산자 기호 + 의 의미
- 연산자 기호이므로 언어 설계 시간에 바인딩
- 리터럴 5의 내부 표현
- 정수 타입과 그 크기 간의 바인딩 이므로 언어 구현 시간에 바인딩
- count의 값
- 비static 지역 변수와 메모리 셀의 바인딩 이므로 실행 시간에 바인딩
- 바인딩 유형
- 정적 : 바인딩이 실행 전에 일어나고, 실행 중에 변경 X
- 타입 명세가 명시적이거나 묵시적
- 동적 : 바인딩이 실행 중에 일어나고, 실행 중에 변경 O
- 정적 : 바인딩이 실행 전에 일어나고, 실행 중에 변경 X
- 타입 바인딩
- * 정적일 경우
- 명시적(explicit) : 선언문을 통해 타입 명세
- 묵시적(implicit) : 디폴트 관례를 통해서 타입 명세 => 타입 추론(type inference)
- ex) Perl에서 $,@,%
- *동적일 경우
- 변수 타입이 할당문을 통해서 명세
변수의 유형
- 정적
- 스택-동적
- 명시적 힙-동적
- 묵시적 힙-동적
- 정적 변수(static variable)
: 프로그램 실행 시작 전 에 메모리 셀에 바인딩되고, 그 바인딩이 프로그램 실행이 종료될 때까지 유지
장점
: 효율성, history-sensitive 부프로그램 (이전 값에 따라 현재 값이 달라지는 것) 지원
단점
: 유연성 감소( 재귀함수 불가), 기억공간이 변수들 간에 공유 불가
- 스택-동적 변수(stack-dynamic variable)
: 선언문이 세련화(elaboration)될 때 기억공간에 바인딩되는 변수
장점
: 재귀적 부프로그램 지원 , 부프로그램간 메모리 공간 공유 가능
단점
: 할당/회수에 따른 실행 부담, 간접 주소지정으로 느린 접근, history-sensitive 부프로그램 지원 불가
- 명시적 힙-동적 변수(explicit heap-dynamic variable)
: 프로그래머가 명세하는 실행시간 명령 어에 의해서 할당되고 회수되는 이름 없는 변수
: 메모리 셀은 힙 상에 할당
: 변수의 타입 바인딩은정적
: 포인터나 참조 변수를 통해서 참조
ex) Java의 객체, C++에서 new로 할당되는 객체
장점
: 동적 자료구조 생성
단점
: 예측 불가능하기 때문에 사용,관리 어려움
- 묵시적 힙-동적 변수(implicit heap-dynamic variable)
: 할당문에 의해서 할당과 반환이 이루어 지는 변수
: 메모리 셀은 힙 상에 할당
: 변수의 모든 속성이 값이 할당될 때마다 바인딩
장점
: 유연성
단점
: 컴파일러에 의한 오류 탐지 능력 상실
'프로그래밍 언어론' 카테고리의 다른 글
[프로그래밍 언어론] 9장 부프로그램 (0) | 2024.06.14 |
---|---|
[프로그래밍 언어론] 8. 문장 수준 제어 구조 (0) | 2024.06.13 |
[프로그래밍 언어론] 3. 구문과 의미론 (0) | 2024.05.12 |
[프로그래밍 언어론] 1. 기본적인 사항 (0) | 2024.03.06 |