Written by JS970
on
on
프로그래밍언어론 2023-03-09 수업정리
Flow
- 프로그래밍 언어의 평가기준(속성)
- 프로그래밍 언어 설계의 trade-off
- Programming Languages as Virtual Computers
- 프로그래밍 언어의 구현 방법
- 프로그래밍 환경
프로그래밍 언어의 속성
- Writability - 프로그램을 쉽게 구현할 수 있는가?
- Readability - 가독성이 높은가?
- Efficiency - 컴파일 시간이 오래 걸리지는 않는가?(효율적인가?)
- Reliability - 신뢰성
- Portability - 이식성 -> 여러 플랫폼에서 지원하는가?(C 언어의 장점)
- Orthogonality - 직교성
- C언어에서 swap을 예시로 들어 보자. swap1(int a, int b) 과 swap2(int a[], int b[]) 함수는 내부 연산이 같다고 하더라도 서로 다르게 동작한다. 이는 파라미터의 차이 때문이다(swqp1 -> int, swap2 -> pointer).
- 이에 대해 C언어는 파라미터 패싱에 있어서 Orthogonal하지 않다고 말할 수 있다.
- Abstraction - 추상화 수준(High Level Language <-> Low Level Language)
- Homoiconicity(the same representation)
- Control(함수, 프로시저) 과 data(자료구조)의 표현이 같다는 특징이 있다.
프로그래밍 언어 설계의 trade-off
- Reliability <--> Efficiency
- Writability <--> Readability
- Safety <--> Flexibility
- C++에서는 private member access가 제약되지만(Safety가 높다), Python에서는 그러한 기능이 없다(Flexibility가 높다).
Programming Languages as Virtual Computers
- Shell은 운영 체제 위에서 돌아가는 프로그램이다.
- 프로그래밍 언어는 Shell에서 작동하는 가상 컴퓨터라고 생각할 수 있다.
Virtualization
- 가상화라고 번역 가능하지만 문맥 상 "사실상의" 라는 의미로 받아들이면 이해하기 쉽다.
- 프로그램 가상화 : JVM에서의 .net
- 하드웨어 가상화 : VMware, VirtualBox, WSL등
- Azure, AWS등의 서비스를 통해 자원을 제공받을 수 있지만 실제로는 가상화를 통해 서비스를 제공하므로 어떤 machine인지는 모른다.
프로그래밍 언어의 구현 방법
- 컴파일러를 사용해 구현하는 방식
- 위 그림에서 target program은 곧 machine code를 의미한다.
- C, C++이 대표적인 컴파일러를 사용하는 프로그래밍 언어이다.
- 인터프리터를 통해 구현하는 방식
- 인터프리터는 하드웨어와 상호작용하여 프로그램이 실행되도록 한다.
- Java의 byte code, p-code, CIL(.net에서 사용) 등이 인터프리터 방식이다.
- Hybrid Implementation
- 컴파일러 방식과 인터프리터 방식을 모두 사용한다.
- 컴파일러 방식과 인터프리터 방식을 모두 사용한다.
프로그래밍 환경
- IDE
- Editor
- Language Processor(컴파일러, 인터프리터)
- Debugger
- Software Engineering Tools
- Document Generator
- Test Pattern Generator
- Profiler
- 형상 관리 툴(git)
- AI Tools
- GPT CoPilot
- Code GPT
- VScode에 플러그인으로 추가 가능하다.
- 위의 두 툴 모두 gpt-3 기반이다.
- gpt : 자연어 처리 모델