1. Programming language의 역사
1) Machine language(machine code)
특징:
- 폰 노이만이 고안한 컴퓨터 아키텍쳐는 operator을 통해 명령어를 연속적인 이진코드로 변환할 수 있었다.
이 이진코드들을 machine langauge라고 한다.
- machine laguage들은 fetch, decode, excution 과정을 거쳐 실행된다.
단점:
- 사람이 한 눈에 보고 이해하기 어렵다.
- 에러가 발생하기도 쉽다.
2) Assembly language
특징:
- assembly language는 명령 코드와 메모리 위치를 표현하는 연상기호의 집합이다.
- 어셈블러는 assembly language를 machine code로 변환하고, 로더는 machine code들을 컴퓨터 메모리에 저장한다.
단점:
- 수학적인 표기를 위한 추상화가 부족하다.
- 컴퓨터 하드웨어마다 사용되는 명령어 집합이 다르다.(통일성 x)
3) FORTRAN
특징:
- 대수적 표현법과 부동소수점을 지원하였다.
단점:
- structured control statement와 data structure 지원이 부족하다.
4) ALGOL
특징:
- structured control statement를 제공하였다.(ex: loop문, if-else문...)
- 여러 개의 숫자 형식과 배열을 지원하였다.
- 하드웨어 종류와 무관하다. 대신, 각 하드웨어 종류에 맞는 ALGOL 컴파일러가 필요했다.
- 많은 high-level 언어들이 ALGOL을 계승하였다.
2. Abstraction
추상화에서 필요한 것
- 디테일은 숨기기
- 중요한 부분을 보여주기
추상화의 타입
- data abstraction: 자료의 행동, 특성을 추상화(ex: 숫자, 문자열, 검색 트리...)
- control abastraction: control 특성을 추상화(ex: loop문, 조건문, 프로시저 호출...)
추상화 단계(정보의 양과 관련)
- basic abstraction: 가장 localized된 기계 정보를 수집
- structured abstraction: 프로그램 구조에 대한 중간 정보를 수집
- unit abstraction: 프로그램에서 큰 규모의 정보를 수집
1) Data abstaction
1️⃣ basic control abstraction
- 데이터 값의 표현을 숨기는 것
- data type: 데이터 값의 종류에 대한 이름을 제시
- declaration: 변수 이름과 데이터 타입을 제공하는 과정
2️⃣ structured abstraction
- 하나의 unit 안에서 데이터 값과 관련된 것을 모으는 것
- 여러 개의 데이터 타입 제공
- 배열: 같은 데이터 타입의 여러 데이터를 연속된 인덱싱된 아이템으로 표현
- txt 파일: 연속된 문자들을 외부 저장 기기로 부터 가져오기/내보내기 지원
1️⃣ unit abstraction
- 데이터 타입과 관련이 있다.
- 데이터 값들과 값들에 대한 명령어들의 집합
- 재사용성을 제공한다.
2) Control abstraction
1️⃣ basic control abstraction
- 몇몇 기계 명령어들을 합쳐 이해하기 쉬운 추상구문으로 만듦
2️⃣ structured abstraction
- 프로그램을 실행을 좌우하는 루틴? 안의 중첩된 명령어들의 집합으로 나눔
ex: branch intstruction, iterator, prodedure, function...
3️⃣ unit abstraction
- 프로그램의 특정 부분에 대해 논리적으로 연관된 기능을 제공하는 프로시저의 집합
- 프로그램이 제공된 unit의 기능 상세 정보를 알지 못해도 돌아갈 수 있도록 함
ex: thread, proccess, task...
3. Programming Paradigms
1) imperative paradigm
- 3가지 특징을 가진 언어
1️⃣ 명령을 표현하는 구문의 시퀸스로 표현
2️⃣ 메모리 위치를 나타내기 위해 변수를 사용
3️⃣ 변수의 값을 바꾸기 위해 할당 사용
2) functional paradigm
- applicative language
- lambda calculus에서 함수의 추상적인 표현을 바탕으로 함
- 변수나 할당이 허용되지 않음
- 반복문이 존재하지 않음
- 재귀함수 이론의 특성을 따름
1️⃣ 정수값
2️⃣ 산술 함수
3️⃣ 기존 함수, 선택 및 재귀 기능을 사용하여 새 함수를 정의하는 메커니즘
3) logic paradigm
- declarative language
- 프로그램은 boolean값으로 표현되는 주장의 집합으로 구성
- 기본 시스템이 제어 흐름을 결정
- 매우 high-level 언어이다
4) object-oriented paradigm
4. Language definition
- syntax: 프로그램의 구조
- semantics: (실행)프로그램의 의미
1) syntax 정의
- token: 프로그래밍 언어의 어휘 (ex: 키워드, 명령어 기호..)
- lexical structure: 프로그래밍 언어의 어휘구조
- context-free grammar사용
2) semantics 정의
- 모든 맥락에서 의미에 대한 포괄적인 설명을 제공하기는 어려움
5. Language translator(=language processor)
- 프로그램 언어를 받아서 실행
- interpreter: 프로그램을 즉시 실행
- compiler: 실행에 적합한 형태로 프로그램을 제작하여 실행
- pseudo-interpreter: 위의 두 방식을 혼합
6. Error handling
1) syntax error
프로그램 형식이 잘못되었을 때 발생하는 에러
2) semantic error
- static semantic error: 컴파일링 하는 동안 감지되는 에러 (ex: 타입 에러...)
- dynamic semantic error: run-time 동안 감지되는 에러 (ex: division-by-zero)
3) logic error
- 프로그래머가 원한 값과 다른 값을 내놓는 경우
- 사실상 잡아내기 어렵다. 프로그래머가 잡아내야 한다.
예시)
public int gcd ( int v# )
{
int z = value
y = v;
while ( y >= 0 )
{
int t = y; y = z % y; z = t;
}
return y;
}
1번째 줄: lexical error (변수에 특수문자가 포함되면 안됨)
3번째 줄: syntax error (세미콜론 빠짐)
4번째 줄: static semantic error (y가 정의되지 않음)
5번째 줄: dynamic semantic error (y가 0일 수 있음 = division by zero)
9번째 줄: logic error (t 대신에 y가 반환 됨)
댓글