-
1주차 프로그래밍 언어란?Computer Science🖥️/Programming Language 2021. 9. 24. 20:51
Programming Languages & Related Issues
- Introduction to Programming Languages
- Review for Computing Architecture & Environments
1. Language and programming language
- Language
: 사람 사이에서 소통하기 위한 도구.
- Programming Language
: 컴퓨터를 제어하기위해 사용자들 사이에서의 프로토콜. & 기계 간 통신을 위한 도구.
- Definition of formal language
: formal language 란 수학적으로 정확한 구성 규칙을 가진 언어이며 더 정확하겐 일부 알파벳들의 단어 집합이다.
예를 들어 문자 a, b, c로 구성된 알파벳을 취하면 이 알파벳에 대한 formal language는 집합 {a, aa, aba, ca}가 될 수 있다.
물론 이 언어는 그다지 유용하지 않아 보이지만, 주목할 점은 적절한 구성 규칙 세트(문법)를 사용하면 C 또는 PostScript와 같은 언어를
만들 수 있다는 것이다.
2. Why we learn programming languages?
- 더 효과적인 알고리즘을 구현하기 위해서
- 목적에 따른 더 나은 프로그래밍 언어를 선택하기 위해서
- 새로운 언어를 더 빠르고 쉽게 배우기 위해서
- 더 나은 프로그래밍 언어를 개발하기 위해서
3. Attributes of a Good Language (5가지)
-> 이 속성을 지키면 좋은 언어라는 것
1. Orthogonality (직교성)
: Ability of combine various features of a language
- 의존성이 없는 것을 의미하며 이 특징을 갖고 있는 언어라면 그 특징들을 합쳐 또다른 새로운 언어를 만들 수 있다.
ex) if (q < r) then S1 else S2 // S1 & S2 는 서로 교집합이 없기 때문에 저 문장이 가능.
직교성은 서로 교집합이 없고 독립적인 언어의 특징을 의미.
2. Support for abstraction
: Construct to factor out reoccurring patterns // 반복되는 패턴을 배제하기 위한 구성
* 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것
- 주어진 객체, 작업의 속성들 중에서 사용자에게 필요치 않은 부분은 배제시키는 것.
- 추상화를 지원하게 되면 일부 속성들만을 가지고 주어진 객체, 작업들을 필요한 정도로 묘사가 가능하다.
- 또한 소스 코드의 가독성을 증가시킨다. (생소한 PL이더라도 추상화 된 형태를 보면 짐작 가능)
3. Natural for various applications
: For business, mathematics, science, game, etc..
- 모든 분야를 표현하기에 좋은 언어를 만든다면 좋겠지만 상당히 어려우므로 적어도 한 domain 에선 자연스럽게 쓰이도록 만들자는 것.
ex) unity for VR, AR
4. Easy of program verification and debugging
: Formal verification & desk checking
ex) writting in program using indentation 하면 이 프로그램이 correctly 짜진 건지 확인이 빠르다.
5. Portability and Translation
: Minimum degree of computation and space complexity
Considering various architecture
- 같은 프로그램을 여러 다른 machine에서 돌아갈 수 있도록 이식성이 필요
- 다른 언어로의 번역도 생각해서 구조를 잘 짜야한다.
4. Classification of the Languanges
1. Based on application domain : 각 분야에 목적을 갖고 생성된 언어들로 분류
2. Based on execution environment : 실행 환경을 기준으로 언어 분류
- bach processing languages -> cpu, 프린트 큐 와 같은 언어
- conversational languages -> 1:1대화식 언어 ex) Lisp, Java
- embedded languages
3. Based on data computational models : 데이터 처리 방식을 기준으로 언어 분류
5. Models of Programming Languages
- Imperative Languages(Command Driven Languages)
: