Written by JS970
on
on
프로그래밍언어론 2023-03-02 수업정리
Flow
- 안전한 프로그래밍 언어?
- 프로그래밍 언어에 대한 담론
- 프로그래밍 언어와 패러다임
- 추상화란?
- 프로그램, 프로세스, 프로세서
안전한 프로그래밍 언어?
교수님이 상담을 하는 상황을 가정해 보자, 상담을 위해 대기하고 있는 교수님의 오피스에 호랑이가 들어온다면? 매우 위험한 상황이다. 또한 한국어를 구사하지 못해 의사소통이 이루어지지 않는 사람이 들어오는 경우에도 상담이라는 목적을 달성할 수 없게 된다. 프로그래밍 언어에서도 마찬가지이다. 어떤 함수에 매개변수로 적절한 타입이 들어가지 않는다면 해당 함수가 비정상적으로 동작하거나 에러를 띄울 것이다.
- C, C++, Java등의 언어에서는 type이 정의된 상황이라고 생각할 수 있다.
- Python, Javascript등의 언어는 typeless(?)처럼 보인다. 이는 불안정성을 야기하고 프로그래머는 이에 대해 숙지하고 있어야 한다.
프로그래밍 언어에 대한 담론
- 언어는 구문(Syntax)과 의미(Semantics)로 이루어져 있다.
- Syntax, Semantics는 언어의 설계도이다.
- 이를 현실 세계로 implementation하는 과정 자체는 다소 난해할 수 있다.(구문론, 의미론)
프로그래밍 패러다임
어떤 방식으로 프로그램을 작성해야 할 것인지, 프로그램 수행 모델은 어떨 지에 따라 프로그래밍 패러다임이 바뀐다. Church가 제시한 $\lambda - calculus$ 방식, 튜링의 튜링 머신 방식, 이후 춈스키가 분류한 언어의 4분류에 따른 각각의 방식 모두 별개의 프로그래밍 패러다임을 가진다.
- 춈스키는 프로그래밍 언어를 아래와 같은 4개의 오토마타로 인식됨에 따라 분류했다.
- TM(Turing Machine)
- PDA(Push Down Automata)
- LBA(Linear Bounded Automata)
- FA(Finate Automata)
- 위의 분류 중 선형 한계 오토마타(LBA)가 인식하는 프로그래밍 언어가 현재 가장 많이 쓰이는 폰 노이만 구조의 컴퓨터에서 사용된다.
- 위의 여러 프로그램 수행 모델들에 따라 각각 다른 프로그래밍 패러다임을 가진다고 말할 수 있다.
추상화(Abstraction)란?
지금까지 CS에 대해 공부하면서 추상화 라는 표현에 대해 직관적으로만 이해했다. 아직 명확하게 정의된 형태로 이해가 가는 개념은 아니지만 일부 예시를 들자면 아래와 같다.
- 프로그램을 추상화하면 알고리즘이 된다.
- class를 추상화하면 자료 구조가 된다.
- 자료 구조를 추상화하면 연산이 된다. 추상화의 반대 표현은 구체화이다.
- 연산을 구체화하면 자료 구조가 된다.
- 자료 구조를 구체화하면 class가 된다.
- 알고리즘을 구체화하면 프로그램이 된다.
프로그램, 프로세스, 프로세서
익숙한 개념이지만 다시 한 번 정리하자면 아래와 같다.
- 프로그램은 하드디스크에 저장되어 있는 프로세스의 실행 파일이다.
- 프로세스는 프로그램이 메모리에서 실행되는 상태를 의미한다.
- 프로세서는 프로그램의 의도대로 메모리의 내용을 바꾼다.