minimimi
[프로그래밍언어론] Chapter 1. Introduce (Programming Languages Principles and Practices) 본문
[프로그래밍언어론] Chapter 1. Introduce (Programming Languages Principles and Practices)
99mini 2019. 9. 19. 23:541. 프로그래밍 언어의 역사
기계어 - 어셈블리(Assembly) 언어 - 포트란(FORTRAN)과 Algebraic Notation - ALGOL 순으로 프로그래밍 언어가 발달하였다.
먼저 기계어는 하드웨어를 제어하기 위해 2진법(binary digits)를 이용한 명령어이다. 비트의 특정 부분을 명령 코드(opcode)로 약속하고 나머지 부분에 데이터 혹은 명령을 표현하는 비트로 이용하여 프로그래밍한다. 기계어의 경우 코드가 '0'과 '1'로 구성되었기때문에 코딩하기 매우 어렵고 디코딩하는 것 또한 힘들다. 그래서 프로그래머들은 연상 기호(mnemonic symbols)를 이용하기로 하고 어셈블리 언어가 등장하게 된다.
어셈블리(Assembly) 언어는 기계어에 비해 개발자 입장에서 매우 편리해지기는 하였지만 몇몇 결점은 여전히 존재하였다. 첫 번째 결점은 대부분의 지시(instructions)들이 변수나 메모리를 머신 레지스터에서 놓았다가 다시 가져와야만 한다는 것이다. 이러한 부족한 부분때문에 '추상화'라는 개념이 도입된다. 추상화는 표현을 간결하고 사람이 쉽게 이해할 수 있게 하는 것이다. 두 번째 결점은 서로 다른 기계가 있다면 다른 어셈블리언어가 필요하여 프로그램을 다시 작성해야 되는 번거로움이 있다는 점이다.
고급언어(High-Level Languages)는 어셈블리 언어의 단점을 보환하기 위해서 표기법에서 추상화한다. 추상화를 위해 수학이나 과학에서 사용되는 대수학적 표기법(Algebraic Notation)을 이용하였다. 고급언어 중 1950년대에 등장한 FORTRAN(FORmula TRANslation language)이 있다.
*폰 노이만 병목현상(Von Neumann Bottleneck)*
폰 노이만 구조(Von Neumann Architecture)는 범용 컴퓨터 구조인 CPU, 메모리, 프로그램 구조를 갖는 구조이다. 폰 노이만 병목현상(Von-Neumann Bottleneck)은 이런한 구조 때문에 발생하는 데이터 지연 현상이다.
2. 추상화(Abstration)
프로그래밍 언어 추상화(Programming Language Abstractions)의 일반적인 카테고리에는 데이터 추상화(Data Abstration)와 컨트롤 추상화(Control Abstration)가 있다.
2-1. 데이터(data) 추상화
데이터 추상화는 데이터 값을 갖고 컴퓨터 메모리를 저장할 수 있는 심볼 이름인 변수(Variable)를 정의하는 것이다. 변수는 데이터 타입을 가지게 된다. 그리고 데이터 구조를 이용해서 데이터 값을 모을 수 있다. 구조체, 배열 등이 그 예이다. 또한 패키징, 모듈, 라이브러리 등을 이용해서 데이터의 재사용(reusability)가 가능하다.
2-2. 컨트롤(control) 추상화
추상화를 통해서 instruction의 이해를 쉽게 할 수 있다.
2-2-1. iterator
OOP의 전형적으로 사용되는 iterator는 배열, 리스트, 집합, 트리와 같은 컬랙션과 연관되어있다. 루프에서 모든 요소를 방문할 때 이용된다.
2-2-2. procedure
Subprogram 또는 subroutine이라고 불리는 procedure가 있다. Procedure abstraction은 두 가지를 포함한다. 첫 째로 procedure은 항상 이름으로 정의되고 수행해야되는 액션과 연관되어있다. 이것은 procedure declaration이라고 불리고, 변수나 데이터 선언과 비슷하다. 두 번째로 procedure은 항상 액션이 수행되는 포인트를 불러와야된다. 이것은 procedure invocation 또는 precedure activation라고 불리기도 한다.
함수에서 매개변수(parameter)를 받으므로써 루프보다 복잡한 매커니즘을 수 할 수 있다. 그리고 함수는 higher-order functions와 결합될 수 있다. Higher-order function은 함수를 매개변수로 받거나 리턴값으로 함수를 반환할 수 있다.
3. 컴퓨팅의 패러다임(Computational Paradigms)
3-1. Imperative Language
3-2. Functional Language
3-3. Logic Langauge
3-4. Object-Oriented Langauge
4. 언어 정의
4-1. Syntax
자연어의 문법과 같은 것이다.
4-2. Semantics
언어 정의에서 의미(meaning)에 관련된 정의로 매우 복잡하고 큰 영역이다.