본문 바로가기
Team

4월 20일 월요일 소소한 공부

by seungh2 2020. 4. 20.

"프로그래밍언어개론" 1주차 복습

지금 듣고있는 전공 과목인 "프로그래밍언어개론" 1주차 소소한 복습!

 

프로그래밍 언어론을 배우는 이유

1. 아이디어 표현 능력 향상

2. 원래 알고있는 프로그래밍 언어 사용 능력 향상

3. 새로운 프로그래밍 언어를 쉽게 습득 가능

4. 구현의 중요성에 대한 인식 향상

5. 문제에 따라 적절한 프로그래밍 언어 선택 능력 향상

6. 컴퓨터 역사에 대한 전반적인 이해

 

프로그래밍 언어를 3가지로 분류해보자!

1. 명령형 언어 : 주로 변수, 배정문, 반복문 등을 이용해서 프로그램 작성. 순서가 중요.

2. 함수형 언어 : 파라미터(매개변수)를 받아 실행하는 함수만으로 프로그램을 작성. 순서가 중요하긴 한데 명령형 언어보다는 아님!

3. 논리형 언어 : 순서는 중요하지 않아! 규칙을 기반으로 한 언어.

 

폰 노이만 구조(von Neumann)

- 명령형 언어에 적합한 구조.

- 기억장치와 CPU가 분리되어있다.

- 기억장치에 프로그램과 데이터가 저장된다. ( 프로그램 명령은 제어장치로, 연산에 필요한 데이터는 연산장치로, 연산의 결과는 연산장치에서 기억장치로 보내진다.)

- 변수는 기억장치의 소자에 해당한다.

- 배정문은 기억장치와 CPU 사이에서 명령과 데이터가 연속적으로 이동하면서 실행된다.

- 반복문의 명령들이 기억장치의 이웃장소에 저장되어 있어 효과적으로 실행이 가능하다.

 

폰 노이만 구조의 문제점 : Bottleneck현상(병목 현상)

모든 명령어는 CPU와 기억장치 사이에서 이동해야하는데

CPU와 기억장치 사이의 데이터 이동속도가 CPU의 처리속도보다 엄청 느림!

-> CPU는 빠른데 기억장치 속도가 느려! => CPU가 노는 시간이 생긴다.

Cache 사용, Interleaving, Pipeline 으로 해결이 가능하다!

 

프로그래밍 언어 구현 방법 3가지

1. Compiler 방법

- 프로그램을 기계어로 번역하고 번역된 프로그램을 기억장치에 저장한 후 실행.

- 실행과정 : 어휘분석 -> 구문분석 -> 의미분석 -> 코드 생성

- 번역 과정은 느리고 복잡하지만 실행 과정은 매우 빠르다.

 

2. 순수 Interpreter 방법

- 프로그램을 번역하지 않고 문장단위로 해석하면서 순서대로 실행.

- Compiler 방법보다 구현하기 용이

- 디버깅이 용이하지만 실행 속도가 매우 느리고 프로그램을 실행하기 위해 많은 기억 공간이 필요.

 

3. 혼합 Interpreter 방법

- Compiler 방법과 순수 Interpreter 방법의 혼합 형태.

- 실행과정 : 어휘분석 -> 구문분석 -> 의미분석 -> 생성된 중간 코드를 명령단위로 해석하며 순서대로 실행

- 순수 Interpreter 방법보다 빠르다.

 

4. Just in Time

- 혼합 Interpreter 방법과 비슷하지만 다르다.

- 일단 프로그램을 중간 언어로 번역하고, Interpreter처럼 실행하는데 컴파일러가 한번 기계어로 바꾼 코드는 다시 컴파일 호출 없이 실행이 가능하다.

 

프로그래밍 언어 평가 기준

1. Readability (가독성) : 이미 작성된 프로그램을 잘 이해할 수 있는가?

디버깅과 프로그램 유지보수에 Readability가 중요해!!

 

영향을 미치는 요인 SODS

Simplicity(간결성)

- 너무 많은 종류의 문장을 지원하면 가독성이 안좋다.

- 동일한 기능의 연산표현 방법이 여러 개면 가독성이 안좋다.

- 연산자 overloading은 프로그램을 이해하는데 좋지 못한 기능

 

Orthogonality(직교성)

- 언어의 구성요소를 임의로 조합해서 프로그램을 작성할 수 있는 기능. (구성요소들은 의미적으로 서로 독립적)

- 완벽에 가까운 직교성은 문제를 유발하기도 한다. ( 상식적이지 않은 조합은 가독성 저하)

 

Data Type

- 적절한 data type이 지원되어야 가독성에 좋다.

- 다양한 data type이 지원되어야 하고 다양한 자료구조를 data type으로 정의될 수 있어야 한다.

 

Syntax

- identifier의 길이를 제한하면 가독성을 저하시킨다.

- 특수문자를 identifier에 사용가능하면 가독성이 좋다.

- 특수 단어들도 가독성에 좋다.

- 표현 형식이 같거나 비슷한데 경우에 따라 다른 의미를 가지면 가독성이 떨어진다.

 

2. Writability (작성력) : 새 프로그램을 작성할 떄 쉽게 작성할 수 있는가?

새 프로그램 작성의 용이성을 결정한다.

 

영향을 미치는 요인 SOAE

Simplicity(간결성)

- 지원되는 구조가 간결할수록 작성력이 좋다.

 

Orthogonality(직교성)

- 가독성과 달리 직교성이 완벽해도 작성력은 항상 우수하다.

- 직교성이 지원되는 프로그래밍 언어는 작성력이 우수하다.

 

Abstraction 추상화

- 복잡한 자료구조나 연산을 간단히 사용할 수 있도록 정의되어야한다.

 

Expressivity 표현력

- APL언어는 매우 강력한 연산자를 지원하여 표현력이 좋지만 가독성이 떨어진다.

 

3. Reliability (신뢰성) : 모든 조건에서 프로그램이 정확하게 실행되는가? 

 

영향을 미치는 요인 TEA

Type Checking

- Type Error는 일찍 발견할수록 오류 수정 비용이 작다. -> Compile할 떄 하는 것이 바람직

 

Exception handling

- Exception handling이 지원되면 신뢰성 향상에 긍정적인 영향을 미친다.

 

Aliasing

- 메모리의 한 저장 장소를 여러 이름으로 접근할 수 있는 기능

- 신뢰성을 높이기 위해 별칭 기능을 제약할 수 있다.

 

4. Cost : 프로그램 개발 및 유지보수에 시간과 경비가 얼마나 필요한가?

- 프로그래머 양성비용

- 프로그램 개발 비용

- 프로그램 실행 비용

- 유지보수 비용

 

충돌관계

신뢰성 vs 실행비용

Type Checking을 철저히 하면 신뢰성은 높아지지만 실행 비용이 많이 든다.

 

가독성 vs 작성력

APL언어에서는 매우 강력한 연산자를 제공해서 작성력은 높아지지만 가독성이 낮아진다.

 

작성력 vs 신뢰성

가변레코드의 사용과 포인터의 사용은 작성력은 높아지지만 신뢰성은 낮아진다.

728x90

'Team' 카테고리의 다른 글

4월 27일 월요일 소소한 공부  (0) 2020.04.27
4월 24일 금요일 소소한 공부  (0) 2020.04.25
4월 23일 목요일 소소한 공부  (0) 2020.04.24
4월 22일 수요일 소소한 공부  (0) 2020.04.23
4월 21일 화요일 소소한 공부  (0) 2020.04.22

댓글